基于c51的电子钟设计.docx
- 文档编号:12866581
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:15
- 大小:590.72KB
基于c51的电子钟设计.docx
《基于c51的电子钟设计.docx》由会员分享,可在线阅读,更多相关《基于c51的电子钟设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于c51的电子钟设计
电子时钟设计
一、设计目的
在我们现代日常生活中,电子时钟已得到及其广泛的应用,已成为我们日常生活中的不可或缺的一部分。
本次设计的主要目的即是利用51单片机设计一个可实现24小时计时的电子时钟,计时从0时0分0秒开始,到23小时59分59秒后返回0时0分0秒自动重新开始计时。
本设计拥有时间调整功能和时间显示功能,无年、月计数和闹钟功能。
二、需求分析
本设计中的时钟要求使用8个8段数码管显示当前时间,其中秒单元与分单元中间以“-”符号隔开,分单元与时单元中间同样以“-”符号隔开。
计时范围为从00-00-00到23-59-59,当计时到23-59-59后自动返回00-00-00并重新开始计时。
设计中使用3个按键分为set、add和sub,当在计时功能工作时按下set键即可进入调时模式,在调试模式下累计按6次set后便退出调时功能,重新返回计时功能。
三、总体设计
1、总体设计框图
2、器件选型:
主要使用的器件为STC89C51RC型单片机。
该型号的单片机有P1、P2、P3、P4共4个准双向口,且包含3个16位可编程定时/计数器T0、T1、T2。
其定时可由硬件电路与中断方式控制,而定时时间和范围则完全由所编写的代码来确定和改变。
在本次设计中主要实用0号和1号定时/计数器,通过设置使它们均实图3-1总体设计框图
现50ms计数,其中0号计数器配合20次循环计数以实现1m计时,1号计数器配合10次循环计数以实现对相应调整位的0.5m闪烁。
设计中还主要使用到3个74LS373数据锁存器、1个74LS244输入缓冲器以及8个8段数码显示器。
四、硬件设计
1、硬件框图
图4-1硬件框图
2、硬件模块设计
a、时间计时模块设计:
该模块的功能实现是将十位时、个位时、十位分、个位分、十位秒和个位秒
分别存入s_hou、g_hou、s_min、g_min、s_sec和g_sec中,每个数值对应一个无符号字节。
T0计数器实现计数功能,但计数满20次50ms即1000ms时,g_sec的值加1,当g_sec计数值为10时将g_sec清零并使s_sec计数加1,以此类推,直到计数值为23-59-59,并在下一秒返回00-00-00。
b、显示模块设计:
图4-2显示模块
该模块的功能实现是将s_hou、g_hou、s_min、g_min、s_sec和g_sec中的值译码为相应的8段数码管的位选,使8段数码管能正确显示出s_hou、g_hou、s_min、g_min、s_sec和g_sec中对应的时间数值。
并在不同时刻通过dig选中相应的数码管,使相应时间值能正确显示在8个数码管中相应的为上。
c、调时模块设计:
图4-3按键功能模块
当调时功能模块启动时随即将时间计时模块关闭。
在计时模块工作时,按下set键即可进入调时模式,此时计时停止,相应调整位实现0.5ms闪烁。
在该模块中按下add则相应调时位加1,按下sub则相应调时位减1。
再次按下set可进入下一位的时间调整,当累计按下6次set后即处于十位时调时状态下,再按下一次set便退出调时功能,重新返回计时功能。
3、总电路图
图4-4总电路图
上图为本次设计的总体电路图,展示了个器件的电气连接。
五、软件设计
1、总体设计
单片机上电后自动进入计时功能开始计时,并调用显示函数,实现计时在8个8段数码管上的显示,计时范围从00-00-00到23-59-59,当计时到23-59-59后自动返回00-00-00并重新开始计时。
在计时过程中不断检测按键,看是否有按键按下。
当在计时功能执行时set键被按下,则停止计时并启动调试功能,此时按下add和sub键可对当前调整值进行加1和减1操作。
在调试模式下累计按6次set后便退出调时功能,重新返回计时功能。
在计时功能下按下add和sub键不执行任何操作。
2、程序流程图:
T0中断函数
主函数流程图T1中断函数
3、部分程序代码:
#include"reg51.h"
#defineucharunsignedchar
uchardatag_sec=0x00,s_sec=0x00,g_min=0x00,s_min=0x00,g_hous_hou=0x00;=0x00,
uchardatadig=0x00,seg=0x00,time=0x00,count0=0x00,count2=0x00;
uchardatai=0x00,reg0=0x00,bar=0x40,value=0x00,sbitled_dat=P2^0;
sbitseg_sel=P2^1;
sbitpos_sel=P2^2;
sbitkey_in=P2^3;
sbitkey_out=P2^4;
sbitlcd_dat=P2^5;
sbitlcd_con=P2^6;
begin()
{
led_dat=0;seg_sel=0;
pos_sel=0;
key_in=0;
key_out=0;
lcd_dat=0;
lcd_con=0;
TH0=0x3C;TL0=0xB0;TH1=0x3C;TL1=0xB0;
TMOD=0x11;
ET0=1;TR0=1;
ET1=0;TR1=0;
EA=1;
}
delay(intx)
{
inty,z;
for(y=0;y for(z=0;z<120;z++); } display() { for(i=0;i<9;i=i+1) { switch(i) { case1: dig=0xFE;time=g_sec;break; case2: dig=0xFD;time=s_sec;break; case3: dig=0xFB;time=0x40;break;case4: dig=0xF7;time=g_min;break; case5: dig=0xEF;time=s_min;break;count1=0x00,key_dat=0x00; case6: dig=0xDF;time=0x40;break;case7: dig=0xBF;time=g_hou;break;case8: dig=0x7F;time=s_hou;break;} switch(time){case0: seg=0x3F;break;case1: seg=0x06;break;case2: seg=0x5B;break;case3: seg=0x4F;break;case4: seg=0x66;break;case5: seg=0x6D;break;case6: seg=0x7D;break;case7: seg=0x07;break;case8: seg=0x7F;break;case9: seg=0x6F;break;case0x40: seg=0x40;break;} pos_sel=1;P0=dig;pos_sel=0;seg_sel=1;P0=seg;seg_sel=0;delay (1);pos_sel=1;P0=dig;pos_sel=0;seg_sel=1;P0=0x00;seg_sel=0;}} voidtimer(void)interrupt1{ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;count1=count1+1;if(count1==20){count1=0;g_sec=g_sec+1;if(g_sec>9) { g_sec=0; s_sec=s_sec+1; if(s_sec>5) { s_sec=0; g_min=g_min+1; if(g_min>9) { g_min=0; s_min=s_min+1; if(s_min>5) { s_min=0; g_hou=g_hou+1; if(g_hou>9) { g_hou=0; s_hou=s_hou+1;} if(g_hou>=4&&s_hou>=2){ g_hou=0; s_hou=0; } } } } } } ET0=1; } keyscan(){ EA=0; seg_sel=0; pos_sel=0; key_in=1; P0=0xF7; key_in=0; key_out=1; key_dat=P0; key_out=0; key_dat=key_dat&0x0F; if(key_dat==7) { delay(10); key_in=1; P0=0xF7; key_in=0; key_out=1; key_dat=P0; key_out=0; key_dat=key_dat&0x0F; if(key_dat==7) { count0=count0+1; switch(count0) { case1: ET0=0;TR0=0;ET1=1;TR1=1;value=g_sec;reg0=g_sec;g_sec=bar;bar=reg0;break; case2: g_sec=value;bar=0x40;value=s_sec;reg0=s_sec;s_sec=bar;bar=reg0;break; case3: s_sec=value;bar=0x40;value=g_min;reg0=g_min;g_min=bar;bar=reg0;break; case4: g_min=value;bar=0x40;value=s_min;reg0=s_min;s_min=bar;bar=reg0;break; case5: s_min=value;bar=0x40;value=g_hou;reg0=g_hou;g_hou=bar;bar=reg0;break; case6: g_hou=value;bar=0x40;value=s_hou;reg0=s_hou;s_hou=bar;bar=reg0;break; case7: ET0=1;TR0=1;ET1=0;TR1=0;s_hou=value;reg0=0x00;bar=0x40;count0=0;break; } } } if(count0! =0) { if(key_dat==0x0B) { delay(10); key_in=1; P0=0xF7; key_in=0; key_out=1; key_dat=P0; key_out=0; key_dat=key_dat&0x0F; if(key_dat==0x0B) { switch(count0) { case1: g_sec=0;value=g_sec;break; case2: s_sec=value;s_sec=s_sec+1;if(g_sec>5){s_sec=0;}value=s_sec;break; case3: g_min=value;g_min=g_min+1;if(g_min>9){g_min=0;}value=g_min;break; case4: s_min=value;s_min=s_min+1;if(s_min>5){s_min=0;}value=s_min;break; case5: g_hou=value;g_hou=g_hou+1;if(g_hou>9){g_hou=0;}value=g_hou;break; case6: s_hou=value;s_hou=s_hou+1;if(s_hou>2){s_hou=0;}value=s_hou;break; } } } elseif(key_dat==0x0D) { delay(10); key_in=1; P0=0xF7; key_in=0; key_out=1; key_dat=P0; key_out=0; key_dat=key_dat&0x0F; if(key_dat==0x0D) { switch(count0) { case1: g_sec=0;value=g_sec;break; case2: s_sec=value;s_sec=s_sec-1;if(g_sec<0){s_sec=5;}value=s_sec;break; case3: g_min=value;g_min=g_min-1;if(g_min<0){g_min=9;}value=g_min;break; case4: s_min=value;s_min=s_min-1;if(s_min<0){s_min=5;}value=s_min;break; case5: g_hou=value;g_hou=g_hou-1;if(g_hou<0){g_hou=9;}value=g_hou;break; case6: s_hou=value;s_hou=s_hou-1;if(s_hou<0){s_hou=2;}value=s_hou;break; } } } } EA=1; } voidblinky()interrupt3 { EA=0; TR1=0;ET1=0; TH1=0x3C;TL1=0xB0; TR1=1;ET1=1; count2=count2+1; if(count2==5) { count2=0; switch(count0) { case1: reg0=g_sec;g_sec=bar;bar=reg0;break;case2: reg0=s_sec;s_sec=bar;bar=reg0;break;case3: reg0=g_min;g_min=bar;bar=reg0;break;case4: reg0=s_min;s_min=bar;bar=reg0;break;case5: reg0=g_hou;g_hou=bar;bar=reg0;break;case6: reg0=s_hou;s_hou=bar;bar=reg0;break; } } EA=1; } main() { begin(); while (1) { display(); keyscan(); } } 六、试验箱上功能测试 图6-1试验箱上实现(未加按键) 七.问题分析 没加按键之前,数码管能正常显示,在加按键之后,数码管出现闪烁。 后来经过多次修改并在proteus上进行软件仿真,也没能解决该问题,希望在以后的学习中能够解决这个问题。 通过本次课程设计,对硬件设计流程有了更深的了解!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 c51 电子钟 设计