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

下载本文档

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

文档简介

目录一、单片机微实验板的设计目的2、单片机微实验板设计要求3、单片机小实验板设计要求分析51MCU概述89C五、单片机微实验板设计原理5.1电源模块5.2单片机最小电路5.3发光二极管(LED)模块5.4LED数码管静态显示模块5.5LED动态显示模块5.616位矩阵键盘模块5.7音频放大模块5.8DS18B20数字温度计模块6.实验数据和源代码6.1流水灯、交通灯控制等6.2数码管静态显示程序,如秒表、计数器等。6.3键盘显示程序6.4数码管动态显示程序如数字时钟等。6.5音频节目6.6数字温度计7、程序仿真和硬件调试中的问题及解决方法8.总结介绍通过本课程的设计,您将进一步熟悉和掌握单片机的结构和工作原理,巩固和深化《单片机原理与应用》课程编制依据知识,掌握简单电子设计知识在实践中的应用。综合运用《单片机原理与应用》课程和必备课程的理论和实践知识,分析和解决电子设计问题,开展电子设计培训。学习电子设计的一般方法,掌握AT89C51芯片和简单的电子设计流程和操作方式,培养正确的设计思维和分析解决问题的能力,特别是整体设计能力。单片机微型实验板的设计目的掌握C51单片机各引脚的功能。详细了解KEIILC51集成环境的使用。熟悉数码管和DS18B20的原理和使用方法。精通电路焊接,能够检查存在的问题。精通程序的基本设计和调试。设计单片机微型实验板的用途1、掌握单片机最小系统的设计。2、掌握+5v稳压电源电路的设计。3、发光二极管(LED)模组设计,如各种行车灯、跑马灯、路口红绿灯等。4、两个发光数码管的静态显示设计。5、六段发光数码管动态显示设计。6.4×4矩阵键盘设计。7、电子密码锁设计。8、音频放大模块设计。9、DS18B20数字温度计模块设计。单片机小实验板设计要求在电路板设计中,要注意元器件的封装和各元器件之间的距离,尽量减少走线,减少交错,增加电路板的稳定性。焊接不得出现虚焊、短路,注意防止高温烧坏部分元器件和电路板。程序设计应减少每一个必要的分支,尽量提高程序的稳定性和实用性。单片机实验板设计要求分析设计方案以MC51单片机为基础,采用LED显示系统,辅以闹钟模块、音响电子琴、温度采集模块、日期、键盘时间调整预设等模块,构建的数字时钟系统可以动态显示实时时钟时间、分、秒、数据显示,温度调节模块主要采用DS18B20设计,实现SB0、SB1、SB2、SB3四个按键,实现时钟的正常显示、时间调节、闹铃时间环境。系统设计的大部分功能都是通过软件实现的,使得电路简单明了,系统稳定性有待大幅度提高。AT89C51微控制器概述89S51引脚功能介绍:VCC:89S51电源正输入,接+5V。VSS:电源地。XTAL1:用于单芯片系统时钟的反相放大器输入。XTAL2:系统时钟的反相放大器的输出端通常设计为只要石英振荡器系统连接到XTAL1和XTAL2即可工作。另外,可以在两个引脚和地之间加一个20PF的小电容。使系统更加稳定,避免因噪声干扰而导致的死机。重置:89S51的复位脚高电平有效。当芯片复位时,只要将该管脚的电平拉高并保持两个机器周期以上,AT89S51就可以完成系统复位。该动作使所有特殊功能寄存器的内容置为已知状态,并开始读取程序代码并执行地址0000H处的程序。EA/Vpp:“EA”是英文“ExternalAccess”的缩写,意思是访问外部程序代码,低电平动作,也就是说当该引脚接低电平时,系统将访问外部程序代码(存储在外部EPROM中)来执行程序。因此,在8031和8032中,EA脚必须接低电平,因为没有程序存储空间。如果使用8751程序空间,该引脚应接高电平。另外,在将程序代码烧写到8751EPROM时,该引脚可用于输入21V烧录高压(Vpp)。啤酒/程序:端口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:外部数据存储器的写信号。P3.7:RD,外部数据存储器的读信号。单片机小型实验板设计原理整个电子钟系统电路可分为6部分:中央处理器(CPU)、复位电路部分、显示部分、键盘输入部分、温度采集部分。按模块可分为8个部分:电源模块、单片机最小电路、发光二极管(LED)模块、发光数码管静态显示模块、发光数码管动态显示模块,16位矩阵键盘模块,音频放大器模块,DS18B20数字温度计模块。电源模块电源部分采用MC7805三端稳压器,可将电压稳定在5V。Vcc接单片机第40脚,第20脚接地。微控制器最小电路1.复位电路MCS-51单片机的复位由外部复位电路实现。复位引脚RST通过施密特触发器连接到复位电路。施密特触发器用于抑制噪声。在每个机器周期的S5P2中,施密特触发器的输出电平被复位电路采样一次后才能使用。获取部分复位操作所需的信号。上电复位:上电复位电路是一个简单的复位电路,只要将RST复位引脚接一个电容到VCC,一个电阻接地。上电复位是指系统上电时,复位电路通过电容给RST复位引脚加一个短高电平信号。该复位信号随着VCC对电容器的充电过程而回落,因此RST引脚被复位。高电平保持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须保持足够长的时间。电路图如下:上电自动复位是通过对外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。3.时钟电路时钟是单片机的心脏。单片机各功能部件的运行均以时钟频率为基准,有条不紊地工作。因此,时钟频率直接影响单片机的运行速度,而时钟电路的好坏也直接影响到单片机系统的稳定性。常用的时钟电路有两种:一种是外时钟法,另一种是外时钟法。本文采用部分时钟法。电路图如下:MCS-51单片机部分有一个高增益反相放大器,用来组成一个振荡器。高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接在石英晶体振荡器和微调电容上,形成一个稳定的自振荡振荡器。发光二极管(LED)模块采用低电平有效,共阳极连接。为了防止二极管击穿,每个二极管串联一个1K的限流电阻。LED数码管静态显示模块采用共阳极八段数码管,所以单片机I/O口低电平有效,分为2位和10位。LED动态显示模组共阳数码管共6个,每一个在片选端都有一个三极管放大驱动。74LS244为锁存器,数据口占用8个I/O口。片选占用6个I/O端口。16位矩阵键盘模块按键的开关状态通过一定的电路转换成高低电平状态。按键关闭过程在相应的I/O端口上形成一个负脉冲。关闭和释放过程必须经过一定的过程才能达到稳定。这个过程是高低电平之间的不稳定状态,称为抖动。通常抖动持续时间的长短与开关的机械特性有关,一般在5-10ms之间。为了防止CPU多次处理单个关闭按钮,应采取措施消除抖动。本文采用独立按键,直接使用I/O口组成单按键电路。每个按键占用一条I/O口线,每个按键的工作状态互不影响。音频放大器模块经LM386放大,最大输出功率1W,失真低。适用于小型实验板的音频放大。DS18B20数字温度计模块数字温度传感器采用DS18B20,只需一根信号线连接单片机,无需其他外接元件,电压范围为3.3V~5V,测温范围为155℃~+125℃,在-10℃~+85℃范围内,精度为±O实验数据和源代码流水灯、交通灯控制等#include<AT89X51.h>//******流水灯向左移动--使用顺序程序实现******//voiddelay(unsignedintcount)//延时程序{无符号整数i,j,k;for(i=0;i<count;i++)对于(j=0;j<10;j++)对于(k=0;k<120;k++);}voidmain()//主函数{P1=1;//P1口拉高电平while(1)//循环{P1_0=0;//P1_0设置为低电平,低电平有效,LED亮延迟(100);//延迟一秒P1_0=1;//P1_0设置为高电平,LED熄灭P1_1=0;//等等延迟(100);P1_1=1;P1_2=0;延迟(100);P1_2=1; P1_3=0;延迟(100);P1_3=1;P1_4=0;延迟(100);P1_4=1; P1_5=0;延迟(100);P1_5=1;P1_6=0;延迟(100);P1_6=1 P1_7=0;延迟(100);P1_7=1;}}数码管静态显示程序,如秒表、计数器等。#include<AT89X51.h>//******************************************************////数码管------静态工作模式实现//********************************************************//voiddelay(unsignedintcount)//延时程序{无符号整数i,j,k;for(i=0;i<count;i++)对于(j=0;j<10;j++)对于(k=0;k<120;k++);}无效的主要(){ 无符号字符leddata[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管显示形式 无符号整数x,y; x=0;y=0; //赋予初始值而(1){ P2=leddata[x]; //展示 P1=leddata[y]; 延迟(30); 是++; //携带 如果(y>9) { y=0; x++; 如果(x>9) { x=0; } }}}键盘显示程序//************************************////按键计数程序////************************************//#include<AT89X51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,//0~9数组 0x6d,0x7d,0x07,0x7f,0x6f};无符号字符计数; voiddelay10ms(void)//延迟 { 无符号字符i,j; 对于(i=20;i>0;i--) for(j=248;j>0;j--); } 无效主要(无效) { 计数=0; P1=表[计数/10];//一位数四舍五入 P2=表[计数%10];//十的余数 while(1)//循环和去抖动 { 如果(P3_7==0) { 延迟10毫秒(); 如果(P3_7==0) { 计数++; if(Count==100)//百位后复位 { 计数=0; } P1=表[计数%10]; P2=表[计数/10]; 而(P3_7==0); } } } }数码管动态显示程序如数字时钟等。//************************************////数字时钟计时////************************************//#include<AT89X51.H>无符号字符码dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//数码管显示段数据无符号字符dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位驱动,第一次驱动连接到最低位的数码管unsignedchardispbuf[8]={0,0,16,0,0,16,0,0};//显示缓冲寄存器无符号字符分布;无符号字符秒;最小的无符号字符;无符号字符小时;无符号整数tcnt;无符号字符mstcnt;无符号字符i,j;无效主要(无效){TMOD=0x02;//设置定时器工作模式为2、8位定时状态,并自动加载初值。TH0=0x06;//加载初始值TL0=0x06;TR0=1;//启动定时器ET0=1;//使能定时器中断EA=1;//开启总中断而(1){//主循环if(P0_0==0)//如果P0.0位等于0,则往下{对于(i=5;i>0;i--)for(j=248;j>0;j--);//延时抗抖动if(P0_0==0)//再次判断P0.0是否等于0,如果是,设置第二个{second++;//秒加1if(second==60)//如果秒等于60,再次从0开始开始运行时间{秒=0;}dispbuf[0]=second%10;//刷新第二位,并安装驱动显示缓冲寄存器dispbuf[1]=second/10;//刷新几十秒,同上。while(P0_0==0);//等待P0.0被释放。(等待按钮松开)}}if(P0_1==0)//如果P0.1位等于0,则往下{对于(i=5;i>0;i--)for(j=248;j>0;j--);//延时抗抖动if(P0_1==0)//再次判断P0.1是否等于0,如果是,设置分钟值{minite++;//分钟加1如果(最小==60)//{最小=0;}dispbuf[3]=minite%10;//刷新分钟单位并安装驱动显示缓冲寄存器dispbuf[4]=minite/10;//刷新十位数分钟,同上while(P0_1==0);//等待P0.1被释放。(等待按钮松开)}}if(P0_2==0)//含义同上,但是这里用来设置小时值{对于(i=5;i>0;i--)for(j=248;j>0;j--);如果(P0_2==0){小时++;如果(小时==24){小时=0;}dispbuf[6]=小时%10;dispbuf[7]=小时/10;而(P0_2==0);}}}}voidt0(void)interrupt1using0//定时器中断子程序{mstcnt++;//用于刷新显示数据,第8次中断显示1位数码管(动态显示)if(mstcnt==8)//判断中断是否已经中断了8次,如果是,显示数据{mstcnt=0;P1=dispcode[dispbuf[dispbitcnt]];//段码送P1口驱动数码管显示P3=dispbitcode[dispbitcnt];//选择数码管显示位dispbitcnt++;//显示索引,用哪位数据调整if(dispbitcnt==8)//判断调整是否完成,如果完成则从第一个开始。{dispbitcnt=0;}}tcnt++;//第一次中断自动加1,如果中断4000次,第二次自动加1如果(tcnt==4000){tcnt=0;second++;//秒加1if(second==60)//如果秒等于60,分钟自动加1,秒返回0{秒=0;minite++;//分钟加1if(minite==60)//如果分钟等于0,小时值自动加1,分钟返回0{最小=0;hour++;//小时值加1if(hour==24)//如果小时值等于24,返回0{小时=0;}}}dispbuf[0]=second%10;//刷新显示缓冲寄存器dispbuf[1]=秒/10;dispbuf[3]=最小%10;dispbuf[4]=最小/10;dispbuf[6]=小时%10;dispbuf[7]=小时/10;}}音频节目#include<reg52.h>//************************************////歌曲播放////************************************//无符号字符计数;sbit_Speak=P2^3;//扬声器控制引脚unsignedcharcodeSONG[]={//祝你平安0x26、0x20、0x20、0x20、0x20、0x20、0x26、0x10、0x20、0x10、0x20。.....};无效Time0_Init(){TMOD=0x01;IE=0x82;TH0=0xD8;TL0=0xEF;//12MZ晶振,10ms}无效Time0_Int()中断1{TH0=0xD8;TL0=0xEF;计数++;//长度加1}/*-------------------------------------------------功能:1MS延时子程序--------------------------------------------------*/无效延迟_xMs(无符号整数x){无符号整数i,j;对于(我=0;我<x;我++){for(j=0;j<3;j++);}}/*-------------------------------------------------功能:歌曲播放子程序i是播放哪一首曲目--------------------------------------------------*/无效Play_Song(无符号字符i){无符号字符Temp1,Temp2;无符号整数地址;计数=0;//清除中断计数器为0地址=i*217;而(1){Temp1=歌曲[地址++];if(Temp1==0xFF)//剩余字符{TR0=0;延迟_xMs(100);}elseif(Temp1==0x00)//歌曲结束{地址++;我++;如果(我==2){我=0;返回;}}别的{Temp2=歌曲[地址++];TR0=1;而(1){_Speak=~_Speak;延迟_xMs(Temp1);如果(Temp2==计数){计数=0;休息;}}}}}voidmain()//主程序{Time0_Init();//定时器0中断初始化而(1){Play_Song(0);}}数字温度计/************ds18b20子程序******************************//***********ds18b20延迟子功能(晶振12MHz)*******/无效延迟_18B20(无符号整数我){ 当我-);}/************ds18b20初始化函数**********************/无效初始化_DS18B20(无效){ 无符号字符x=0; DQ=1;//DQ复位 延迟_18B20(8);//稍微延迟 DQ=0;//MCU拉低DQ 延迟_18B20(80);//精确延迟大于480us DQ=1;//将总线拉高 延迟_18B20(14); x=DQ;//稍微延迟后,如果x=0,则初始化成功x=1,初始化失败 延迟_18B20(20);}/************ds18b20读取一个字节**************/无符号字符ReadOneChar(void){ uchari=0; uchar数据=0; 对于(i=8;i>0;i--) { DQ=0;//给出脉冲信号 数据>>=1; DQ=1;//给出脉冲信号 如果(DQ) 数据|=0x80; 延迟_18B20(4); } 返回(数据);}/****************ds18b20写一个字节****************/无效WriteOneChar(uchardat){ 无符号字符i=0; 对于(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; 延迟_18B20(5); DQ=1; 数据>>=1;}}/****************读取ds18b20的当前温度************/无效读取温度(无效){ 无符号字符a=0; 无符号字符b=0; 无符号字符t=0; 初始化_DS18B20(); WriteOneChar(0xCC); //跳过读取序列号列号的操作 WriteOneChar(0x44); //开始温度转换 延迟_18B20(100);//延迟 初始化_DS18B20(); WriteOneChar(0xCC); //跳过读取序列号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(一共可以读取9个寄存器)前两个是温度 延迟_18B20(100); a=ReadOneChar(); //读取低温值 b=ReadOneChar(); //读取温度值的高位 温度值=b<<4; temp_value+=(a&0xf0)>>4;}voidtemp_to_str()//温度数据转换成LCD字符显示{TempBuffer[0]=temp_value/10+'0';//十位TempBuffer[1]=temp_value

温馨提示

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

评论

0/150

提交评论