刘延峰单片机数字时钟设计,时分秒
基于单片机的0~99计时秒表的设计(1)

本科毕业论文(设计)论文题目:××××××××××××××××姓名:学号:院(系、部):专业:班级:指导教师:完成时间:年月摘要本次设计内容是以AT89C51单片机为核心器件,利用AT89C51和外围电路组成的计时秒表系统,计时秒表是一种先进电子计时器,较多的应用在教学器材、比赛计时等,而且采用数字显示,具有直观、方便读取、功能方便等诸多优点。
本设计是由硬件电路和软件程序两部分组成,硬件电路由AT89C51单片机、按键控制电路、数码管显示电路、晶振电路以及复位电路组成,它使用元件少,电路结构简单,功能强大;软件部分程序采用C语言程序设计,使用keil编译源程序,产生的可执行性文件能够让单片机高效快速的执行。
该设计能够充分利用单片机内部资源,通过程序利用定时器中断服务程序对计时秒表开始、暂停、清零等操作进行处理,提高单片机的工作效率。
关键字:单片机;秒表;定时器;中断服务程序AbstractThis design content is based on AT89C51 single-chip microcomputer as the core device, using the timing stopwatch system composed of AT89C51 and peripheral circuit, timing stopwatch is a kind of advanced electronic timer, more application in teaching equipment, timing, etc., and adopts digital display, its intuitive, convenient read, function, and many other advantages.This design is consists of two parts, hardware circuit and software program, the hardware circuit is controlled by AT89C51, key circuit, digital tube display circuit, crystals circuit and reset circuit, it USES less component, circuit structure is simple, powerful;Software part program using C language program design, use the keil compiler source code, can let the enforceability file microcontroller efficient and rapid execution.This design can make full use of the single chip microcomputer internal resources, through the program using the timer interrupt service routine for timing stopwatch start, pause, reset operations such as processing, improve the working efficiency of the single chip microcomputer.Key Words:Single chip microcomputer;A stopwatch;The timer;Interrupt service routine目录前言 (4)1、AT89C51单片机概述 (4)1.1、AT89C51单片机简介 (4)1.2、AT89C51主要特性及管脚说明 (5)2、硬件电路的设计 (6)2.1、设计要求 (6)2.2、总体方案的设计 (7)2.3、总体电路设计 (7)2.4、晶振电路、复位电路及按键电路 (8)2.5、数码管显示电路的设计 (9)2.5.1、数码管的结构及工作原理 (9)2.5.2、数码管的编码方式及段码表 (9)2.5.3、数码管的显示方式 (10)3、软件设计 (10)3.1、设计思想 (10)3.2、程序流程图 (10)3.3、源程序代码 (11)4、结论 (13)5、参考文献 (13)6、谢辞 (14)前言单片微计算机又称单片微控制器,是目前市面上最常用的嵌入式处理器,通称单片机,单片机芯片常用英文字母MCU表示单片机,它像一般的逻辑功能的芯片,为了完成逻辑运算,而是把一个最小计算机系统系统整合后,集成烧录到这个芯片上,单片机像计算机一样,由运算器、控制器、输入输出设备等组成,因此相当于一个微型的计算机最小系统,但是和计算机相比,单片机缺少了外围设备等。
单片机制作数字钟(含万年历、秒表功能)

数字钟、万年历制作(基于单片机)电路原理图:程序://********************20131206****数字钟程序#pragma SMALL#include <reg51.h>#include <absacc.h>#include <intrins.h>//********************************************************* *********编译预处理void display(unsigned char *p); //显示函数,P为显示数据首地址unsigned char keytest(); //按键检测函数unsigned char search(); //按键识别函数void alarm(); //闹钟判断启动函数void ftion0(); //始终修改函数void ftion1(); //闹钟修改函数void ftion3(); //日期修改函数void cum(); //加1修改函数void minus(); //减1修改函数void jinzhi(); //进制修改函数void riqi(); //日期void stopwatch(); //秒表函数//********************************************************* *******函数声明sbit P2_7=P2^7;//********************************************************* *******端口定义unsigned char clockbuf[3]={0,0,0};unsigned char bellbuf[3]={0,0,0};unsigned char date[3]={1,1,1}; //日期存放数组unsigned char stop[3]={0,0,0};unsigned char msec1,msec2;unsigned char timdata,rtimdata,dtimdata;unsigned char count;unsigned char *dis_p;unsigned char or; //12进制控制标志unsigned char ri; //日期显示控制标志位unsigned char mb; //秒表控制标志位bit arm,rtim,rhour,rmin,hour,min,sec,day,mon,year; //定义位变量//********************************************************* *****全局变量定义void main(){unsigned char a;or=0; //12进制修改标志清零ri=0;mb=0;P2_7=0;arm=0;msec1=0;msec2=0;timdata=0;rtimdata=0;count=0;TMOD=0x12;TL0=0x06;TH0=0x06;TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=0;dis_p=clockbuf;while(1){a=keytest();if(a==0x78) //判断是否有键按下{display(dis_p);if(arm==1) alarm();}else{display(dis_p);a=keytest();if(a!=0x78){a=search();switch(a){case 0x00:ftion0();break;case 0x01:ftion1();break;case 0x02:cum();break;case 0x06:jinzhi();break;case 0x03:riqi();break;case 0x04:ftion3();break;case 0x05:minus();break;case 0x07:stopwatch();break;case 0x09:TR1=1;break;case 0x0a:TR1=0;break;case 0x0b:stop[0]=0;stop[1]=0;stop[2]=0;break;default:break;}}}}}//********************************************主函数【完】void display(unsigned char *p){unsigned char buffer[]={0,0,0,0,0,0};unsigned char k,i,j,m,temp;unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};buffer[0]=p[0]/10;buffer[1]=p[0]%10;buffer[2]=p[1]/10;buffer[3]=p[1]%10;buffer[4]=p[2]/10;buffer[5]=p[2]%10;if((sec==0)&&(min==0)&&(hour==0)&&(rmin==0)&&(rhour==0)&&( day==0)&&(mon==0)&&(year==0)) //没有修改标志,正常显示{for(k=0;k<3;k++){temp=0x01;for(i=0;i<6;i++){P0=0x00; //段选端口j=buffer[i];P0=led[j];P1=~temp; //位选端口temp<<=1;for(m=0;m<200;m++);}}}else //若有修改标志,则按以下标志分别显示{if(sec==1||day==1){P1=0x1f;i=buffer[5];P0=led[i];for(m=0;m<200;m++);P1=0x2f;j=buffer[4];P0=led[j];for(m=0;m<200;m++);}if(min==1||rmin==1||mon==1){P1=0x3b;i=buffer[2];P0=led[i];for(m=0;m<200;m++);P1=0x37;j=buffer[3];P0=led[j];for(m=0;m<200;m++);}if(hour==1||rhour==1||year==1) {P1=0x3e;i=buffer[0];P0=led[i];for(m=0;m<200;m++);P1=0x3d;j=buffer[1];P0=led[j];for(m=0;m<200;m++);}}}//**********************************LED显示函数【完】unsigned char keytest(){unsigned char c;P2=0x78; //检测是否有键按下c=P2;c=c&0x78;return(c);}//******************************************键盘检测函数【完】unsigned char search(){unsigned char a,b,c,d,e;c=0x3f;a=0; //行号while(1){P2=c;d=P2;d=d&0x07;if(d==0x03){b=0;break;} //列号else if(d==0x05){b=1;break;}else if(d==0x06){b=2;break;}a++;c>>=1;if(a==5){a=0;c=0x3f;}}e=a*3+b;do{display(dis_p);}while((d=keytest())!=0x78);return(e);}//***********************************************查键值函数【完】void alarm(){if((clockbuf[0]==bellbuf[0])&&(clockbuf[1]==bellbuf[1])){P2_7=1;rtim=1;if(count==10){count=0;P2_7=0;arm=0;rtim=0;}}}//****************************************闹钟判断启动函数【完】void ftion0(){TR0=0;rhour=0;rmin=0;dis_p=clockbuf;rtimdata=0;timdata++;switch(timdata){case 0x01:sec=1;break;case 0x02:sec=0;min=1;break;case 0x03:min=0;hour=1;break;case 0x04:timdata=0;hour=0;TR0=1;break;default:break;}}//*********************************************时钟设置函数【完】void ftion1(){if(TR0==0) TR0=1;sec=0;min=0;hour=0;dis_p=bellbuf;timdata=0;rtimdata++;switch(rtimdata){case 0x01:rmin=1;break;case 0x02:rmin=0;rhour=1;break;case 0x03:rtimdata=0;rhour=0;arm=1;dis_p=clockbuf;break;default:break;}}//*********************************************闹钟设置函数【完】void ftion3(){if(TR0==0) TR0=1;day=0;mon=0;year=0;dis_p=date;timdata=0;rtimdata=0;dtimdata++;switch(dtimdata){case 0x01:day=1;break;case 0x02:day=0;mon=1;break;case 0x03:mon=0;year=1;break;case 0x04:dtimdata=0;year=0;dis_p=clockbuf;break;default:break;}}//*************************************************日期修改函数【完】void minus(){if(sec==1){if(0==clockbuf[2]) clockbuf[2]=59;else clockbuf[2]--;}else if(min==1){if(0==clockbuf[1]) clockbuf[1]=59;else clockbuf[1]--;}else if(hour==1){if(or==0) //判断进制{if(0==clockbuf[0]) clockbuf[0]=23;else clockbuf[0]--;}if(or==1){if(1==clockbuf[0]) clockbuf[0]=12;else clockbuf[0]--;}}else if(rmin==1){if(bellbuf[1]==0) bellbuf[1]=59;else bellbuf[1]--;}else if(rhour==1){if(or==0){if(bellbuf[0]==0) bellbuf[0]=23;else bellbuf[0]--;}if(or==1){if(bellbuf[0]==1) bellbuf[0]=12;else bellbuf[0]--;}}else if(day==1){if(date[2]==1) date[2]=31;else date[2]--;}else if(mon==1){if(date[1]==1) date[1]=12;else date[1]--;}else if(year==1){if(date[0]==1) date[0]=99;else date[0]--;}}//*************************************减1修改功能函数【完】void cum(){if(sec==1){if(59==clockbuf[2]) clockbuf[2]=0;else clockbuf[2]++;}else if(min==1){if(59==clockbuf[1]) clockbuf[1]=0;else clockbuf[1]++;}else if(hour==1){if(or==0) //判断进制{if(23==clockbuf[0]) clockbuf[0]=0;else clockbuf[0]++;}if(or==1){if(12==clockbuf[0]) clockbuf[0]=1;else clockbuf[0]++;}}else if(rmin==1){if(bellbuf[1]==59) bellbuf[1]=0;else bellbuf[1]++;}else if(rhour==1){if(or==0){if(bellbuf[0]==23) bellbuf[0]=0;else bellbuf[0]++;}if(or==1){if(bellbuf[0]==12) bellbuf[0]=1;else bellbuf[0]++;}}else if(day==1){if(date[2]==31) date[2]=1;else date[2]++;}else if(mon==1){if(date[1]==12) date[1]=1;else date[1]++;}else if(year==1){if(date[0]==99) date[0]=0;else date[0]++;}}//*************************************加1修改功能函数【完】void jinzhi(){if(or==0) or=1;else or=0;}//***********************************进制修改控制函数【完】void riqi(){if(ri==0){dis_p=date;}if(ri==1){dis_p=clockbuf;}ri++;if(ri==2) ri=0;}//********************************日期控显示函数【完】void stopwatch(){if(mb==0){dis_p=stop;mb=1;}else{mb=0;dis_p=clockbuf;}}//************秒表**********秒表**********秒表函数【完】void clock() interrupt 1{EA=0;if(msec1!=0x14) msec1++; //6MHz晶振定时10mselse{msec1=0;if(msec2!=100) msec2++; //定时1selse{if(rtim==1) count++; //闹钟启动标志计时10smsec2=0;if(clockbuf[2]!=59) clockbuf[2]++;else{clockbuf[2]=0;if(clockbuf[1]!=59) clockbuf[1]++;else{clockbuf[1]=0;if(or==0){if(clockbuf[0]!=23) clockbuf[0]++;else{clockbuf[0]=0;if((date[1]==1)||(date[1]==1)||(date[1]==1)||(date[1]==3)||(date[ 1]==5)||(date[1]==7)||(date[1]==8)||(date[1]==10)||(date[1]==12)){if(date[2]!=30) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}if((date[1]==4)||(date[1]==6)||(date[1]==9)||(date[1]==11)){if(date[2]!=29) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}if(date[1]==2){if((((date[0]%4==0)&&(date[0]%100!=0))||(date[0]%400==0))){if(date[2]!=28) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}else{if(date[2]!=27) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}}}}if(or==1){if(clockbuf[0]!=12) clockbuf[0]++;else{clockbuf[0]=0;if((date[1]==1)||(date[1]==1)||(date[1]==1)||(date[1]==3)||(date[ 1]==5)||(date[1]==7)||(date[1]==8)||(date[1]==10)||(date[1]==12)){if(date[2]!=30) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}if((date[1]==4)||(date[1]==6)||(date[1]==9)||(date[1]==11)){if(date[2]!=29) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}if(date[1]==2){if((((date[0]%4==0)&&(date[0]%100!=0))||(date[0]%400==0))){if(date[2]!=28) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}else{if(date[2]!=27) date[2]++;else{date[2]=1;if(date[1]!=11) date[1]++;else{date[1]=1;date[0]++;}}}}}}}}}}EA=1;}//*******************************定时器0中断函数【完】void miaobiao() interrupt 3{TH1=(65536-10000)/256;TL1=(65536-10000)%256;if(stop[2]!=99) stop[2]++;else{stop[2]=0;if(stop[1]!=59) stop[1]++;else{stop[1]=0;if(stop[0]!=59) stop[0]++;else stop[0]=0;}}}//***********************************定时器1中断函数【完】。
基于单片机的数字钟毕业设计(附程序全)

基于单片机的数字钟毕业设计(附程序全) 电子时钟设计随着现代人类生活节奏的加快,人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。
数码管显示的时间简单明了而且读数快、时间准确性更高~数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。
数字钟的精度、稳定度远远超过老式机械钟。
在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,并且由单片机的定时器计数。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。
关键词:数字钟;单片机;数码管;时间;准确性1目录第一章绪论1. 数字电子钟的意义和应用…………………………………………………………………… 3 第二章整体设计方案2.1 单片机的选择…………………………………………………………………………… 3 2.2 单片机的基本结构……………………………………………………………………… 5 第三章数字钟的硬件设计3.1 最小系统设计…………………………………………………………………………… 9 3.2 LED显示电路…………………………………………………………………………… 12 3.3 键盘控制电路…………………………………………………………………………… 14 第四章数字钟的软件设计4.1 系统软件设计流程图…………………………………………………………………… 15 4.2 数字电子钟的原理图…………………………………………………………………… 18 4.3 主程序…………………………………………………………………………………… 19 4.4 时钟设置子程序………………………………………………………………………… 20 4.5 定时器中断子程序……………………………………………………………………… 20 4.6 LED显示子程序………………………………………………………………………… 21 4.7 按键控制子程序………………………………………………………………………… 23 第五章系统仿真5.1 PROTUES软件介绍................................................................................. 24 5.2 电子钟系统PROTUES仿真........................................................................ 24 结束语. (2)5 参考文献 (26)2第一章绪论1.数字电子钟的意义和应用数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
基于Multisim的数字时钟设计_刘允峰

2012年5月15日第35卷第10期现代电子技术Modern Electronics TechniqueMay 2012Vol.35No.10基于Multisim的数字时钟设计刘允峰(渤海大学信息科学与技术学院,辽宁锦州 121000)摘 要:为了提高电子电路实验教学质量,引入了Multisim仿真软件,以增加学生的学习兴趣。
利用逻辑电路的设计方法,做了数字时钟的实验,得到了正确的结果。
得到的结论:利用Multisim强大的功能对电子电路进行仿真测试,可以提高电路的设计和分析效率,提高电子电路实验的教学质量。
关键词:Multisim;数字时钟;实验教学;电路仿真中图分类号:TN710-34;TP391.9 文献标识码:A 文章编号:1004-373X(2012)10-0184-02Digital clock design based on MultisimLIU Yun-feng(College of Information Science and Technology,Bohai University,Jinzhou 121000,China)Abstract:In order to improve the quality of the experimental teaching for electronic circuits,the simulaton software Mul-tisim is introduced into the experimental teaching.A digital clock experiment was conducted with the logic sircuit designmethod.The correct result was obtained.The conclusion is that the simulation of electronic circuits based on powerful capa-bility of Multisim can improve the design and analysis efficiencies of circuits,and the teaching quality of the electronic circuitexperiment as well.The innovation lies in introducing the Multisim software into classroom teaching,and raising the student's interest in learning digital sircuits.Keywords:Multisim;digital clock;experimental teaching;circuit simulation收稿日期:2011-12-19 加强实验教学、提高动手能力与创新能力是高等教育的教学重点。
基于51单片机的数字秒表设计

摘要本设计是基于AT89S51单片机的简易数字秒表设计,主要组成是以51单片机最小系统为核心,通过运用单片机的振荡电路实现计时同时用数码管同步显示。
本秒表最大计时为99秒。
本设计的特点是:大部分功能通过软件实现,使电路简单明了,系统稳定性好。
关键词:AT89S51 振荡电路计时数码管目录1设计概述 (1)1.1AT89S51概述 (1)1.2系统设计功能概述 (1)2系统设计 (2)2.1设计思路 (2)2.2硬件设计 (2)2.2.1单片机最小系统的设计 (2)2.2.2数码管显示电路设计 (3)2.3软件设计 (7)2.3.1软件设计流程图 (7)2.3.2消除开关抖动 (9)2.3.3数码管延时显示程序 (9)2.3.4延时1秒的程序 (10)3软件调试和结果 (10)3.1软件调试与下载 (10)3.2硬件仿真 (11)4心得体会 (12)参考文献 (14)附录 (15)I基于单片机的数字秒表设计主程序 (15)IIPCB电路图 (17)III实物图 (17)11 设计概述1.1 AT89S51概述AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In -system programmable)的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash 存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:40个引脚,4k Bytes Flash 片内程序存储器,128 bytes 的随机存取数据存储器(RAM ),32个外部双向输入/输出(I/O )口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT )电路,片内时钟振荡器。
基于单片机的数字秒表设计

基于单片机的数字秒表设计文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)单片机课程设计设计题目基于单片机数字秒表的设计学院名称电气学院指导教师朱卫华班级电子11级02班学号学生姓名摘要本设计是基于AT89S51单片机的简易数字秒表设计,主要组成是以51单片机最小系统为核心,通过运用单片机的振荡电路实现计时同时用数码管同步显示。
本秒表最大计时为99秒。
本设计的特点是:大部分功能通过软件实现,使电路简单明了,系统稳定性好。
关键词:AT89S51振荡电路计时数码管目录设计概述AT89S51概述AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
AT89S51引脚图在实际应用中,因为STC的单片机比AT的单片机更加容易下载程序,它们的端口是一模一样的,所以本次设计实际应用的是STC51单片机。
系统设计功能概述本设计展现的是一个计时用的秒表。
功能为两位七段数码管在开机时显示“00“,并在系统中添加一个按钮开关。
当第一次按下按钮开关后秒表开始计时,第二次按下后计时停止,第三次按下后两个数码管清0,并回到一开始计时状态。
由于只设计了两位数码管,故该秒表最大计时99秒。
基于stm32单片机的数字秒表设计

基于stm32单片机的数字秒表设计摘要:本设计用stm32单片机搭以其它硬件组成数字电子秒表,采用主程序设计,通过数码管显示计时结果。
对硬件电路和软件进行设计,并进行仿真测试,结果表明,计时准确,结构简单,稳定性强。
关键词:STM32;单片机;数字秒表一、研究原理在刚通电后打开电源开关,使系统初始化,此时计时器显示为00.00.00,按下开关开始计时时,stm32单片机接收到外部中发来的中断请求后,转到开启TIM2定时器。
计时是靠TIM2定时器的中断来完成的,TIM2定时器时钟为72Mhz,定时器预分频为72分频,即时钟的72个周期,每1微妙定时器自加1,溢出值设定为999,即从0-999的共1000次,每1毫秒发生一次定时器中断,每当一处定时溢出是就向TIM发出中断请求,实现数据的累加,达到10次就实现进位加一,以此类推,直到实现最大计时23小时59分59.99秒后复位。
在定时器工作过程中,外部按下暂停键,信息会传送到TIM2的捕获输入引脚,CPU就收到捕获中断请求执行定时器捕获中断的程序,显示数据,并将数据存到寄存区内。
在暂停后,对PA0进行扫描,如果按下就回到主程序,准备开始新的计时。
在暂停健被按下时,此时显示时间被存到缓存内,再按下暂停键,再次继续计时时,上次显示的计时时间从缓存区转到最终存储区。
在秒表停止计时后扫描查看键PA2,PA2口是高电平,就查看最近的一次计时缓存,是低电平就调用最终缓存区的计时数据查看前面的计时数据。
从而实现多次计时和查看前面计时数据的功能。
二、硬件设计设计成品由硬件电路和软件程序协调合一组成。
硬件电路由显示电路、电源电路、控制电路、主控电路等组成。
主控电路以STM32为主,显示电路则用1602来作为显示工具。
本秒表利用STM32单片机的定时的定时原理,来达到精确计时的目标。
开始和暂停的功能靠的是单片机的中断系统。
在单片机的几个接口中,PB口为输出口,输出计时数据,列扫描的输出则是安排在PB0-PB4口,三个按钮开关接口为PA0、PA1、PA2,功能依次为开始、暂停、存储和查看前面的计时数据。
基于AT89C51单片机的秒表设计与实现

基于AT89C51单片机的秒表设计与实现张翠云【摘要】设计了一种以单片机AT89C51为核心的秒表,从硬件和软件两方面详细介绍了秒表的设计方法.秒表计时范围00.00~60.00秒,精度0.01s.具有"开始、暂停/继续、复位"功能.系统上电,显示"00.00".按下"开始"按钮,系统计时开始,此时,按下"暂停/继续"按钮,系统停在当前位置,再次按下"暂停/继续"按钮,系统继续计时;如果按下"复位"按钮,系统显示"00.00".与常规秒表设计相比,此秒表不但设计简单,且其稳定性以及计时精度都有大幅提高.最后通过Proteus软件仿真,验证了该设计的合理性与可靠性.【期刊名称】《机电工程技术》【年(卷),期】2018(047)007【总页数】3页(P112-114)【关键词】AT89C51;秒表;Proteus;高精度【作者】张翠云【作者单位】河南工业和信息化职业学院,河南焦作 454000【正文语种】中文【中图分类】TP368.12单片机相当于微型计算机。
因为它具有体积小、质量轻、价格便宜的特点,所以为应用和开发提供了便利条件。
单片机已应用在生活的方方面面,如智能仪表、家用电器等。
秒表是一种常用的计时仪器,比如在实验室、智力对抗比赛、运动场等场合,就会经常用到秒表。
高精度数字化秒表的出现,给人们的生活提供了方便,已经取代了传统的机械秒表[1-3]。
本文结合单片机,设计了一种基于AT89C51单片机的精度为0.01 s的数字秒表,并且在仿真软件Proteus环境下,实现了所设计秒表的各种功能。
1 系统整体设计方案1.1 系统具体功能要求(1)秒表计时范围00.00秒~60.00秒。
(2)显示部分采用四位七段数码管,其中前两位显示“10秒、秒”,后两位显示“0.1秒、0.01秒”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年“启奥杯”河北联合大学单片机应用设计竞赛作品创意书(参赛编号)660(作品名称)电子时钟设计(学校名称)迁安学院(科系所名称)机电与信息系(指导老师)(参赛学生)刘延峰2012 年 4 月 12 日作品创意书1、主要内容:根据单片机课程所学内容,结合其他相关课程知识,设计电子时钟,以加深对单片机知识的理解,锻炼实践动手能力,为以后的毕业设计和工作打下坚实基础。
2、基本要求:本设计以MCS-51系列单片机为核心,采用常用电子器件设计。
要求能显示出秒、分、时、天,可调整各个时间,可以采用LED显示,也可以采用液晶显示。
3、主要参考资料:[1] 张毅坤,陈善久.单片微型计算机原理及应用.西安电子科技大学出版社,2002.[2] 张友德,赵志英,徐时亮.单片微机原理应用与实验.复旦大学出版社,2000.[3] 张毅刚,彭善元,董继承.单片机原理及应用.高等教育出版社,2003.[4]黄仁欣,单片机原理及应用技术. 北京:清华大学出版社,2005[5]黄惠娞,单片机原理与接口技术. 北京:清华大学出版社,2006[6]姜志海,单片机原理及应用技术. 北京:电子工业出版社,2005[7]李全利,单片机原理及应用技术. 北京:高等教育出版社,2004摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本次设计中以单片机的发展过程和发展方向为背景,介绍了单片机的输入输出的工作原理和操作方法,中断的工作原理和操作方法,74LS245译码器的工作原理和与,LED连接的方法。
本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(共阴极LED数码显示器、BCD-锁存/7段译码/驱动器74LS245等),再配以相应的软件,是它具有时,分,秒显示的功能,并且时,分,秒还可以调整。
此次设计电子数字钟是为了了解电子数字钟的原理,从而学会制作电子数字钟。
而且通过电子数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。
通过它可以进一步学习与掌握单片机原理与使用方法。
关键词:单片机A T89C51 7SEG-MPX6-CC-BLUE RESPACK-8 BUTTON 共阴极LED数码显示器74LS245译码器一数电字子钟的背景、意义、应用20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
下面是单片机的主要发展趋势。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时自动报时及自动控制的领域。
二单片机和数字钟的基本知识2.1应用知识简介51单片机:单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。
51 系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51 系列单片机的发展又进入了一个新的阶段。
在今后很长一段时间内51 系列单片机仍将占据嵌入式系统产品的中低端市场。
汇编语言:汇编语言是一种面向机器的计算机低级编程语言,通常是为特定的计算机或系列计算机专门设计的。
汇编语言保持了机器语言的优点,具有直接和简捷的特点,其代码具有效率高实时性强等优点。
但是对于复杂的运算或大型程序,用汇编语言编写将非常耗时。
汇编语言可以与高级语言配合使用,应用十分广泛。
ISP:ISP(In-System Programming)在系统可编程,是当今流行的单片机编程模式,指电路板上的空白元器件可以编程写入最终用户代码,而不需要从电路板上取下元器件。
已经编程的器件也可以用ISP方式擦除或再编程。
本次课程设计便使用ISP方式,直接将编写好的程序下载到连接好的单片机中进行调试。
2.2单片机数字钟的基本原理它是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“秒”计数60次“分”,“分”计数60次形成“时”,“时”计数24次形成“天”并清零,然后通过译码器,数码管把他们的内容在相应的位置显示出来。
在具体的设计时定时器采用中断方式工作,对时钟的形成在终中断序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。
另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序。
三系统硬件电路的设计3.1单片机的基本结构MCS-51单片机内部结构:8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
MCS-51的引脚说明:MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:MCS-51的引脚说明:MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:图3-2单片机的引脚Pin9:RESET/V pd复位信号复用脚,当8052通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8052的初始态。
3.2七段数码管的引脚图及使用:数码管使用条件:a、段及小数点上加限流电阻。
b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定。
c、使用电流:静态:总电流80mA(每段10mA);动态:平均电流4-5mA 峰值电流100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。
LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
其它字符的显示原理类同。