基于c51的电子钟设计文档格式.docx

上传人:b****1 文档编号:3536001 上传时间:2023-05-01 格式:DOCX 页数:15 大小:590.72KB
下载 相关 举报
基于c51的电子钟设计文档格式.docx_第1页
第1页 / 共15页
基于c51的电子钟设计文档格式.docx_第2页
第2页 / 共15页
基于c51的电子钟设计文档格式.docx_第3页
第3页 / 共15页
基于c51的电子钟设计文档格式.docx_第4页
第4页 / 共15页
基于c51的电子钟设计文档格式.docx_第5页
第5页 / 共15页
基于c51的电子钟设计文档格式.docx_第6页
第6页 / 共15页
基于c51的电子钟设计文档格式.docx_第7页
第7页 / 共15页
基于c51的电子钟设计文档格式.docx_第8页
第8页 / 共15页
基于c51的电子钟设计文档格式.docx_第9页
第9页 / 共15页
基于c51的电子钟设计文档格式.docx_第10页
第10页 / 共15页
基于c51的电子钟设计文档格式.docx_第11页
第11页 / 共15页
基于c51的电子钟设计文档格式.docx_第12页
第12页 / 共15页
基于c51的电子钟设计文档格式.docx_第13页
第13页 / 共15页
基于c51的电子钟设计文档格式.docx_第14页
第14页 / 共15页
基于c51的电子钟设计文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于c51的电子钟设计文档格式.docx

《基于c51的电子钟设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于c51的电子钟设计文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

基于c51的电子钟设计文档格式.docx

该模块的功能实现是将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<

x;

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;

case3:

dig=0xFB;

time=0x40;

case4:

dig=0xF7;

time=g_min;

case5:

dig=0xEF;

time=s_min;

count1=0x00,key_dat=0x00;

case6:

dig=0xDF;

case7:

dig=0xBF;

time=g_hou;

case8:

dig=0x7F;

time=s_hou;

}

switch(time){case0:

seg=0x3F;

case1:

seg=0x06;

case2:

seg=0x5B;

case3:

seg=0x4F;

seg=0x66;

case5:

seg=0x6D;

case6:

seg=0x7D;

seg=0x07;

seg=0x7F;

case9:

seg=0x6F;

case0x40:

seg=0x40;

break;

pos_sel=1;

P0=dig;

pos_sel=0;

seg_sel=1;

P0=seg;

delay

(1);

pos_sel=1;

P0=0x00;

}}

voidtimer(void)interrupt1{ET0=0;

TR0=0;

TH0=0x3C;

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>

g_min=0;

s_min=s_min+1;

if(s_min>

s_min=0;

g_hou=g_hou+1;

if(g_hou>

g_hou=0;

s_hou=s_hou+1;

=4&

&

s_hou>

=2){

s_hou=0;

keyscan(){

EA=0;

seg_sel=0;

key_in=1;

P0=0xF7;

key_out=1;

key_dat=P0;

key_dat=key_dat&

0x0F;

if(key_dat==7)

delay(10);

count0=count0+1;

switch(count0)

ET0=0;

TR0=0;

ET1=1;

TR1=1;

value=g_sec;

reg0=g_sec;

g_sec=bar;

bar=reg0;

g_sec=value;

bar=0x40;

value=s_sec;

reg0=s_sec;

s_sec=bar;

s_sec=value;

value=g_min;

reg0=g_min;

g_min=bar;

case4:

g_min=value;

value=s_min;

reg0=s_min;

s_min=bar;

s_min=value;

value=g_hou;

reg0=g_hou;

g_hou=bar;

g_hou=value;

value=s_hou;

reg0=s_hou;

s_hou=bar;

case7:

ET1=0;

TR1=0;

s_hou=value;

reg0=0x00;

count0=0;

if(count0!

=0)

if(key_dat==0x0B)

s_sec=s_sec+1;

5){s_sec=0;

}value=s_sec;

g_min=g_min+1;

if(g_min>

9){g_min=0;

}value=g_min;

s_min=s_min+1;

if(s_min>

5){s_min=0;

}value=s_min;

g_hou=g_hou+1;

if(g_hou>

9){g_hou=0;

}value=g_hou;

s_hou=value;

s_hou=s_hou+1;

if(s_hou>

2){s_hou=0;

}value=s_hou;

elseif(key_dat==0x0D)

if(key_dat==0x0D)

s_sec=s_sec-1;

if(g_sec<

0){s_sec=5;

g_min=g_min-1;

if(g_min<

0){g_min=9;

s_min=s_min-1;

if(s_min<

0){s_min=5;

g_hou=g_hou-1;

if(g_hou<

0){g_hou=9;

s_hou=s_hou-1;

if(s_hou<

0){s_hou=2;

voidblinky()interrupt3

TH1=0x3C;

TR1=1;

ET1=1;

count2=count2+1;

if(count2==5)

count2=0;

reg0=g_sec;

reg0=s_sec;

reg0=g_min;

reg0=s_min;

reg0=g_hou;

reg0=s_hou;

main()

begin();

while

(1)

display();

keyscan();

六、试验箱上功能测试

图6-1试验箱上实现(未加按键)

七.问题分析

没加按键之前,数码管能正常显示,在加按键之后,数码管出现闪烁。

后来经过多次修改并在proteus上进行软件仿真,也没能解决该问题,希望在以后的学习中能够解决这个问题。

通过本次课程设计,对硬件设计流程有了更深的了解!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2