基于单片机的数字时钟设计.docx
- 文档编号:3637648
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:11
- 大小:155.62KB
基于单片机的数字时钟设计.docx
《基于单片机的数字时钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字时钟设计.docx(11页珍藏版)》请在冰豆网上搜索。
基于单片机的数字时钟设计
郑州航空工业管理学院
单片机课程设计论文
11届电子信息工程专业113084班级
题目基于单片机的数字时钟设计
学号
姓名
指导教师王丹
二О一三年十二月二十七日
一、
电子时钟的基本原理
实验设计是用单片机控制的数字电路实现的数字电子钟,整体的电路设计是由振荡器、分频器、计数器、译码器、LED显示器、校时电路组成。
(1)计数、显示电路
该部分是由两个60进制计数器,一个24进制计数器、译码器、显示器组成。
给60进制计数器一个1Hz的脉冲。
观察数码管的显示,看计数器是否正常计时,并且当秒计数器计满60后向分计数器进位。
分计数器计满60后向小时计数器进位。
(2)校时电路
按对应按键来调整时分秒,按加一减一键来调整时间。
(3)复位电路
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
二、电子时钟的硬件设计
电路原理图如下图所示:
电子时钟原理图
原理图说明:
KEY1至KEY6为矩阵键盘,分别对应秒、分、时的加减,DIGILED1和DIGI2为四位数码管,SW—RET为复位键,DIG1至DIG8分别控制一位数字的显示。
USB为输入端,U2提供工作电压,U1为单片机STC89C52芯片。
VCC外接电源,GND接地,SWITCH1为跳帽连接处。
元器件清单如下表所示:
电子时钟元件清单表
原件名称
数量
焊接位置
电源部分
USB座
1
USB
USB线
1
双排针
(2)
1
CONN1
跳帽
2
104电容0.1uF
6
C2,5,6,7,8,9,11
LED灯
1
D1
电阻2K
1
R2
最小系统部分
40针座
1
U1
STC89C52
1
晶振12MHz
1
Y1
电容20pF
2
C3,C4
复位键
1
SW_RST
电阻10K
1
R1
蜂鸣器
1
LS1+
三极管9015
9
Q1~Q9
电阻330
1
R3
键盘显示、通信部分
16针座
1
U2
MAX232
1
单排针(5)
1
UART
按键
4
KEY1~KEY4
单排针(3)
1
SWITCH1
跳帽
1
4位LED
2
DIGILED1,2
电阻4.7K
8
R14~R21
电阻330
8
R6~R13
3、电子时钟的软件设计
本次课程设计程序用C语言编写
源程序:
/*--------------------------------
电子时钟
-------------------------------*/
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineBIT(x)(1<<(x))
#definesegP0
#definedigP2
ucharnum=0,SEC=0,MIN=0,HOUR=12,key;
ucharcodetab[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,0xbf};
voiddelayms(uintz)//毫秒级的延时程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*********************************
函数名:
keyscan()
功能描述:
矩阵键盘扫描(线反转法)
入口参数:
无
返回值:
key为0-15键码,返回88为错误码。
*********************************/
voidkeyscan()//矩阵键盘扫描函数
{
ucharx,y;
P3=0xf0;
if(P3!
=0xf0)
{
delayms(10);
if(P3!
=0xf0)
{
x=P3&0xf0;
P3=0x0f;
y=P3&0x0f;
key=x|y;
while(P3!
=0x0f);
switch(key)
{
case0xbe:
key=5;HOUR++;
break;
case0x7e:
key=1;SEC++;
break;
case0xbd:
key=6;if(HOUR>0)HOUR--;
break;
case0x7d:
key=2;if(SEC>0)SEC--;
break;
case0x7b:
key=3;MIN++;
break;
case0x77:
key=4;if(MIN>0)MIN--;
break;
default:
key=88;
break;
}
}
}
}
voiddisplay(void)
{
uchari;
for(i=0;i<8;i++)
{
dig=dig&~BIT(i);
//dig|=BIT(i);|=逻辑或
switch(i)
{
case0:
seg=tab[SEC%10];
break;
case1:
seg=tab[SEC/10];
break;
case2:
seg=tab[10];
break;
case3:
seg=tab[MIN%10];
break;
case4:
seg=tab[MIN/10];
break;
case5:
seg=tab[10];
break;
case6:
seg=tab[HOUR%10];
break;
case7:
seg=tab[HOUR/10];
break;
default:
break;
}
delayms(3);
//dig&=~BIT(i);
dig|=BIT(i);
}
}
voidinit()//初始化函数,做初始化工作的
{
dig=0xFF;//位选
seg=0x00;//段选
TMOD|=0X01;//定时器0方式1
IE|=0X82;//EA=1,T0=1
TH0=(65536-50000)/256;//THO=60
TL0=(65536-50000)%256;//TL0=00
TCON|=0X10;//定时器控制寄存器TR0=1
}
voidmain()
{
init();//初始化子程序
while
(1)
{
keyscan();
if(SEC==60)
{
SEC=0;
MIN++;
}
if(MIN==60)
{
MIN=0;
HOUR++;
}
if(HOUR==24)
{
HOUR=0;
}
display();
}
}
voidT0_time()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
SEC++;
if(SEC==60)
{
SEC=0;
MIN++;
if(MIN==60)
{
MIN=0;
HOUR++;
if(HOUR==24)
{
HOUR=0;
}
}
}
}
}
电子时钟程序流程图:
四、课程设计总结
这次单片机课程设计使我对电子信息技术应用有了更加深刻的认识。
跟之前的理论设计,软件仿真不同,这次课程设计要求作出能实现具体功能的实物。
课程设计过程中,我们遇到了不少问题,在老师与同学的帮助下,最终达到了想要的结果。
通过这次课程设计,我了解了单片机的更多功能,只要程序得当,能用它实现很多实用功能,能让一些工作变得更加简单。
同时,我也深刻体会到深入实践的重要性,理论要发挥价值,必须掌握将它转化成实际应用的途径与方法。
五、指导教师评语
成绩指导教师签名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 时钟 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)