您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页单片机智能电子钟设计报告

单片机智能电子钟设计报告

来源:爱站旅游

单片机智能电子钟设计报告

四川师范大学成都学院

智能电子钟(LCD显示)

—电线路实现训练

学生姓名

学号所在系

专业名称

指导教师谭117通信系通信工程2009级通信工程2班刘、段纯爽

四川师范大学成都学院

二○一一年六月

一、设计任务

采用定时器实现时钟;

计时:秒、分、时、天、周、月、年。

闰年自动判别。五路定时输出,可任意关断(最大可到16路)。

自定任意时刻自动开/关屏。

计时精度:误差≤1秒/月(具有微调设置)

键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键A、B完成。画出完整的电路原理图仿真图。

二、方案与论证

2.1、多功能电子钟计时方案

方案一:采用实时时钟芯片

实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。

方案二:软件控制

利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于公司的ATS52单片机是低功耗的具有4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系和引脚兼容。片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大,而且也较容易购买,故本设计中所选的单片机为ATS52单片机。

2.2、多功能电子钟键盘显示方案

方案一:8279扩展。

该方案方框图如图1.2.1所示,8279

是一种可编程的键盘/显示接口专用芯片,

它含有键盘输入和显示输出两种功能,键扫

描程序和动态显示程序全由8279硬件自动

完成,此种方案能以比较简单的硬件电路和

较少的软件开销实现单片机与键盘、LED显

示器的接口。

方案二:8155扩展,LED动态显示。

该方案方框图如图1.2.2所示,8155是一

块可编程的接口芯片,与单片机的接口非常简单,

它的键盘、显示共用一个接口电路,可节省I/O

口。但动态扫描方式需占用CPU较多的时间,在

单片机没有太多实时测控任务的情况下可以采用。

方案三:串口扩展,LED静态显示。

该方案方框图如图1.2.3所

示,式键盘配置灵活,软件结

构简单,按键较多时不宜采用。静

态显示占用口资源少,采用串口传

输实现静态显示,LED数码管与单

片机之间通过6个移位寄存器相

连,显示亮度有保证,但此方案的

硬件开销大,电路复杂,信息刷新速度慢,比较适用于并行口资源较少的场合。方案四:式按键,LED动态显示。

该方案方框图如图1.2.4所示,式按键直

接与单片机I/O口相连构成键盘,每个按键不会相

互影响,因本系统用到的按键比较少,采用式

键盘不会浪费I/O口线,所以本系统采用式键

盘。动态显示的亮度虽然不如静态显示,但其硬件

电路较简单,可节省硬件成本,虽然动态扫描需占

用CPU较多的时间,但本系统中的单片机没有很多实时测控任务,因此,本系统采用此种方案。

三、系统硬件设计

(一)系统总框图

(二)原理图设计

3.2、多功能电子钟电路原理图

四、系统软件设计

4.1、电源电路工作原理图

图4.1所示为集成电源电路的原理图

4.2、复位电路工作原理

复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序,并使其它功能单元处于一个确定的初始状态。本复位电路采用的是按键复位,它是通过复位端经电阻与VCC电源接通而实现的,它兼具上电复位功能。因本系统的晶振的频率为12MHz,所以,复位信号持续时间应当超过2μS才能完成复位操作。

4.3、键盘工作原理

图4.3所示为键盘原理图

图4.3所示为键盘原理图,本系统采用的是式键盘结构,每个按键的工作不会影响其它I/O口线的状态。软件是采用查询式结构,首先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

4.4、显示器工作原理

图4.4所示为键盘原理图

系统采用动态显示方式,动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。由图4.4可知,要想让数码管那一段亮,在该数码管位控段为高电平的情况下给这段送低电平就可以了。

五、总结与展望

课题设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在,作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。

本次课题设计是利用ATC51单片机设计的有实时显示、时间校准、定时闹钟和整点报时功能的电子时钟。并详细说明了软件和硬件设计方法及硬件实现。通过本次设计单片机原理及应用课题设计使我充分认识到了课题设计的重要性和必要性,本次设计使我对以学过的基础知识有了更深入的理解,学会了思考、工作以及对应用所

学基本理论分析和解决实际问题的能力有了很大的提高。

在此次单片机课题设计之后,我不仅加深了对单片机理论的理解,将理论很好地应用到实践当中去,而且我们还学会了如何去创新精神和严谨的科学作风,从而不断地战胜自己,超越自己。更正要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。当然,改电子时钟还有很多不足之处,比如闹钟只能定一个。在今后的学习过程中,我们需要继续努力,锻炼自己。

六、参考文献

1李群芳单片微型计算机与接口技术(第三版):电子工业出版社,20082刘51单片机含Protel实验指导书:四川师范大学成都学院实验中心,20113郭新概念51单片机C语言教程电子工业出版社

4周广兴,张子红单片机原理及应用教程北京大学出版社

5浏览/forum-2-1.html,里面的相关资料

附录一:系统总电路

电路原理仿真图:

附录二:源代码

includeinclude

----------------------------------------defineuintunsignedintdefineucharunsignedchar

----------------------------------------/ucharcodesbitK5=P0^2;

-------------------------------------voidwrite_595(uchartemp)写74HC595一个字节{

uchartemp_595,i;temp_595=temp;for(i=0;i<8;i++)table[]={0_c0,0_f9,0_a4,0_b0,0_99,0_92,0_82,0_f8,

0_80,0_98,0_88,0_83,0_c6,0_a1,0_86,0_8e};共阳极数码管代码/ucharcode_ingqi[8]={0_00,0_07,0_01,0_02,0_03,0_04,0_05,0_06};星期显示代码uchar

miao,shi,fen,date,month,day,year,year10,set,mun,set_shi,set_fen,time_flag;全局定义

uintyear_data,t;

---------------------------------------------

sbitSCLK=P3^5;DS1302通讯线定义sbitDIO=P3^6;sbitRST=P3^7;sbitspeak=P0^0;

sbitDS=P2^0;595通讯线定义sbitSH_CP=P2^1;sbitST_CP1=P2^2;sbitST_CP2=P2^3;sbitST_CP3=P2^4;sbitST_CP4=P2^5;sbitST_CP5=P2^6;sbitST_CP6=P2^7;sbitST_CP7=P3^0;sbitST_CP8=P3^1;sbitOE1=P1^0;sbitOE2=P1^1;sbitOE3=P1^2;sbitOE4=P1^3;sbitOE5=P1^4;sbitOE6=P1^5;sbitOE7=P1^6;sbitOE8=P1^7;

sbitK1=P3^2;按键接口定义sbitK2=P3^3;sbitK3=P3^4;sbitK4=P0^1;

{SH_CP=0;_nop_();_nop_();_nop_();if(temp_5950_80){DS=1;}else{DS=0;}_nop_();_nop_();_nop_();SH_CP=1;temp_595<<=1;}}

----------------------------------------------voiddelay(uintz)Nms延时{uint_,y;for(_=z;_>0;_--)for(y=112;y>0;y--);}

---------------------------------------------voiddelaynus(uintz)ums延时{uint_,y;for(_=z;_>0;_--)for(y=10;y>0;y--);}

-----------------------------------------------

voidwrite(uchardate)写入DS1302一个字节{uchartemp,i;RST=1;SCLK=0;temp=date;for(i=0;i<8;i++){

SCLK=0;if(temp0_01)DIO=1;elseDIO=0;SCLK=1;temp>=1;}}

-------------------------------------

ucharread()读出DS1302一个字节{uchara,temp;RST=1;for(a=8;a>0;a--){temp>=1;SCLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCLK=0;if(DIO){temp=temp|0_80;}else{temp=temp|0_00;}}return(temp);}

-----------------------------------

voidwrite_1302(ucharadd,uchardat)DS1302数据{RST=0;SCLK=0;RST=1;write(add);write(dat);SCLK=1;RST=0;

------------------------------------------

ucharread_1302(ucharadd)读DS1302数据{uchartemp;RST=0;SCLK=0;RST=1;write(add);temp=read();SCLK=1;RST=0;return(temp);}

--------------------------------------------voiddisplay()显示子程序{

miao=read_1302(0_81);读秒fen=read_1302(0_83);读分shi=read_1302(0_85)0_3f;读时date=read_1302(0_87);读日month=read_1302(0_);读月year=read_1302(0_8d);读年day=read_1302(0_8B);读星期write_595(miao);显示秒ST_CP1=0;ST_CP1=1;ST_CP1=0;delaynus(10);write_595(fen);显示分ST_CP2=0;ST_CP2=1;ST_CP2=0;delaynus(10);write_595(shi);显示时ST_CP3=0;写ST_CP3=1;ST_CP3=0;delaynus(10);write_595(date);显示日ST_CP4=0;ST_CP4=1;ST_CP4=0;delaynus(10);write_595(month);显示月

ST_CP5=0;ST_CP5=1;ST_CP5=0;delaynus(10);write_595(year);显示年ST_CP6=0;ST_CP6=1;ST_CP6=0;delaynus(10);write_595(_ingqi[day]);显示星期ST_CP7=0;ST_CP7=1;ST_CP7=0;delaynus(10);}

------------------------------------------

voidds1302_init()1302初始化{RST=0;SCLK=0;

/write_1302(0_80,0_00);设置初始值SECwrite_1302(0_82,0_00);设置初始值MINwrite_1302(0_84,0_00);设置初始值HRwrite_1302(0_86,0_00);设置初始值DATEwrite_1302(0_88,0_00);设置初始值MONTHwrite_1302(0_8A,0_00);设置初始值DAY/write_1302(0_8C,0_10);设置初始值YEAR}

----------------------------------------------

voidPORT_INIT()端口初始化{

P0=0_FE;P1=0_00;P2=0_00;P3=0_FC;}

voidtime_init()定时器初始化{

TMOD=0_11;设置定时器01都为工作方式1TH0=(65536-50000)/256;装入初值TL0=(65536-50000)%256;TH1=(65536-10000)/256;装入初值TL1=(65536-10000)%256;PT0=1;T0定时器优先级最高

EA=1;开总中断ET0=1;开定时器0中断ET1=1;开定时器1中断TR0=1;启动定时器0TR1=1;启动定时器1}

----------------------------------------------

voidmain(void)主程序{PORT_INIT();ds1302_init();time_init();year=read_1302(0_8d);读年数据year_data=0_2000|year;write_595(year_data>8);显示20__年的20字样

ST_CP8=0;ST_CP8=1;ST_CP8=0;set_shi=0_09;闹钟初始值设定set_fen=0_39;time_flag=0;标志位set=0;while(1){switch(set){case0:设置秒{display();显示子程序

if((shi==set_shi)(fen==set_fen)(time_flag==0))闹钟设定只设定小时和分钟{speak=~speak;if((K2==0)(time_flag==0))按键K2停止闹钟响{P0=0_FE;time_flag=1;}delay(10);}}break;}

if(fen==set_fen+1)当不按下闹钟停止按键,一分钟后自动停止闹钟{P0=0_FE;time_flag=0;}}}

----------------------------------------

voidtime0()interrupt1定时器0中断{

TR0=0;

TH0=(65536-50000)/256;TL0=(65536-50000)%256;mun++;if(mun==15){mun=0;switch(set){case1:设置秒闪烁{OE1=1;delay(300);OE1=0;}break;case2:设置分闪烁{OE2=1;delay(300);OE2=0;}break;case3:设置时闪烁{OE3=1;delay(300);OE3=0;}break;case4:设置日闪烁{OE4=1;delay(300);OE4=0;}break;case5:设置月闪烁{OE5=1;

delay(300);OE5=0;}break;case6:设置年闪烁{OE6=1;OE8=1;delay(300);OE6=0;OE8=0;}break;case7:设置星期闪烁{OE7=1;delay(200);OE7=0;}break;case8:设置闹钟闪烁{OE2=1;OE3=1;delay(200);OE2=0;OE3=0;}break;}}

TR0=1;}

-------------------------------------------

voidtime1()interrupt3定时器1中断{

TR1=0;先关定时器TH1=(65536-20000)/256;TL1=(65536-20000)%256;---------------------------------if(K1==0){delay(10);if(K1==0){set++;if(set==9){set=0;write_1302(0_80,miao);

设置初始值SEC

write_1302(0_82,fen);设置初始值MINwrite_1302(0_84,shi);设置初始值HRwrite_1302(0_86,date);设置初始值DATEwrite_1302(0_88,month);设置初始值MONTH

write_1302(0_8A,day);设置初始值DAYwrite_1302(0_8C,year_data);设置初始值YEAR{

fen+=0_10;fen=0_f0;}if(fen==0_60){fen=0_00;}}t=50000;while((!K1)t){t--;}}}---------------------------------------if(K2==0){delay(10);if(K2==0){switch(set){case1:{miao++;if((miao0_0f)>0_09){miao+=0_10;miao=0_f0;}if(miao==0_60){miao=0_00;}write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;}break;case2:{fen++;if((fen0_0f)>0_09)ST_CP2=0;ST_CP2=1;ST_CP2=0;}break;case3:{if((read_1302(0_85)0_80)==0_00){shi++;if((shi0_0f)>0_09){shi+=0_10;shi=0_f0;}if(shi==0_24)24小时制{shi=0_00;}}else{shi=(shi|0_80)+1;if((shi0_0f)>0_09){shi+=0_10;shi=0_f0;}if(shi==0_12)12小时制{shi=0_80;}}write_595(shi);显示时ST_CP3=0;ST_CP3=1;ST_CP3=0;}break;case4:

{date++;if((date0_0f)>0_09){date+=0_10;date=0_f0;}if((date==0_32)((month==0_01)||(month==0_03)||(month==0_05)||(month==0_07)||(month==0_08)||(month==0_10)||(month==0_12))){date=0_01;}else

if((date==0_31)((month==0_04)||(month==0_06)||(month==0_09)||(month==0_11))){date=0_01;}else

if((date==0_29)(month==0_02)((year_data|read_1302(0_8d))%100!=0)((year_data|read_1302(0_8d))%400!=0)){date=0_01;}else

if((date==0_30)(month==0_02)((year_data|read_1302(0_8d))%100==0)((year_data|read_1302(0_8d))%400==0)){date=0_01;}write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;}break;case5:{month++;if((month0_0f)>0_09){month+=0_10;month=0_f0;}if(month==0_13)

{month=0_01;}write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;}break;case6:{year_data++;if((year_data0_000f)==0_0a){year_data+=0_0010;year_data=0_fff0;}if((year_data0_00ff)==0_a0){year_data+=0_0100;向前进1year_data=0_ff00;后面尾数归0}write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;}break;case7:{day++;if((day0_0f)==0_08){day=0_01;}write_595(_ingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;}break;}t=50000;

while((!K2)t){t--;}}}--------------------------if(K3==0){delay(10);if(K3==0){switch(set){case1:{miao--;if((miao0_0f)==0_0F){

miao=0_f9;减到0后,再减一次就归0,}if(miao==0_F9)当全部减到00时,再减一次就为59{miao=0_59;}write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;}break;case2:{fen--;if((fen0_0f)==0_0F){fen=0_f9;}if(fen==0_F9){fen=0_59;}write_595(fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;}break;case3:

{if((read_1302(0_85)0_80)==0_00){shi--;if((shi0_0f)==0_0F){shi=0_f9;}if(shi==0_F9)24小时制{shi=0_23;}}else{shi=(shi|0_80)-1;if((shi0_0f)==0_0F){shi=0_f9;}if(shi==0_F9)12小时制{shi=0_12;}}write_595(shi);显示时ST_CP3=0;ST_CP3=1;ST_CP3=0;}break;case4:{date--;if((date0_0f)==0_0F){date=0_f9;}

if((date==0_00)((month==0_01)||(month==0_03)||(month==0_05)||(month==0_07)||(month==0_08)||(month==0_10)||(month==0_12))){date=0_31;}else

if((date==0_00)((month==0_04)||(month==0_0

6)||(month==0_09)||(month==0_11))){date=0_30;}else

if((date==0_00)(month==0_02)((year_data|read_1302(0_8d))%100!=0)((year_data|read_1302(0_8d))%400!=0)){date=0_28;}else

if((date==0_00)(month==0_02)((year_data|read_1302(0_8d))%100==0)((year_data|read_1302(0_8d))%400==0)){date=0_29;}write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;}break;case5:{month--;if((month0_0f)==0_0F){month=0_f9;}if(month==0_00){month=0_12;}write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;}break;case6:{year_data--;if((year_data0_000f)==0_0F){year_data=0_fff9;}if((year_data0_00f0)==0_F0){

year_data=0_f999;}write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;}break;case7:{day--;if((day0_0f)==0_00){day=0_07;}write_595(_ingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;}break;}t=50000;while((!K3)t)松手检测{t--;}}}-----------------------------------switch(set){case8:{if(K4==0){delay(10);if(K4==0){if((read_1302(0_85)0_80)==0_00){set_shi++;if((set_shi0_0f)>0_09)

{set_shi+=0_10;set_shi=0_f0;}

if(set_shi==0_24)24小时制{set_shi=0_00;}}else{set_shi=(set_shi|0_80)+1;if((set_shi0_0f)>0_09){set_shi+=0_10;set_shi=0_f0;}

if(set_shi==0_12)12小时制{set_shi=0_80;}}write_595(set_shi);显示闹钟的时ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)t){t--;}}}

------------------------------------if(K5==0){delay(10);if(K5==0){set_fen++;if((set_fen0_0f)>0_09){set_fen+=0_10;set_fen=0_f0;}

if(set_fen==0_60)

{set_fen=0_00;}write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)t){t--;}}}}}-------------------------if(((K4==0)||(K5==0))(set==0)){delay(10);if(((K4==0)||(K5==0))(set==0)){write_595(set_shi);显示闹钟的时ST_CP3=0;ST_CP3=1;ST_CP3=0;write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;P1=0_F9;while((!K4)||(!K5));P1=0_00;}}------------------------------------------TR1=1;退出时开定时器}

--------------------------------------------------

Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务