基于单片机的数字时钟.docx
《基于单片机的数字时钟.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字时钟.docx(18页珍藏版)》请在冰点文库上搜索。
基于单片机的数字时钟
基于单片机的数字时钟
题目数字钟
学院电子信息工程学院
学科门类单片机
班级
学号
姓名
指导教师
2012年06月14日
目录
一、题目及设计要求-3-
二、实验内容-3-
三、实验原理-3-
(一)、硬件介绍-3-
(二)、实验线路-6-
(三)、流程图-7-
四、程序设计-9-
五、调试过程及测试结果-14-
六、实习心得-14-
七、参考文献-15-
一、题目及设计要求
1、题目:
数字钟
2、掌握单片机设计原理
二、实验内容
1、实现1S定时功能
2、在内存区开辟区间,连续8个直接存储相应信息
3、调用显示程序显示秒、分、时
三、实验原理
(一)、硬件介绍
1、STC89C52单片机
1)STC89C52单片机简介
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。
2)、单片机的构成
STC89C52单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件,STC89C52单片机单片机内包含下列几个部件:
●一个8位CPU;
●一个片内振荡器及时钟电路;
●8K字节EEPROM程序存储器;
●256字节RAM数据存储器;
●两个16位定时器/计数器;
●可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;
●32条可编程的I/O线(四个8位并行I/O端口);
●一个可编程全双工串行口;
●具有六个中断源、两个优先级嵌套中断结构。
2、3—8线译码器
1)74HC138为3线-8线译码器,其工作原理如下:
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
2)74HC138的作用:
利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;若外接一个反
相器还可级联扩展成32线译码器。
若将选通端中的一个作为数据输入端时,74HC138还可作数据分配器
3)3线-8线译码器74HC138的功能表
3、共阳极八段LED数码管
共阳极八段数码管简介
LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点。
我们采用共阳极接法。
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。
通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。
根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
(二)、实验线路图
1信号电路设计
单片机外围电路设计
LED驱动电路设计
串行通讯电路
电源电路
按键控制电路
总电路图如图1-1
图1-1
(三)、流程图
1、主流程图
四、程序设计(C语言):
/*
1、按键可以调整当时时间
2、按键可以调节定时时间
3、定时时间到继电器吸合
*8位数码管显示时间格式格式12-08-00标示12点08分00秒
S1用于小时加1操作
S2用于分钟加1操作
S2用于分钟减1操作
*/
#include
sbitKEY1=P2^4;
sbitKEY2=P2^5;
sbitKEY3=P2^6;
sbitKEY4=P2^7;
sbitLED=P1^2;
codeunsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管0-9
unsignedcharStrTab[6];//定义缓冲区
unsignedcharminute=30,hour=12,second=0;//定义并且初始化值12:
30:
00
bitsec=0;
voiddelay(unsignedintcnt)//延时函数
{
while(--cnt);
}
voidDisplaypro(void)
{
StrTab[0]=tab[hour/10];//显示正常时间
StrTab[1]=tab[hour%10];
StrTab[2]=tab[minute/10];
StrTab[3]=tab[minute%10];
StrTab[4]=tab[second/10];
StrTab[5]=tab[second%10];
}
main()//主函数
{
TMOD|=0x01;//定时器010msin12Mcrystal用于计时
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=1;
TMOD|=0x10;//定时器1用于动态扫描
TH1=0xF8;
TL1=0xf0;
ET1=1;
TR1=1;
EA=1;
Displaypro();
while
(1)//主循环
{
if(!
KEY1)//按键1去抖以及动作
{
delay(10000);
if(!
KEY1)
{
hour++;if(hour==24)hour=0;//正常时间小时加1
Displaypro();
}
}
if(!
KEY2)//按键去抖以及动作
{
delay(10000);
if(!
KEY2)
{
minute++;if(minute==60)minute=0;//分加1
Displaypro();
}
}
if(!
KEY3)//按键去抖以及动作
{
delay(10000);
if(!
KEY3)
{
minute--;if(minute==255)minute=59;//分减1
Displaypro();
}
}
if(!
KEY4)//按键去抖以及动作
{
delay(10000);
if(!
KEY4)
{
second++;if(second==60)second=0;//秒加1
Displaypro();
}
}
}
}
voidtime1_isr(void)interrupt3using0//定时器1用来动态扫描
{
staticunsignedcharnum;
TH1=0xF8;//重入初值
TL1=0xf0;
switch(num){
case0:
P2=0|0xf0;P0=StrTab[num];break;//分别调用缓冲区的值进行扫描
case1:
P2=1|0xf0;P0=StrTab[num]|0x80;break;
case2:
P2=2|0xf0;P0=StrTab[num];break;
case3:
{
P2=3|0xf0;
if(sec)
P0=StrTab[num]|0x80;
else
P0=StrTab[num];
break;
}
case4:
P2=4|0xf0;P0=StrTab[num];break;
case5:
P2=5|0xf0;P0=StrTab[num];break;
default:
break;
}
num++;//扫描6次,使用6个数码管
if(num==6)
num=0;
}
voidtim(void)interrupt1using1
{
staticunsignedcharcount;//定义内部静态变量
TH0=0xd8;//重新赋值
TL0=0xf0;
count++;
if(count==20||count==70)
sec=~sec;
switch(count)
{
case0:
case20:
case40:
case60:
case80:
Displaypro();//隔一定时间调用显示处理
break;
case50:
default:
break;
}
if(count==100)
{
count=0;
second++;//秒加1
if(second==60)
{
second=0;
minute++;//分加1
if(minute==60)
{
minute=0;
hour++;//时加1
if(hour==24)
hour=0;
}
}
}
}
五、调试过程及测试结果
1、首先根据电路原理图在软件上连出电路,然后进行电路的调试,在实际的电路中,芯片一脚接+5V的电源,另一引脚接地。
2、现在将在调试过程中的问题总结:
测试数码管显示的数据是否正确,将编好的程序写进单片机后,观察数码管,发现码型显示不正确。
3、通过改正硬件电路,使数码管显示正确的数据。
通过以上硬件电路调试,最终达到了设计的要求,实现了数字钟秒、分、时的显示。
六、实习心得
1.通过对单片机频率计的设计,我对单片机这一课程及其实际应用有了更加深入的认识与理解;
2.通过对单片机电路设计和制版工艺的学习,更加认识到单片机的适用范围的广泛;
3.通过对电路板的焊接与调试,动手能力得到了很好的提升,对这一课程也更加热爱。
七、参考文献
1、单片机基础第三版李广弟、朱月秀、冷祖祁《人民邮电》
2、单片微型计算机第三版李群芳、张士军《电子工业出版社》
3、《单片机原理与实用技术》付晓光主编北京交通大学出版社。
4、《MCS-51单片机原理及接口技术》汪德彪主编郭杰副主编电子工业出版社。