单片机小实验板系统设计new_第1页
单片机小实验板系统设计new_第2页
单片机小实验板系统设计new_第3页
单片机小实验板系统设计new_第4页
单片机小实验板系统设计new_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1、单片机小实验板设计目的2、单片机小实验板设计要求3、单片机小实验板设计需求分析4、 AT89C51单片机概述5、单片机小实验板设计原理5.1电源模块5.2单片机最小电路 5.3发光二极管(LED)模块 5.4发光数码管静态显示模块 5.5发光数码管动态显示模块5.6 16位矩阵键盘模块5.7音频放大模块5.8 DS18B20数字温度计模块6、实验数据及源代码 6.1流水灯、交通灯控制等 6.2 数码管静态显示程序如秒表、计数器等6.3键盘显示程序6.4数码管动态显示程序如数字钟等6.5音频程序6.6数字温度计7、程序仿真与硬件调试中出现的问题及其解决方法8、 总结绪论通过本次课程设计进

2、一步熟悉和掌握单片机的结构及工作原理,巩固和加深“单片机原理与应用”课程的基本知识,掌握电子设计知识在实际中的简单应用。综合运用“单片机原理与应用”课程和先修课程的理论及生产实际知识去分析和解决电子设计问题,进行电子设计的训练。学习电子设计的一般方法,掌握AT89C51芯片以及简单电子设计过程和运行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是总体设计能力。单片机小实验板设计目的1、 掌握C51单片机的各个引脚功能。2、 进一步熟悉KEIIL C51集成环境的使用方法。3、 熟悉数码管和DS18B20的原理及其使用方法。4、 熟练掌握电路焊接,并能够检查存在的问题。5、 熟练程序的

3、基本设计及其调试。 设计方案一 单片机小实验板设计目的1.掌握单片机最小系统的设计。2.掌握+5v稳压电源电路的设计。3 发光二极管(LED)模块的设计,如 各种流水灯,跑马灯,十字路口交通灯等。4. 两位发光数码管静态显示的设计。5. 六段发光数码管动态显示的设计。6. 44矩阵键盘的设计。7. 电子密码锁的设计。8. 音频放大模块的设计。9. DS18B20数字温度计模块的设计。二、 单片机小实验板设计要求1、 电路板设计要注意元器件的封装和各个元器件之间的距离,布线尽量减少交错,增加电路板的稳定性。2、 焊接不能出现虚焊,或者短路,同时注意防止高温烧坏部分元件和电路板。3、 程序设计要减

4、少每必要的枝节,尽力提高程序的稳定性,实用性。三、 单片机小实验板设计需求分析 该设计方案是以MC51单片机为核心,采用LED显示系统,辅以闹钟模块,音频及其电子琴、温度采集模块、日期、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示,对温度调节模块进行了重点设计用DS18B20, 实现SB0、SB1、SB2、SB3四个键实现时钟正常显示,调时,及闹钟时间设置。本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。四、 AT89C51单片机概述89S51各引脚功能介绍:VCC:89S51 电源正端输入,接+5V。VSS:电源地端。XT

5、AL1:单芯片系统时钟的反相放大器输入端。XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。RESET:89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:EA为英文External Access的缩写,表示存取外部程序代

6、码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。ALE/PROG:端口3的管脚设置:P3.0:RXD,串行通信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。P3.3:INT1,外部中断1输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。P3.6:WR:外

7、部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。五、 单片机小实验板设计原理整个电子时钟系统电路可分为6大部分:中央处理单元(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。按模块可分为8部分:电源模块、单片机最小电路、发光二极管(LED)模块、发光数码管静态显示模块、发光数码管动态显示模块、16位矩阵键盘模块、音频放大模块、DS18B20数字温度计模块。1) 电源模块 电源部分运用了MC7805三端稳压器,可将电压稳压在5V,Vcc接单片机40脚,20脚为接地。2) 单片机最小电路1、复位电路 MCS-51单片机的复位是由外部的复位电路来实现的。复位引脚RST

8、通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。电路图如下:上电自动复位是通过外部复位电路的电容充电来实现的。只要V

9、cc的上升时间不超过1ms,就可以实现自动上电复位。3、时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。电路图如下:MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。3) 发光二极管(LED)模块采用低电平有效,共阳接发,为防

10、止二极管击穿,在每个二极管中串接了1K的限流电阻。4) 发光数码管静态显示模块 采用共阳极八段数码管, 因此单片机I/O口为低电平有效,分各位与十位两个,为防止数码管由于电流高二损坏,在数码管每段串接电阻。5) 发光数码管动态显示模块 共阳极数码管6个,在片选端各有三极管放大驱动,74LS244为锁存器,数据口占用8个I/O口。片选占用6个I/O口。6) 16位矩阵键盘模块 按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开

11、关的机械特性有关,一般在5-10ms之间。为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。本文采用的是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。7) 音频放大模块 采用LM386放大,最大输出功率1W,失真度低,适合小实验板的音频放大。8) DS18B20数字温度计模块数字温度传感器采用DS18B20,只需一根信号线与单片机连接,不需要其他外部元件,电压范围为3.3V5V,测温范围为一55+125,在-10+85范围内,精度为O.5,温度最高分辨率可达0.0625。六、 实验数据及源代码1) 流水灯、交通灯控制等#i

12、nclude /*流水灯左移-使用顺序程序实现*/void delay(unsigned int count) /延时程序 unsigned int i,j,k; for(i=0;icount;i+) for(j=0;j10;j+) for(k=0;k120;k+) ; void main() /主函数 P1=1; /P1口拉高电平 while(1) /循环 P1_0=0; /P1_0置低电平,低电平有效,LED亮 delay(100); /延时一秒 P1_0=1; /P1_0置高电平,LED灭 P1_1=0; /以此类推 delay(100); P1_1=1; P1_2=0; delay(1

13、00); P1_2=1; P1_3=0; delay(100); P1_3=1; P1_4=0; delay(100); P1_4=1; P1_5=0; delay(100); P1_5=1; P1_6=0; delay(100); P1_6=1 P1_7=0; delay(100); P1_7=1; 2) 数码管静态显示程序如秒表、计数器等#include /*/ 数码管-静态工作方式实现/*/ void delay(unsigned int count)/延时程序 unsigned int i,j,k; for(i=0;icount;i+) for(j=0;j10;j+) for(k=0;

14、k9)y=0;x+;if(x9)x=0;3) 键盘显示程序/*/ 按键计数程序 /*/#include unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, /09数组 0x6d,0x7d,0x07,0x7f,0x6f; unsigned char Count; void delay10ms(void) /延时 unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); void main(void) Count=0; P1=tableCount/10; /个位取整P2=tableCount%10;

15、/十位取余while(1) /循环和消抖 if(P3_7=0) delay10ms(); if(P3_7=0) Count+; if(Count=100) /满百位后复位 Count=0; P1=tableCount%10; P2=tableCount/10; while(P3_7=0); 4) 数码管动态显示程序如数字钟等/*/ 数字钟计时 /*/#include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00; /

16、数码管显示段数据unsigned char dispbitcode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/数码管位驱动,第一次驱动接在最低位的那一个数码管unsigned char dispbuf8=0,0,16,0,0,16,0,0;/显示缓冲寄存器unsigned char dispbitcnt;unsigned char second; unsigned char minite;unsigned char hour;unsigned int tcnt;unsigned char mstcnt;unsigned char i,j;void mai

17、n(void)TMOD=0x02;/设置定时器工作方式为2,8位定时状态,自动装入初值。TH0=0x06;/装入初值TL0=0x06;TR0=1;/起动定时器ET0=1;/开启定时器中断EA=1;/开总中断while(1)/主循环if(P0_0=0)/如果P0.0位等于0,往下走for(i=5;i0;i-)for(j=248;j0;j-);/延时防抖动if(P0_0=0)/再次判断P0.0是否等于0,如果是,则设置秒second+;/秒加1if(second=60)/如果秒等于60,又重0开始,以便开始走时second=0;dispbuf0=second%10;/刷新秒个位,并装驱动显示缓冲寄

18、存器dispbuf1=second/10;/刷新秒十位,同上。while(P0_0=0);/等待P0.0放开。(等待按键放开)if(P0_1=0)/如果P0.1位等于0,往下走for(i=5;i0;i-)for(j=248;j0;j-);/延时防抖动if(P0_1=0)/再次判断P0.1是否等于0,如果是,则设置分钟值minite+;/分钟加1if(minite=60)/minite=0;dispbuf3=minite%10;/刷新分钟个位,并装驱动显示缓冲寄存器dispbuf4=minite/10;/刷新分钟十位,同上while(P0_1=0);/等待P0.1放开。(等待按键放开)if(P0

19、_2=0)/大概意思同上,只是这里是用来设置小时值的for(i=5;i0;i-)for(j=248;j0;j-);if(P0_2=0)hour+;if(hour=24)hour=0;dispbuf6=hour%10;dispbuf7=hour/10;while(P0_2=0);void t0(void) interrupt 1 using 0/定时器中断子程序mstcnt+;/用于刷新所显示的数据,第中断8次显示1位数码管(动态显示)if(mstcnt=8)/判断中断8次没,如果是,则显示数据mstcnt=0;P1=dispcodedispbufdispbitcnt;/段位码送P1口,驱动数码

20、管显示P3=dispbitcodedispbitcnt;/选中数码管显示位dispbitcnt+;/显示索引,用于调哪一位数据if(dispbitcnt=8)/判断调完没,如果调完了,则又从第一位开始。dispbitcnt=0;tcnt+;/第中断一次自动加1,如果中断4000次,则秒自动加1if(tcnt=4000)tcnt=0;second+;/秒加1if(second=60)/如果秒等于60,则分钟自动加1,并且秒回0second=0;minite+;/分钟加1if(minite=60)/如果分钟等于0,则小时值自动加1,并且分钟回0minite=0;hour+;/小时值加1if(hou

21、r=24)/如果小时值等于24,则回0hour=0;dispbuf0=second%10;/刷新显示缓冲寄存器dispbuf1=second/10;dispbuf3=minite%10;dispbuf4=minite/10;dispbuf6=hour%10;dispbuf7=hour/10;5) 音频程序#include /*/ 歌曲播放 /*/unsigned char Count;sbit _Speak =P23 ; /讯响器控制脚 unsigned char code SONG = /祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x1

22、0,0x20。;void Time0_Init() TMOD = 0x01; IE = 0x82; TH0 = 0xD8; TL0 = 0xEF; /12MZ晶振,10msvoid Time0_Int() interrupt 1 TH0 = 0xD8; TL0 = 0xEF; Count+; /长度加1/*-功能:1MS延时子程序-*/void Delay_xMs(unsigned int x) unsigned int i,j; for( i =0;i x;i+ ) for( j =0;j0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ)

23、dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; /*读取ds18b20当前温度*/void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC);

24、 / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(100); / 延时Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(100);a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位temp_value=b4; void temp_to_str() /温度数据转换成液晶字符显示 TempBuffer0=temp_value/10+0; /十位 TempBuffer1=temp_value%10+0; /个位 TempBuffer2=0xdf; /温度符号 TempBuffer3=C; TempBuffer4=0;void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);七、 程序仿真与硬件调试中出现的问题及其解决方法1、动态显示中数码管显示乱码。排查原因:a,数码管排线顺序是否接反; b,数码管的管

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论