功能说明:
本节是通过 C 语言编写的简单时钟程序,时钟硬件结构与前边 23.1 节介绍的基本相同,
主要由单片机、LED 数码管和按键开关所组成。稍有区别的地方是使用了数码管 U2 的小数
点为秒点,每秒闪烁一次。
程序清单
/*---------------------------------------------------------------*/
/* 文件名称:SZ01.c� */
/* 程序功能:单片机时钟 */
/*****************************************************************/
1 #include <AT89X51.H> / *包含器件配置文件 */
2 #define uchar unsigned char
3 #define uint unsigned int
4 char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,
5 0x92,0x82,0xF8,0x80,0x90,};/ *0~9 的数码管段码 */
6 uchar hour=0,min=0,sec=0; /* 时、分、秒单元清零 */
7 uchar deda=0; /* 5mS 计数单元清零 */
8 bit d_05s=0; /* 0.5 秒标志 */
9 uchar set=0; /* 模式设定标志 */
10 uchar m=0;
11 uchar flag=0; /* RAM 掉电标志 */
12 void delay(uint k); /* 延时函数 */
13 void conv(); /* 走时单元转换 */
14 void disp(); /* 走时时间显示函数 */
15
16 /*------------------------走时函数部分 ----------------------*/
17
18 /* 定时器 T0 5mS 初始化 */
19 void init_timer()
20 {
21 TMOD=0x01; /* 设置定时器 T0 工作模式为 1 */
22 TH0=-(4800/256); /* 加载高字节计数初值 */
23 TL0=-(4800%256); /* 加载低字节计数初值 */
24 IE=0x82; /* 启用定时器 T0 中断产生 */
25 TR0=1; /* 启动定时器 T0 开始计时 */
26 }
27
28 /*---------------------------------*/
29 /*5mS 定时中断服务函数*/
30 void T0_srv(void) interrupt 1
31 {
32 TH0=-(4800/256); /* 重置定时器计时初始值 */
33 TL0=-(4800%256);
34 deda++; /* 计数单元 deda 值递增 */