电子时钟设计报告Word文档格式.docx
- 文档编号:19729414
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:14
- 大小:140.62KB
电子时钟设计报告Word文档格式.docx
《电子时钟设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子时钟设计报告Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
在调试和设置闹钟时可能会出现时钟暂停的情况;
设置闹钟函数不够简洁;
闪烁不够稳定。
3.1.3总结
此实验是我们学习单片机以来写的第一个较正式的程序,难免存在不足之处。
3.2源代码
E-clock.c程序文件:
#include"
E-clock.h"
/*************以下是主函数**************/
voidmain()
{
iniTimer();
//首先初始化定时计数器
while
(1)
{
display();
//调用显示函数
keyScan();
//扫描键盘
bellClock();
//扫描闹钟是否到点
}
}
E-clock.h程序文件:
/*************以下是宏定义**************/
#include<
reg52.h>
#defineucharunsignedchar//将unsignedchar用uchar表示
#defineuintunsignedint
/*************以下是功能函数声明**************/
voidiniTimer();
//定时计数器初始化函数
voiddisplay();
//显示模式变换函数
voidnormalDisplay(uchar*tmp);
//正常显示函数
voidoneWeiDisplay(ucharnum,ucharwei);
//一位数码管显示函数
voidnumCount();
//时间进位函数
voidflash(ucharnum,ucharwei);
//单位数码管闪动函数
voidkeyScan();
//键盘扫描函数
voidnumadd(uchar*tmp);
//数字加一函数
voidbellClock();
//闹钟定时函数
voiddelay();
//延时函数
/*************以下是变量声明**************/
ucharcodenumTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x40};
//数字字符编码表
ucharcodeweiTable[]={0x00,0x01,0x02,0x03,0x04,0x05,
0x06,0x07};
//数码管位编码表
ucharnumTmp[6]={0};
//正常显示的时分秒数据存储数组
ucharbellTmp[6]={0};
//存储闹钟时间的数据存储数组
sbitLed=P3^0;
//小灯的位定义
uchartime,flsh,enter,ok,value=1,move;
//各个变量的定义
/*************以下是功能函数定义**************/
voidiniTimer()
{
EA=1;
//开中断总开关
ET1=1;
//允许T1中断
TMOD=0x10;
//T1工作于定时方式1
TH1=(65536-50000)/256;
//送定时初值高八位
TL1=(65536-50000)%256;
//送定时初值低八位
TR1=1;
//启动T1工作
voiddisplay()
{
numCount();
if(enter==1&
&
ok!
=1)//当按下“进入/退出”键后,且没有//按下“确认”键时,进入功能模式,显示1
oneWeiDisplay(value,0);
elseif(value==1)//当显示“1”时按下“确认”键,进入//调时模式
normalDisplay(numTmp);
elseif(value==2)//当显示“2”时按下“确认”键,
//进入闹钟设置模式
normalDisplay(bellTmp);
voidnormalDisplay(uchar*tmp)
ok==1&
move==5)//如果进入了模式且按下了//“确认”键且选中最右边数码管
{flash(tmp[0],7);
}//那么该位数码管闪动,此时若
//按下“加一”键可以实现加1操作
elseoneWeiDisplay(tmp[0],7);
//如果没有按键,则正常显示
move==4)
{flash(tmp[1],6);
elseoneWeiDisplay(tmp[1],6);
oneWeiDisplay(10,5);
//秒与分中间的“-”
move==3)
{flash(tmp[2],4);
elseoneWeiDisplay(tmp[2],4);
move==2)
{flash(tmp[3],3);
elseoneWeiDisplay(tmp[3],3);
oneWeiDisplay(10,2);
//分与时之间的“-”
move==1)
{flash(tmp[4],1);
elseoneWeiDisplay(tmp[4],1);
move==0)
{flash(tmp[5],0);
elseoneWeiDisplay(tmp[5],0);
voidoneWeiDisplay(ucharnum,ucharwei)
P2=numTable[num];
P1=weiTable[wei];
delay();
P2=0;
//让数码管熄灭一下,起到消影的效果
voidnumCount()//实现秒到分,分到时的进位
if(time==20)//定时计数器计数20次后,达到1秒,time标志//重新置为0
{
time=0;
numTmp[0]++;
//秒位加1
}
if(numTmp[0]>
9)
numTmp[0]=0;
numTmp[1]++;
if(numTmp[1]>
5)
numTmp[1]=0;
numTmp[2]++;
if(numTmp[2]>
numTmp[2]=0;
numTmp[3]++;
if(numTmp[3]>
numTmp[3]=0;
numTmp[4]++;
if(numTmp[4]>
numTmp[4]=0;
numTmp[5]++;
if(numTmp[5]==2&
numTmp[4]==4)//到24整点时,从0点//开始重新显示
numTmp[5]=0;
}
voidflash(ucharnum,ucharwei)
flsh++;
//让该位数码管灭6次亮一次,达到闪烁效果
if(flsh==6)
oneWeiDisplay(num,wei);
flsh=0;
voidkeyScan()
P0=0x7f;
if(P0!
=0x7f)
delay();
//键盘延时去抖
if(P0!
{
switch(P0)
{
case0x7e:
//“进入/退出”键
{
enter++;
//首次按下该键后,enter标志为1,//进入功能选择模式,数码管显示一
if(enter==2){enter=0;
ok=0;
value=1;
}//进入功
//能模式后,再次按下“进入/退出”键
break;
//退出到正常显示状态
}
case0x7d:
//“加一”键
{
if(enter==1&
=1)//当按下“进入/退出”键//后,且没有按下“确认”键时,实现1和2的选择
{
value++;
if(value>
2)
value=1;
}
ok==1)//当按下“进入/退出”键后,//且按下“确认”键后实现时间的各位加1功能
if(value==1)numadd(numTmp);
//调时模式时
if(value==2)numadd(bellTmp);
//闹钟模式时
}
}
case0x7b:
//“移位”键
move++;
//实现数码管位的移动
if(move>
5)move=0;
}
case0x77:
//“确认”键
ok=1;
//按下该键,ok标志置1
Led=1;
//当小灯亮时,按下该键,小灯熄灭
}
while(P0!
=0x7f);
//如果按键没有松开,则一直等待
}
voidnumadd(uchar*tmp)
switch(move)//按照时分秒的情况,限制加数的范围
case0:
tmp[5]++;
if(tmp[5]>
2)tmp[5]=0;
break;
case1:
tmp[4]++;
if(tmp[5]==2&
tmp[4]>
3)
tmp[4]=0;
if(tmp[4]>
9)tmp[4]=0;
case2:
tmp[3]++;
if(tmp[3]>
6)tmp[3]=0;
case3:
tmp[2]++;
if(tmp[2]>
9)tmp[2]=0;
case4:
tmp[1]++;
if(tmp[1]>
6)tmp[1]=0;
case5:
tmp[0]++;
if(tmp[0]>
9)tmp[0]=0;
voidbellClock()//将实际时间与设好的闹钟时间比较,如果相等,//则小灯亮
if(bellTmp[0]==0&
bellTmp[1]==0&
bellTmp[2]==0&
bellTmp[3]==0&
bellTmp[4]==0&
bellTmp[5]==0)
Led=1;
//因闹钟与实际时间初始值均是00-00-00,为了//程序初始时不让小灯亮,将此值屏蔽
elseif(numTmp[0]==bellTmp[0]&
numTmp[1]==bellTmp[1]&
numTmp[2]==bellTmp[2]&
numTmp[3]==bellTmp[3]&
numTmp[4]==bellTmp[4]&
numTmp[5]==bellTmp[5])Led=0;
voiddelay()//实现短暂时间的延时
uchartmp;
for(tmp=0;
tmp<
200;
tmp++);
//以下为定时器中断函数,实现50ms的计时
voidtime1()interrupt3using1
//重新送初值
time++;
4效果图
4.1正常显示效果
4.2闹钟设置效果
(首次进入闹钟设置时默认为零点)
4.3功能选择模式效果
(注:
1为调时)
2为闹钟设置)
4.4调时效果
通过按“加一”键,实现闪烁位的加一由于该位闪烁,所以截图时未显示出数字)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 设计 报告