📄 clock.lst
字号:
C51 COMPILER V7.50 CLOCK 08/29/2006 18:59:09 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: C:\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 /* 功能描述: 数码管时钟显示,需将J2跳线帽插上 */
8 /* 但是要拔去LCD12864和LCD1602! */
9 /* */
10 /* http://www.mculover.net */
11 /* http://www.mculover.net/bbs */
12 /* */
13 /* */
14 /* 湘灵电子工作室 版权所有 */
15 /* 2006-03-20 */
16 /************************************************************************************/
17 #include<reg51.h>
18
19 #define _TH0_TL0_ (65536 - 50000)
20 #define HI (_TH0_TL0_ / 256) //给高8位赋值
21 #define LO (_TH0_TL0_ % 256) //给低8位赋值
22 #define M 20 //(1000/50)1秒要50个中断的累计
23
24 sbit P2_0 = P2 ^ 0;
25 sbit P2_1 = P2 ^ 1;
26 sbit P2_2 = P2 ^ 2;
27 sbit P2_3 = P2 ^ 3;
28 sbit P2_4 = P2 ^ 4;
29 sbit P2_5 = P2 ^ 5;
30 sbit P2_6 = P2 ^ 6;
31 sbit P2_7 = P2 ^ 7;
32
33 unsigned char hour = 12, min = 20, sec = 20; //初始化时分秒的值
34 unsigned char SEG_TAB[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
35
36 /*********************************************************************************************/
37 void Delay(unsigned char a)//延时程序
38 {
39 1 unsigned char j;
40 1 while(--a != 0)
41 1 {
42 2 for (j = 0; j < 125; j++);
43 2 }
44 1 }
45
46 /*********************************************************************************************/
47 void Disp(void)//数码管显示
48 {
49 1 P2_7 = 0; //第一个数码管显示时的十位
50 1 P0 = SEG_TAB[ hour / 10 ];
51 1 Delay(4);
52 1 P2_7 = 1;
53 1
54 1 P2_6 = 0;//第2个数码管显示时的个位
55 1 P0 = SEG_TAB[ hour % 10 ];
C51 COMPILER V7.50 CLOCK 08/29/2006 18:59:09 PAGE 2
56 1 Delay(4);
57 1 P2_6 = 1;
58 1
59 1 P2_4 = 0;//第4个数码管显示分的十位
60 1 P0 = SEG_TAB[ min / 10 ];
61 1 Delay(4);
62 1 P2_4 = 1;
63 1
64 1 P2_3 = 0;//第5个数码管显示分的个位
65 1 P0 =SEG_TAB[ min % 10 ];
66 1 Delay(4);
67 1 P2_3 = 1;
68 1
69 1 P2_1 = 0;//第7个数码管显示秒的十位
70 1 P0 = SEG_TAB[ sec / 10 ];
71 1 Delay(4);
72 1 P2_1 = 1;
73 1
74 1 P2_0 = 0;//第8个数码管显示秒的各位。
75 1 P0 = SEG_TAB[ sec % 10 ];
76 1 Delay(4);
77 1 P2_0 = 1;
78 1 }
79
80 /********************************************************************************************/
81 void IsrTimer0(void) interrupt 1 using 1 //定时器0中断服务程序
82 {
83 1 static unsigned char count = 0; //定义静态变量count
84 1
85 1 TR0 = 0; //以下调整出栈入栈的时间误差
86 1 TL0 += (_TH0_TL0_ + 9) % 256;
87 1 TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
88 1 TR0 = 1;
89 1
90 1 count++;
91 1 if(count == M)//1秒种时间到
92 1 {
93 2 count = 0;
94 2 sec++;
95 2 if(sec == 60)//1分钟时间到
96 2 {
97 3 min++;
98 3 sec = 0;
99 3 if(min == 60)//1小时时间到
100 3 {
101 4 hour++;
102 4 min = 0;
103 4 if(hour == 24)//24小时时间到
104 4 {
105 5 hour = 0;
106 5 min = 0;
107 5 sec = 0;
108 5 }
109 4 }
110 3 }
111 2 }//if
112 1 }
113
114 /******************************************************************************************/
115 void Timer0Init(void) //初始化定时器0程序
116 {
117 1 TMOD = 0x01; //设置模式1 定时器0 工作方式0
C51 COMPILER V7.50 CLOCK 08/29/2006 18:59:09 PAGE 3
118 1
119 1 TH0 = HI; //给TH0,TL0赋初始值
120 1 TL0 = LO;
121 1
122 1 TR0 = 1; //启动定时器0
123 1 ET0 = 1; //定时器中断开
124 1 EA = 1; //总中断开
125 1 }
126
127 /******************************************************************************************/
128 void main(void)//主函数
129 {
130 1 Timer0Init();//初始化定时器0
131 1
132 1 while(1)
133 1 {
134 2 Disp();//显示时间
135 2 }
136 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 200 ----
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 + -