📄 clock.lst
字号:
C51 COMPILER V7.50 CLOCK 03/15/2006 15:57:08 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE clock.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************/
2 /* 程序名:数码管显示的时钟代码 */
3 /* */
4 /* 晶振:12.0 M CPU型号:AT89S52 */
5 /* */
6 /* */
7 /* 功能描述: 数码管时钟显示 */
8 /* */
9 /* http://www.mculover.net */
10 /* http://www.mculover.net/bbs */
11 /* */
12 /* */
13 /* 湘灵电子工作室 版权所有 */
14 /* 2006-02-20 */
15 /************************************************************************************/
16 #include<reg51.h>
17
18 #define _TH0_TL0_ (65536 - 50000)
19 #define HI (_TH0_TL0_ / 256) //给高8位赋值
20 #define LO (_TH0_TL0_ % 256) //给低8位赋值
21 #define M 20 //(1000/50)1秒要50个中断的累计
22
23 sbit P2_0 = P2 ^ 0;
24 sbit P2_1 = P2 ^ 1;
25 sbit P2_2 = P2 ^ 2;
26 sbit P2_3 = P2 ^ 3;
27 sbit P2_4 = P2 ^ 4;
28 sbit P2_5 = P2 ^ 5;
29 sbit P2_6 = P2 ^ 6;
30 sbit P2_7 = P2 ^ 7;
31
32 unsigned char hour = 12, min = 0, sec = 0; //初始化时分秒的值
33 unsigned char SEG_TAB[] = {0x41, 0xf5, 0x29, 0x31, 0x95, 0x13, 0x03, 0x75, 0x01, 0x11};//0-9数字
34
35 /*********************************************************************************************/
36 void Delay(unsigned char a)//延时程序
37 {
38 1 unsigned char j;
39 1 while(a-- != 0)
40 1 {
41 2 for (j = 0; j < 100; j++);
42 2 }
43 1 }
44
45 /*********************************************************************************************/
46 void Disp(void)//数码管显示
47 {
48 1 P2_7 = 0; //第一个数码管显示时的十位
49 1 P0 = SEG_TAB[ hour / 10 ];
50 1 Delay(4);
51 1 P2_7 = 1;
52 1
53 1 P2_4 = 0;//第2个数码管显示时的个位
54 1 P0 = SEG_TAB[ hour % 10 ];
55 1 Delay(4);
C51 COMPILER V7.50 CLOCK 03/15/2006 15:57:08 PAGE 2
56 1 P2_4 = 1;
57 1
58 1 P2_5 = 0;//第4个数码管显示分的十位
59 1 P0 = SEG_TAB[ min / 10 ];
60 1 Delay(4);
61 1 P2_5 = 1;
62 1
63 1 P2_3 = 0;//第5个数码管显示分的个位
64 1 P0 =SEG_TAB[ min % 10 ];
65 1 Delay(4);
66 1 P2_3 = 1;
67 1
68 1 P2_2 = 0;//第7个数码管显示秒的十位
69 1 P0 = SEG_TAB[ sec / 10 ];
70 1 Delay(4);
71 1 P2_2 = 1;
72 1
73 1 P2_1 = 0;//第8个数码管显示秒的各位。
74 1 P0 = SEG_TAB[ sec % 10 ];
75 1 Delay(4);
76 1 P2_1 = 1;
77 1 }
78
79 /********************************************************************************************/
80 void IsrTimer0(void) interrupt 1 using 1 //定时器0中断服务程序
81 {
82 1 static unsigned char count = 0; //定义静态变量count
83 1
84 1 TR0 = 0; //以下调整出栈入栈的时间误差
85 1 TL0 += (_TH0_TL0_ + 9) % 256;
86 1 TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
87 1 TR0 = 1;
88 1
89 1 count++;
90 1 if(count == M)//1秒种时间到
91 1 {
92 2 count = 0;
93 2 sec++;
94 2 if(sec == 60)//1分钟时间到
95 2 {
96 3 min++;
97 3 sec = 0;
98 3 if(min == 60)//1小时时间到
99 3 {
100 4 hour++;
101 4 min = 0;
102 4 if(hour == 24)//24小时时间到
103 4 {
104 5 hour = 0;
105 5 min = 0;
106 5 sec = 0;
107 5 }
108 4 }
109 3 }
110 2 }//if
111 1 }
112
113 /******************************************************************************************/
114 void Timer0Init(void) //初始化定时器0程序
115 {
116 1 TMOD = 0x01; //设置模式1 定时器0 工作方式0
117 1
C51 COMPILER V7.50 CLOCK 03/15/2006 15:57:08 PAGE 3
118 1 TH0 = HI; //给TH0,TL0赋初始值
119 1 TL0 = LO;
120 1
121 1 TR0 = 1; //启动定时器0
122 1 ET0 = 1; //定时器中断开
123 1 EA = 1; //总中断开
124 1 }
125
126 /******************************************************************************************/
127 void main(void)//主函数
128 {
129 1 Timer0Init();//初始化定时器0
130 1
131 1 while(1)
132 1 {
133 2 Disp();//显示时间
134 2 }
135 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 202 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -