📄 timer.lst
字号:
C51 COMPILER V7.06 TIMER 08/04/2008 00:24:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN Timer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Timer.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**********************************************
2 * File: Timer.C
3 * Description: Timer Function
4 * Created Date: 2007-10-01
5 * Last Modified: 2007-10-01
6 * Author: Jeffrey - Schicksal@126.com
7 * Notes: None
8 **********************************************/
9 //#include "Atmel/AT89X51.h"
10 #include "SST/SST89x5x4.H"
11 #include "INTRINS.H"
12 #include "timer.h"
13 #include "MAX7219.h"
14 #include "DS1620.h"
15 #include "keys.h"
16
17 #define TH0_VALUE 0x06
18 #define TL0_VALUE 0x00
19
20 unsigned int timer_tick;
21 unsigned int timer_tick_500ms;
22
23 /**********************************************
24 * Function: TIMER_Init
25 * Input Variables: None
26 * Return Variables: None
27 * Usage: T0 Initialization
28 *********************************************/
29 void TIMER_Init(void)
30 {
31 1
32 1 ET0 = 0; // 关闭T0的中断
33 1 TMOD = 0x00; // T0工作在模式0
34 1 TCON = 0x00; // 暂时未启动T0
35 1 TL0 = TL0_VALUE;
36 1 TH0 = TH0_VALUE; // 产生2ms中断 |24 MHz 晶振
37 1 ET0 = 1; // 打开T2的中断
38 1
39 1 timer_tick = 0;
40 1 timer_tick_500ms = 0;
41 1 }
42
43 /**********************************************
44 * Function: timer0_interrupt
45 * Input Variables: None
46 * Return Variables: None
47 * Usage: TIMER_Interrupt Service Routine
48 *********************************************/
49 void timer0_interrupt(void) interrupt 5 using 1
50 {
51 1 EA = 0; // 关全局中断
52 1 TF0 = 0; // 清中断标志
53 1
54 1 timer_tick++; // 2ms
55 1
C51 COMPILER V7.06 TIMER 08/04/2008 00:24:37 PAGE 2
56 1 if ( timer_tick == 250 ) // 1s = 2ms X 500
57 1 {
58 2 timer_tick_500ms += 1; // 秒计数增1
59 2 timer_tick = 0; // 2ms计数清零
60 2 }
61 1
62 1 TL0 = TL0_VALUE; // T0初值装载
63 1 TH0 = TH0_VALUE; // 产生2ms中断 |24 MHz 晶振
64 1 EA = 1; // 开中断
65 1 }
66
67 /**********************************************
68 * Function: TIMER_Start
69 * Input Variables: None
70 * Return Variables: None
71 * Usage: Start T0
72 *********************************************/
73 void TIMER_Start()
74 {
75 1 TR0 = 1; // 启动T0
76 1 }
77
78
79 volatile unsigned char time[4]={12,0,0,0};
80 volatile unsigned char alarm[2]={7,0};
81
82 extern volatile unsigned char flag;
83 extern volatile unsigned char alarm_flag;
84 extern volatile unsigned char change_timeflag;
85 extern volatile unsigned char change_adjustflag;
86
87 /**********************************************
88 *Function: void Display_Time()
89 * Input Variables: None
90 * Return Variables: None
91 * Usage: Display Time
92 *********************************************/
93 void Display_Time()
94 {
95 1 unsigned char data_dp[6] ;
96 1 unsigned char i;
97 1 if(timer_tick_500ms>0)
98 1 {
99 2
100 2 time[3]++;
101 2
102 2 if (time[1]==0xff)
103 2 {
104 3 time[1]=59;
105 3 }
106 2
107 2 if (time[0]==0xff)
108 2 {
109 3 time[0]=23;
110 3 }
111 2
112 2 if (time[3]>1)
113 2 {
114 3 time[3]=0;
115 3 time[2]++;
116 3 }
117 2
C51 COMPILER V7.06 TIMER 08/04/2008 00:24:37 PAGE 3
118 2 if (time[2]>=60)
119 2 {
120 3 time[2]-=60;
121 3 time[1]++;
122 3 }
123 2 if (time[1]>=60)
124 2 {
125 3 time[1]-=60;
126 3 time[0]++;
127 3 }
128 2 if (time[0]>=24)
129 2 time[0]-=24;
130 2
131 2 if (change_adjustflag==0) // 显示时钟
132 2 {
133 3 for (i=0;i<4;i+=2)
134 3 {
135 4 data_dp[i]=time[i/2]/10;
136 4 data_dp[i+1]=time[i/2]%10;
137 4 }
138 3 data_dp[2]=data_dp[2]|(1<<7);
139 3 data_dp[3]=data_dp[3]|(1<<7);
140 3 if (change_timeflag==0)
141 3 {
142 4 if (time[2]%2==1)
143 4 {
144 5 data_dp[2]=data_dp[2]-0x80;
145 5 data_dp[3]=data_dp[3]-0x80;
146 5 }
147 4 }
148 3 else
149 3 {
150 4 if (change_timeflag==1)
151 4 {
152 5 // 正在修改小时
153 5 if (time[3]==0)
154 5 {
155 6 data_dp[0]=0x0f;
156 6 data_dp[1]=0x0f;
157 6 }
158 5 }
159 4 else
160 4 {
161 5 // 正在修改分钟
162 5 if (time[3]==0)
163 5 {
164 6 data_dp[2]=0x8f;
165 6 data_dp[3]=0x8f;
166 6 }
167 5 }
168 4 }
169 3 }
170 2 else // 修改闹表
171 2 {
172 3 if (alarm_flag==0) // 没有闹表
173 3 {
174 4 for (i=0;i<4;i++)
175 4 data_dp[i]=0x0a;
176 4 if (time[2]%2==0)
177 4 {
178 5 data_dp[2]=data_dp[2]|(1<<7);
179 5 data_dp[3]=data_dp[3]|(1<<7);
C51 COMPILER V7.06 TIMER 08/04/2008 00:24:37 PAGE 4
180 5 }
181 4 }
182 3 else // 有闹表
183 3 {
184 4 for (i=0;i<4;i+=2)
185 4 {
186 5 data_dp[i]=alarm[i/2]/10;
187 5 data_dp[i+1]=alarm[i/2]%10;
188 5 }
189 4 data_dp[2]=data_dp[2]|(1<<7);
190 4 data_dp[3]=data_dp[3]|(1<<7);
191 4 if (change_timeflag==0)
192 4 {
193 5 if (time[2]%2==1)
194 5 {
195 6 data_dp[2]=data_dp[2]-0x80;
196 6 data_dp[3]=data_dp[3]-0x80;
197 6 }
198 5 }
199 4 else
200 4 {
201 5 if (change_timeflag==1)
202 5 {
203 6 // 正在修改小时
204 6 if (time[3]==0)
205 6 {
206 7 data_dp[0]=0x0f;
207 7 data_dp[1]=0x0f;
208 7 }
209 6 }
210 5 else
211 5 {
212 6 // 正在修改分钟
213 6 if (time[3]==0)
214 6 {
215 7 data_dp[2]=0x8f;
216 7 data_dp[3]=0x8f;
217 7 }
218 6 }
219 5 }
220 4 }
221 3 }
222 2 for (i=0;i<4;i++)
223 2 write_7219(i+1,data_dp[i]);
224 2
225 2 timer_tick_500ms=0; // 清500ms计数
226 2 }
227 1 }
228
229
230 /**********************************************
231 *Function: void Check_Alarm()
232 * Input Variables: None
233 * Return Variables: None
234 * Usage: Display Time
235 *********************************************/
236 void Check_Alarm()
237 {
238 1 if ((time[0]==alarm[0]) && (time[1]==alarm[1]) && (alarm_flag==1) && (change_adjustflag==0))
239 1 {
240 2 SetBuzzer(0x00); // 闹铃响
241 2 }
C51 COMPILER V7.06 TIMER 08/04/2008 00:24:37 PAGE 5
242 1 }
243
244
245
246
247
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 457 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 7
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 + -