资源预览内容
第1页 / 共61页
第2页 / 共61页
第3页 / 共61页
第4页 / 共61页
第5页 / 共61页
第6页 / 共61页
第7页 / 共61页
第8页 / 共61页
第9页 / 共61页
第10页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机应用系统设计实例,1. 8051系列单片机实现计算器功能 2. 简易波形发生器 3. 简易广告屏设计 4. 寻迹小车的设计 5. 无线呼叫系统设计,1. 8051单片机实现计算器功能,一 设计目标和实现方法,满足计算器要求,进行加减乘除运算; 打开计数器时,初始显示数字为0123; 实现简单的数据运算,不支持连续运算; 仿真和调试要用到Protues 和Keil 软件。,二 方案论证与设计,键盘包括0到9十个数字键,加减乘除四个符 号键,清除键和等号键,共16 个按键 ; 键盘选用4x4行列式键盘结构(如下图); 输入模块:键盘扫描; 数字大小范围为4位, 选用4个LED数码管 显示数据和结果;,三 硬件电路设计,(1)主要器件:采用8051 单片机,它能够满足数据的采集、控制和数据处理的需求,显示用输入采用按键方式的4 段LED 数码管; (2)功能和操作:加减乘除运算和显示。步骤如下: 上电后,屏幕初始化,显示初始数值0123; 计算。依次数字键,符号键,数字键,等号键,屏幕上显示出计算结果; 如果要再次计算,可以按下“on/c”键清0,或者按下单片机的复位键,重新初始化。,四 软件设计,模块化程序设计是单片机应用中最常用的程序设计方法; 模块化程序设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以单独 设计,编程和调试,然后组合起来; 本系统的程序模块主要分为主程序,键值获取程序和处理子程序等,其流程图分别如下图所示:,主程序流程图,定时中断子程序流程图,按键处理子程序流程图,主程序: void main() inint(); while(1) if(key)pkey(); ,按键处理子程序: void pkey() switch(key) case zero: modify_LED(0);break; case one: modify_LED(1);break; case two: modify_LED(2);break; case three: modify_LED(3);break; case four: modify_LED(4);break; case five: modify_LED(5);break; case six: modify_LED(6);break;,case seven: modify_LED(7);break; case eight: modify_LED(8);break; case nine: modify_LED(9);break; case clear: key_ptr=3;modify_LED(17);op1=op2=0;break; case add: key_ptr=3;modify_LED(10);break; case sub: key_ptr=3;modify_LED(11);break; case mux: key_ptr=3;modify_LED(12);break; case div: key_ptr=3;modify_LED(13);break; case equ: key_ptr=3;modify_LED(14);break; default:break; key=0; void modify_LED(uchar x) if(key_ptr=3)LED0=LED1=LED2=space; else LED0=LED1; LED1=LED2;LED2=LED3;,LED3=x;key_ptr-; if(x=0) op1=op1*10+x; else if(x=10,case -: op2=op2-op1;break; case *: op2=op1*op2;break; case /: op2=op2/op1;break; default:break; result_pr(); key_ptr ,定时中断子程序: void timer0() interrupt TF0_VECTOR /中断检测键盘键值 TH0=(65536-2500)8; TL0=(65536-2500) /更新段码,wx_port=(1wx_ptr); /更新位选 wx_ptr+;wx_ptr /指向下一位 ,2. 简易波形发生器设计,波形发生器是一种在测量、控制领域经常要使用到的信号发生装置,可以按照要求输出相应波形。其主要功能如下:,输出波形可调;输出复制和频率可调。,设计思路:以正弦波为例,一条正弦波曲线可以看做是一个个点的集合,我们可以按照一定的时间间隔输出这些点的电压值,在输出端就可以得到一个正弦波,时间间隔越小,输出的波形就越接近一个正弦波。,一 硬件设计,这个实现方案使用了以下元器件: 主控单元:AT89s52单片机; 显示界面:液晶屏幕lcd1602; 功能电路:8分辨率D/A转换芯片DAC0832, 运算放大器,与非门,按键等。,简易波形发生器原理图,在上原理图中: P1口作为LCD1602的数据输入总线; P2.22.4作为LCD1602的读/写,使能控制线; P2.02.1作为DAC0832的控制线; P0口作为DAC0832的数据输入总线; 4个按键分别控制波形选择,频率+,频率-, 在DAC0832的输出端外接TL082集成运算放大 器,控制输出波形的幅值。,DAC0832是8分辨率的D/A转换集成芯片,由8位输入锁存器,8位DAC寄存器,8位D/A转换电路及转换控制电路构成。其引脚功能如下:,D0D7:8位数据输入线,TTL电平,有效时间90ns; ILE:数据锁存允许控制信号输入线,高电平有效; CS:片选信号输入线,低电平有效; WR1:数据锁存器写选通输入线,负脉冲有效; XFER:数据传输控制信号输入线,低电平有效; WR2:DAC寄存器选通输入线,负脉冲有效; IOUT1:电流输出端1,其值随DAC寄存器的内容线性 变化; IOUT2:电流输出端2,其值与IOUT1值之和为一常数;,Rfb:反馈信号输入线,改变 Rfb端外接电阻值可调 整转换满量程精度; Vcc:电源输入端,Vcc的范围 为+5V+15V; VREF:基准电压输入线,VREF 的范围-10V+10V; AGND:模拟信号地 DGND:数字信号地,DAC0832管脚图,二 软件设计,主程序流程图,外部中断子程序流程图,定时器中断子程序流程图,主要程序举例 正弦波离散输出表: uchar code sine_tab256= /输出电压从0到最大值(正弦波1/4部分) 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc, 0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec, 0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, /输出电压从最大值到0(正弦波1/4部分) 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2, 0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, /输出电压从0到最小值(正弦波1/4部分) 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43, 0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13, 0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/输出电压从最小值到0(正弦波1/4部分) 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10, 0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d, 0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80; 正弦波输出程序: #define DAdata P0 /DA数据端口 void sine_out() /正弦波输出 DAdata=sine_tabwavecount+; DA_S1=0; /打开8位输入寄存器 DA_S1=1; /关闭8位输入寄存器 ,主程序: void main() uchar i=0; DA_S2=0; /使DAC寄存器处于直通状态 DAdata=0; DA_S1=1; /关闭8位输入寄存器 init_lcd(); waveform=0; TMOD=0x01; /设置定时器0为16位工作方式 IT0=1; /设置外部中断0为下降沿触发 ET0=1; /开定时器中断 EX0=1; EA=1; while(1) ,定时中断子程序: void timer0() interrupt 1 TH0=THtemp; TL0=TLtemp; if(waveform=0) sine_out(); else if(waveform=1) triangle_out(); else if(waveform=2) square_out(); ,外部中断子程序: void key_int0() interrupt 0 uchar keytemp; uint total_freq; /总频率 EA=0; TR0=0; /关总中断与定时器 delay(5); /延时 if(key=0) /有按键按下而引发中断 keytemp=P3,case 0xb0: wavefreqwaveform-; if(wavefreqwaveform1) wavefreqwaveform=10; break; case 0x70: DA_S2=1; break; THtemp=waveTH
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号