欢迎来到天天文库
浏览记录
ID:29470668
大小:147.04 KB
页数:9页
时间:2018-12-20
《单片机课程设计(1)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、单片机课程设计一、本设计任务及完成的功能1、本设计任务:实现最长99S的倒计时功能;利用数码管或液晶屏显示数字;利用按键可以设置倒计时时间;设置倒计时开始启动键;时间到,声(光)报警,示意倒计时时间到。2、完成的功能:实现了0~99S之间任意整数秒的倒计时,通过矩阵按键中0~9数字键设置倒计时间,按下*或#键开始倒计时,当倒计时间结束时,LED灯亮,停止倒计时。二、倒计时器硬件设计1、元器件AT89C51单片机1个、两位动态共阴数码管1个、9个引脚的排阻、1k电阻3个、12MHz晶振1个、33pF电容2个、
2、10uF极性电容1个、独立按键1个、4行3列矩阵按键1个、LED指示灯1个、电源和地若干2、系统的硬件构成及功能最长99秒计时器的原理框图如图1所示。图199秒计时器系统原理框图系统硬件连线:(1)P1口接矩阵按键(2)P2口接动态数码管的8个段选(3)P0^6、P0^7分别接动态数码管的十位和个位(4)P3^7接LED指示灯(5)XTAL1和XTAL2接晶振(6)RST接复位电路三、系统的软件设计本系统的软件系统主要可分为主程序设计和定时中断程序。系统主程序设计主程序包括主函数、矩阵按键扫描函数、对矩阵按
3、键扫描进行相应处理函数、动态数码管显示函数等。1、矩阵按键扫描函数ankey()矩阵按键的原理和方法:矩阵按键的两端都与单片机的I/O口相连,在检测时,人为的通过单片机I/O口送出低电平。检测时,先送一列为低电平,其余几列全为高电平(这时就确定了列数),然后立即轮流检测一次个行是否有低电平,若检测到某一行为低电平(这时就确定了行数),则可以确定单前被按下的键是哪行哪列。同样,用这种方法轮流检测各行各列,这样就可以检测所有按键,当有键按下时,就可判断是哪个键被按下。当然,也可以将行线置为低电平,扫描列是否有低
4、电平。本设计用的是4行3列矩阵按键,它接AT89C51单片机的P1口,接法如图所示:当按下0~9数字键时,会产生相应数值赋给矩阵按键扫描函数中以定义的参数key,当按下#或*键时,会分别产生11或10赋给key。这时调用对矩阵按键扫描进行相应处理函数text(uchar)且key赋给它,text(uchar)函数对key值进行相应处理:如果只按下一次数字键,那这数字就会是倒计时的个位,如果按下两次数字键,那第一次的数字就会是倒计时的十位,第二次数字的数字就会是倒计时的个位,当按下#或*键时,开始倒计时。2、
5、动态数码管显示函数动态数码管显示就是轮流向各位数码管送出段选及相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人眼感觉各位数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流比较快,我们分辨不出来。本设计用的是两位动态共阴数码管显示,它和单片机的连接如图所示:其中那排阻是驱动电路。3、复位电路如图:RST为复位信号输入端,高电平有效。系统上电后,当已经进行过倒计时,这时想进行不同时间的倒计时,只要按下复位按钮后,就可以进行新的倒计时。中断函数设计先初始化中断函数:TMOD=0x01;设置定时
6、器0为工作方式1(00000001)TH0=(65536-50000)/256;//装初值50ms一次中断TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=0;//先别启动中断,留着用按键启动,以便开始倒计时中断函数如下:voidT0_time()interrupt1//定时器0中断函数{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;numt0++;//50ms中断一次}四、总体程序如下:#inclu
7、de#defineucharunsignedchar#defineuintunsignedintsbitsw=P0^6;//十位位选sbitgw=P0^7;//个位位选sbitled=P3^7;//LED灯ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//编码定义ucharnumt0,num;voiddelayms(uint);voidtext(uchar);voiddisplay(ucharnum
8、dis)//动态数码管显示子函数{ucharshi,ge;//分离两个分别要显示的数shi=numdis/10;ge=numdis%10;sw=0;P2=table[shi];//送十位段选数据delayms(5);//延时sw=1;gw=0;P2=table[ge];//送个位段选数据delayms(5);gw=1;}voiddelayms(uintx)//延时xms{uinti,j;for(i=x;i>0;i
此文档下载收益归作者所有