基于单片机的电子时钟6位LED数码管显示.docx
- 文档编号:5040306
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:15
- 大小:140.04KB
基于单片机的电子时钟6位LED数码管显示.docx
《基于单片机的电子时钟6位LED数码管显示.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子时钟6位LED数码管显示.docx(15页珍藏版)》请在冰豆网上搜索。
基于单片机的电子时钟6位LED数码管显示
数码管显示电子时钟设计
一.功能要求
1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。
2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。
.方案论证
1.数字时钟方案
数字时钟是本设计的最主要的部分。
根据需要,可利用两种方案实现。
方案一:
本方案采用Dallas公司的专用时钟芯片DS12887A该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电
网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:
本方案完全用软件实现数字时钟。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
2.数码管显示方案
方案一:
静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8位输出口控制。
静态显示时较小的电流
能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,
造成了资源的浪费。
方案二:
动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证
扫描速度足够快,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时间与间隔时
间的比例有关。
调整参数可以实现较高稳定度的显示。
动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用方案二。
3.计时方案
利用AT89S51单片机内部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能使读者在定时/计数器的使用、中断
及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。
4.控制方案
AT89S51的P0口和P2口外接由八个LED数码管(LED8〜LED1构成的显示器,用P0口作LED的段码输出口,P2口作八个LED数码管的位控输出线,P1口外接四个按键A、BC构成键盘电路。
AT89S51是一种低功耗,高性能的CMOS位微型计算机。
它带有8KFlash可编程和擦除的只读存储器(EPROM,该器件采用ATME的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。
简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本设计中采用此的设计方案。
3.系统硬件电路的设计
根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:
单片机
模块、数码显示模块与按键模块,模块之间的关系图如下面得方框电路图1所示
图1硬件电路方框图
1.单片机模块设计
1.1芯片分析
AT89C51单片机引脚图如下:
U1
12-
Pl.t
P3.4/TD
PIS
P3JSHT1
PIT
P3J/RT
Pl_23
COi
再DV
31d
通D3z
36DO
3*D$z
33DSz
32肌
21RS#
22ffiWz
27
21
25
笳
3
ID
11
12
O
H
15
16
17
39
图2AT89C51引脚图
其各引脚功能如
MCS-51单片机是标准的40引脚双列直插式集成电路芯片,下:
VCC+5V电源。
VSS接地。
RST复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。
XTAL1和XTAL2外接晶体引线端。
当使用芯片内部时钟时,此二引线端用
于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
P0口:
P0口为一个8位漏极开路双向I/O口,当作输出口使用时,必须接
上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入
“1”,使FET截止,以避免锁存器为“0”状态时对引脚读入的干扰。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,它不再需要多路转接电路MUX因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”,使输出驱动电路的FET截止。
P2口:
P2口电路比P1口电路多了一个多路转接电路MUX这又正好与P0口一样。
P2口可以作为通用的I/O口使用,这时多路转接电路开关倒向锁丰存器Q端。
P3口:
P3口特点在于,为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。
当作为I/O口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。
当输出第二功能信号时,该位应应置“1”,使与非门对第二功
能信号的输出是畅通的,从而实现第二功能信号的输出。
MCS-51单片机共有4个双向的8位并行I/O端口(Port),分别记作P0-P3,共有32根口线,各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。
实际上P0-P3已被归入特殊功能寄存器之列。
这四个口除了按字节寻址以外,还可以按位寻址。
由于它们在结构上有一些差异,故各口的性质和功能有一些差异。
±-士±-7亍一
21
±±±嗤兰蚩±嗚
U
POO^Dn
fUMD!
帀希财
R5T
PD4AD4.
PDSkDE
P2IMWPZVMpza^iQ023^11
MUE
毗比惶
甌
win
?
2£All
PZTAI6
PMK=CD
*1.1
P^.lfDCD
9]Z
fl3
pjjwiifr
ill1
#l£
P3E/F1
PSJ&rifl-
PI?
pjjnnr
3T
1.3按键模块
键。
UHCH
下图为按键模块电路原理图,
图3数码显示电路
A为复位键,B为时钟调控键,C为分钟调控
按键模块电路原理图
4.系统程序的设计
软件设计分析
显示的效果为动态显示,利用CPU控制数码管显示的选通和停止,通过定时器中断不断扫描,从而实现数据的动态显示。
在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时•分.秒,在显示初值之后,进入主循环。
在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图5:
图5系统总体流程图
5.调试及性能分析
电子时钟主要的设计要求是能够实现时钟的一般功能,以及包括时间的调整功能,这个
基于单片机的电子时钟基本上实现了上述功能,能够通过时间调整电路对时间进行调整以及
复位。
下述为18:
30:
30的仿真图:
首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。
检查无误后插上AT89S51
并烧写一简易的程序,观察电路是否能协同工作。
最后烧写工作程序,根据显示现象调试程
序直至成功。
上电运行时,数码管开始显示00:
00:
00,时钟开始走时。
程序的编写和调试是一个比较复杂的过程。
由于对C语言知识的薄弱,所以在编译过
程中总是有很多语法上的错误,但是在和同学一起讨论研究后,程序是编写出来了,但结合到硬件调试中又出现各种问题。
在调试过程中出现了很多问题,在第一次把程序烧到单片机里,通电运行时,虽然控制时、分、秒的按钮能够对数码管显示进行调整,但是数码管全亮,不能通过按键变化显示,更改程序中的问题,但是调时设置又没有用了。
经过检查及修改,
终于完成了所做的设计,不容易啊。
6.控制源程序清单
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*七段共阴管显示定义*/ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
/*定义并初始化变量*/ucharseconde=0;ucharminite=O;
ucharhour=12;ucharmstcnt=O;
sbitP1_0=P1A0;
sbitP1_仁P1A1;
sbitP1_2=P“2;
/*函数声明*/
voiddelay(uchark);voidtime_pro();//voiddisplay();//
//second
调整定义
//minite
调整定义
//hour
调整定义
//延时子程序
时间处理子程序
显示子程序
//键盘扫描子程序
voidkeyscan();
*************************
/*延时子程序*/
************************
voiddelay(uchark)
{
ucharj;
while((k--)!
=0)
{
for(j=0;j<125;j++)
{;}
}
}
/*************************
/*时间处理子程序*/
]************************》
voidtime_pro(void)
{
if(seconde==60){seconde=0;
minite++;
if(minite==60)
{minite=O;
hour++;
if(hour==24)
{hour=0;}
//
//
//
秒钟设为60进制
分钟设为60进制
时钟设为24进制
}
*************************
I*显示子程序*/
*************************
voiddisplay(void)
P2=0xfe;
P0=dispcode[hour/10];//
delay(4);
P2=0xfd;
P0=(dispcode[(hour%10)])|0X80;//
delay(4);
P2=0xfb;
P0=dispcode[minite/1O];//
delay(4);
P2=0xf7;
P0=(dispcode[minite%10])|0X80;//
delay(4);
P2=0xef;
P0=dispcode[seconde/10];//
delay(4);
P2=0xdf;
P0=dispcode[seconde%10];//
delay(4);
}
/*******************************/
/*键盘扫描子程序*/
/*******************************/
voidkeyscan(void)
{
if(P1_O==O)//
{
delay(30);
if(P1_0==0)
{
seconde++;
if(seconde==60)
{seconde=0;}
}
}
if(P1_1==0)//
{
显示小时的十位
显示小时的个位
显示分的十位
显示分的个位
显示秒的十位
显示秒的个位
按键1秒的调整
按键2分的调整
delay(30);
if(P1_1==O)
{
minite++;
if(minite==60)
{minite=O;}
}
}
if(P1_2==0)//按键3小时的调整
{
delay(30);
if(P1_2==0)
{
hour++;
if(hour==24)
{hour=0;}
}
}
}
voidtimerO(void)interrupt1using0//定时器0方式1,50ms中断一次
{
TH0=0x3c;
TMOD=0x11;
mstcnt++;
if(mstcnt==20)
{
seconde++;
mstcnt=0;II注意点。
对计数单元的清零十分的重要,本次调试中就是
}II因为忽略了这一点,给我早成了很大的被动。
}
**********************
I*主函数*/
**********************
voidmain(void)
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
while
(1){
keyscan();//按键扫描
time_pro();//时间处理
display();//显示时间
}
}
附录.元器件清单
序号
元件名称
规格型号/参数
数量(个)
备注
1
单片机
AT89S52
1
2
显示驱动三极管
A1013
6
3
电容
30pF
2
4
电容
22H
1
5
按键
BUTTON
3
6
排阻
RESPACK-8/10K
1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 时钟 LED 数码管 显示