📄 clock.lst
字号:
C51 COMPILER V7.06 CLOCK 11/05/2008 23:54:06 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock.c BROWSE INCDIR(C:\EZST\EasyStudy51\ES51-II\Target\INC\) DEBUG OBJECT
-EXTEND
stmt level source
1
2
3
4 #include "at89x52.h"
5 #include "ES51_II.h"
6 #include "es51_ii_lib.h"
7
8
9
10 unsigned char Hour; //
11 unsigned char Mint; //
12 unsigned char Sec; //
13
14 // 设置标志位
15 bit bSetFlag;
16 // 秒进位标志位
17 bit bCarryFlag;
18
19 // 设置指示灯,进入设置时,LED2亮,
20 #define SETSHOW LED1
21
22 // T2初始化程序, 50ms定时
23 void Init_T2(void)
24 {
25 1 RCAP2H = 0x3c;
26 1 RCAP2L = 0xb0;
27 1 TH2 = RCAP2H; //工作方式1,timer2
28 1 TL2 = RCAP2L;
29 1
30 1 T2MOD = 0x00;
31 1 ET2 = 1;
32 1 TR2 = 1;
33 1
34 1 }
35
36 // 数码管显示缓冲区刷新函数
37 void SMG_ReDisplay(void)
38 {
39 1 SMG_BUFF[0] = SMG_TABLE[Hour/10];
40 1 SMG_BUFF[1] = SMG_TABLE_DP[Hour%10];
41 1 SMG_BUFF[2] = SMG_TABLE[Mint/10];
42 1 SMG_BUFF[3] = SMG_TABLE[Mint%10];
43 1 }
44
45 // 60秒定时到,分钟加1,并刷新数码管显示
46 void ChangeTime(void)
47 {
48 1 static bit bSecFlag = TRUE;
49 1 bit bAlarmFlag = FALSE;
50 1
51 1 bCarryFlag = FALSE;
52 1
53 1 bSecFlag = !bSecFlag; // 用于小数点闪烁
54 1
C51 COMPILER V7.06 CLOCK 11/05/2008 23:54:06 PAGE 2
55 1 if( ++Sec == 60 ) // 进位,分钟
56 1 {
57 2 Sec = 0;
58 2
59 2 if( ++Mint == 60 ) // 进位,小时
60 2 {
61 3 Mint = 0;
62 3 bAlarmFlag = TRUE; // 小时进位,需要整点报时
63 3 if( ++Hour == 24 ) // 进位,24小时
64 3 Hour = 0;
65 3 }
66 2 }
67 1
68 1 if( bSecFlag == TRUE ) // 以下代码实现第二位数码管小时点的闪烁
69 1 SMG_ReDisplay(); // 显示小数点
70 1 else
71 1 { // 不显示小数点
72 2 SMG_BUFF[0] = SMG_TABLE[Hour/10];
73 2 SMG_BUFF[1] = SMG_TABLE[Hour%10];
74 2 SMG_BUFF[2] = SMG_TABLE[Mint/10];
75 2 SMG_BUFF[3] = SMG_TABLE[Mint%10];
76 2 }
77 1 if( bAlarmFlag == TRUE ) // 判断是否需要整点报时
78 1 {
79 2 bAlarmFlag = FALSE;
80 2 Buzzer(1,0); // 蜂鸣器发一声长声
81 2 }
82 1 }
83
84
85 // 设置电子钟时间函数
86 void SetClock(void)
87 {
88 1
89 1 SETSHOW = 0; // 设置指示灯亮
90 1 ET2 = 0;
91 1 TR2 = 0;
92 1
93 1 KeyVal = 0x0f; // 丢弃键值,
94 1
95 1
96 1 while( bSetFlag == TRUE ) // 等待按设置键以完成设置
97 1 {
98 2 switch( KeyVal ) // 根据键值的不同进行不同的操作
99 2 {
100 3 case KEY1VAL: // 设置:小时减1
101 3 if( --Hour == 255 )
102 3 Hour = 23;
103 3 SMG_ReDisplay();
104 3 KeyVal = 0x0f;
105 3 break;
106 3 case KEY2VAL: // 设置小时加1
107 3 if( ++Hour == 24 )
108 3 Hour = 0;
109 3 SMG_BUFF[0] = SMG_TABLE[Hour/10];
110 3 SMG_BUFF[1] = SMG_TABLE_DP[Hour%10];
111 3 //nowtime = Hour*1.0+Mint*0.01;// 计算当前时间
112 3 //SMGprintf("%f",nowtime);// 刷新数码管显示
113 3 KeyVal = 0x0f;
114 3 break;
115 3 case KEY3VAL: // 设置分钟减1
116 3 if( --Mint == 255)
C51 COMPILER V7.06 CLOCK 11/05/2008 23:54:06 PAGE 3
117 3 {
118 4 Mint = 59;
119 4 if( --Hour == 255)
120 4 Hour = 23;
121 4 }
122 3 SMG_ReDisplay();
123 3 KeyVal = 0x0f;
124 3 break;
125 3 case KEY4VAL: // 设置分钟加1
126 3 if( ++Mint == 60)
127 3 {
128 4 Mint = 0;
129 4 if( ++Hour == 24)
130 4 Hour = 0;
131 4 }
132 3 SMG_ReDisplay();
133 3 KeyVal = 0x0f;
134 3 break;
135 3 default: // 不操作
136 3 break;
137 3 }
138 2 }
139 1 SETSHOW = 1; // 设置指示灯灭,设置完成
140 1 Sec = 0;
141 1 ET2 = 1;
142 1 TR2 = 1;
143 1 }
144
145 // INT0键中断程序
146 void INT0_KEY(void) interrupt IE0_VECTOR using 0
147 {
148 1 unsigned char i=250;
149 1 while(i--);
150 1 bSetFlag = !bSetFlag;
151 1 }
152
153 // T2定时溢出中断
154 // 每次定时50ms,对溢出次数进行计数学,每溢出20次为1秒
155 void INT_T2(void) interrupt TF2_VECTOR using 0
156 {
157 1 static unsigned char Count_50ms = 0;
158 1 TF2 = 0;
159 1 if( ++ Count_50ms >= 20 ) // 50ms计数加1;
160 1 {
161 2 Count_50ms = 0;
162 2 bCarryFlag = TRUE;
163 2 }
164 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 363 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -