基于单片机的数字时钟设计Word文件下载.docx
《基于单片机的数字时钟设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字时钟设计Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
![基于单片机的数字时钟设计Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/24/f2bba973-8d42-4b28-b899-7d7e024070e1/f2bba973-8d42-4b28-b899-7d7e024070e11.gif)
原理图说明:
KEY1至KEY6为矩阵键盘,分别对应秒、分、时的加减,DIGILED1和DIGI2为四位数码管,SW—RET为复位键,DIG1至DIG8分别控制一位数字的显示。
USB为输入端,U2提供工作电压,U1为单片机STC89C52芯片。
VCC外接电源,GND接地,SWITCH1为跳帽连接处。
元器件清单如下表所示:
电子时钟元件清单表
原件名称
数量
焊接位置
电源部分
USB座
1
USB
USB线
双排针
(2)
CONN1
跳帽
2
104电容0.1uF
6
C2,5,6,7,8,9,11
LED灯
D1
电阻2K
R2
最小系统部分
40针座
U1
STC89C52
晶振12MHz
Y1
电容20pF
C3,C4
复位键
SW_RST
电阻10K
R1
蜂鸣器
LS1+
三极管9015
9
Q1~Q9
电阻330
R3
键盘显示、通信部分
16针座
U2
MAX232
单排针(5)
UART
按键
4
KEY1~KEY4
单排针(3)
SWITCH1
4位LED
DIGILED1,2
电阻4.7K
8
R14~R21
R6~R13
3、电子时钟的软件设计
本次课程设计程序用C语言编写
源程序:
/*--------------------------------
电子时钟
-------------------------------*/
#include<
reg52.h>
#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>
y--);
}
/*********************************
函数名:
keyscan()
功能描述:
矩阵键盘扫描(线反转法)
入口参数:
无
返回值:
key为0-15键码,返回88为错误码。
*********************************/
voidkeyscan()//矩阵键盘扫描函数
ucharx,y;
P3=0xf0;
if(P3!
=0xf0)
{
delayms(10);
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++;
case0xbd:
key=6;
if(HOUR>
0)HOUR--;
case0x7d:
key=2;
if(SEC>
0)SEC--;
case0x7b:
key=3;
MIN++;
case0x77:
key=4;
if(MIN>
0)MIN--;
default:
key=88;
}
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];
case2:
seg=tab[10];
case3:
seg=tab[MIN%10];
case4:
seg=tab[MIN/10];
case5:
case6:
seg=tab[HOUR%10];
case7:
seg=tab[HOUR/10];
default:
}
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
num++;
if(num==20)
num=0;
SEC++;
if(MIN==60)
{
MIN=0;
HOUR++;
if(HOUR==24)
{
HOUR=0;
}
电子时钟程序流程图:
四、课程设计总结
这次单片机课程设计使我对电子信息技术应用有了更加深刻的认识。
跟之前的理论设计,软件仿真不同,这次课程设计要求作出能实现具体功能的实物。
课程设计过程中,我们遇到了不少问题,在老师与同学的帮助下,最终达到了想要的结果。
通过这次课程设计,我了解了单片机的更多功能,只要程序得当,能用它实现很多实用功能,能让一些工作变得更加简单。
同时,我也深刻体会到深入实践的重要性,理论要发挥价值,必须掌握将它转化成实际应用的途径与方法。
五、指导教师评语
成绩指导教师签名