资源描述:
《基于单片机的数字秒表的设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、单片机系统课程设计报告学院(部):电气与信息工程学院专业:电气工程及其自动化学生姓名:指导老师:班级: 1103学号114017007132013年11月8一、系统设计要求1.最大计数值为:99时59分59秒9/10秒,约100小时。2.系统采用2个按键控制输入,其中一个按键用作系统清0,另一个按键用作秒表的启动/停止。3.系统采用7个共阴LED数码管实现计时显示。4.电路原理图:使用protel或visio或proteus绘制。5.编程思路,用visio画程序设计流程图,且用文字描述。6.详细的程序清单(KeilC51工程文件夹)。7.pro
2、teus仿真过程及结果(截图,视频)等。8.制作单片机应用系统开发板二、系统设计原理系统总体电路如下图所示AT89S52单片机为主电路的核心部分,各个电路均与单片机相连,由单片机统筹协调各个电路的运行工作。计时器采用T0中断实现,定时溢出中断周期为50ms,当溢出中断后向CPU发出溢出中断请求,每发出2次中断请求就对ms位加一,达到20次就对s位加一,以此类推,直到99时59分59秒9/10秒为止。再看按键的处理启动/停止键用SW1控制,置零用SW2控制,分别连到单片机的P1.0和P1.1引脚上。显示电路由七位数码管组成,采用动态显示方式,因此
3、有8位段控制和7位位控制,8位段接控制接P0口,P0.0~P0.7分别控制数码管的段选,7位控制接在P2口,P2.0~P2.7分别控制数码管位选。8程序设计流程图8三、源程序#include#defineucharunsignedchar#defineuintunsignedint#defineclear(TR0=0,TH0=02,TL0=0,h=0,min=0,s=0,ms=0)#definestart(TR0=1)//定时器开关开#definestop(TR0=0)//定时器开关关sbitSW1=P1^0;sbitSW2=
4、P1^1;voidInit_Timer0(void);//定时器0中断初始化子程序函数voiddisplay();//数码管显示函数voidkeyscan();//按键检测函数voiddelay(uintt);//延时函数ucharh,min,s,ms=0;//定义变量时、分、秒、毫秒ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voidmain()//主函数{Init_Timer0();while(1){display();//数码管显示keyscan
5、();//按键检测}}voidInit_Timer0(void)//定时器0中断初始化子程序{TMOD=0x01;//使用方式1,16位定时器TH0=0x3C;TL0=0x0B0;EA=1;//开总中断ET0=1;//定时器中断开//TR0=1;//定时器开关开}8voidT0_time(void)interrupt1using1{staticunsignedchari=0;//静态变量自动赋初值0TH0=0x3C;TL0=0x0B0;//50msif(i==2){i=0;ms++;if(ms==10){ms=0;s++;if(s==60){s
6、=0;min++;if(min==60){min=0;h++;}}}if(h==99&&min==59&&s==59&&ms==9){stop;}}elsei++;}voiddisplay(void)//数码管显示{P2=0xfd;P0=table[ms];delay(2);P2=0xfb;P0=table[s%10]
7、0x80;delay(2);P2=0xf7;P0=table[s/10];delay(2);P2=0xef;P0=table[min%10]
8、0x80;8delay(2);P2=0xdf;P0=table[min/10];del
9、ay(2);P2=0xbf;P0=table[h%10]
10、0x80;delay(2);P2=0x7f;P0=table[h/10];delay(2);}voidkeyscan()//按键检测{SW1=1;SW2=1;if(SW1==0)//检测sw1是否按下{delay(5);display();//按下键时使数码管有显示if(SW1==0){if(TR0==0)start;elsestop;}while(SW1==0)display();}if(SW2==0)//判断sw2是否按下{delay(5);display();//按下键时使数码管有
11、显示if(SW2==0){clear;//清零并停止}while(SW2==0)display();}}8voiddelay(uintt)//延时ms