📄 clock_main.lst
字号:
C51 COMPILER V8.02 CLOCK_MAIN 01/05/2008 15:47:41 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK_MAIN
OBJECT MODULE PLACED IN clock_main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil_C51\C51\BIN\C51.EXE clock_main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X51.H>
2 #include "CLOCK_MAIN.h"
3
4
5 void delay_ms(int xms)
6 {
7 1 uchar j;
8 1 int i;
9 1 for(i=xms;i>0;i--)
10 1 for(j=250;j>0;j--);
11 1
12 1 }
13 void delay(void)
14 {
15 1 uchar i,j;
16 1 for(i=5;i>0;i--)
17 1 for(j=248;j>0;j--);
18 1 }
19
20
21 void main(void)
22 {
23 1 TMOD=0x12; //设置工作方式
24 1 TH0=0x06; // 设置定时初值
25 1 TL0=0x06;
26 1 TH1=0XFF/50000;
27 1 TL1=0XFF%50000;
28 1 TR0=1; // 开启定时器0
29 1 TR1=0; // 关闭定时器1
30 1 ET0=1; // 充许定时中断
31 1 ET1=1;
32 1 EA=1;
33 1 flag2=0;
34 1
35 1
36 1 while(1)
37 1 {
38 2
39 2 KeyBord ( );
40 2 keymenu( );
41 2 alarm_s( );
42 2 ring();
43 2 test=!test;
44 2
45 2
46 2 } //end while 1
47 1 }//end main
48
49 void Time0(void) interrupt 1 using 0
50 {
51 1 EA=0;
52 1 mstcnt++;
53 1 if(mstcnt==8){
54 2 mstcnt=0;
55 2 P2=dispbitcode_ca[dispbitcnt];
C51 COMPILER V8.02 CLOCK_MAIN 01/05/2008 15:47:41 PAGE 2
56 2 P0=dispcode_cc[dispbuf[dispbitcnt]];
57 2 dispbitcnt++;
58 2 if(dispbitcnt==6){
59 3 dispbitcnt=0;
60 3 }
61 2 }
62 1
63 1 tcnt++;
64 1 if(tcnt==4000){
65 2 tcnt=0;
66 2 second++;
67 2 if(second==60){
68 3 second=0;
69 3 minite++;
70 3 if(minite==60){
71 4 minite=0;
72 4 hour++;
73 4 if(hour==24) {
74 5 hour=0;
75 5 p_month_day=p_month_day+1;
76 5 } // end if (hour)
77 4 } //end if (minite)
78 3 }//end if(second )
79 2
80 2 if(flag1==1)
81 2 {
82 3 dispbuf[0]=second%10;
83 3 dispbuf[1]=second/10;
84 3 dispbuf[2]=minite%10;
85 3 dispbuf[3]=minite/10;
86 3 dispbuf[4]=hour%10;
87 3 dispbuf[5]=hour/10;
88 3 }
89 2 }//end if (tcont)
90 1 EA=1;
91 1 }
92
93
94
95 void Time1(void) interrupt 3 using 0
96 {
97 1
98 1 test=!test;
99 1
100 1 if((flag0==0x80)&&(tcnt<2000))
101 1 {
102 2 TH1=0xfe; // 重装定时器频率为1600hz
103 2 TL1=0xc7;
104 2 TR1=1;
105 2 speak=!speak;
106 2 }
107 1 // else TR1=0;
108 1
109 1 if((flag0==0x40)&&(tcnt<1000))
110 1
111 1 {
112 2 TH1=0xfd; // 重装定时器频率为800hz
113 2 TL1=0x8f;
114 2 TR1=1;
115 2 speak=!speak;
116 2 }
117 1 // else TR1=0;
C51 COMPILER V8.02 CLOCK_MAIN 01/05/2008 15:47:41 PAGE 3
118 1
119 1 if (flag2)
120 1 {
121 2 TH1=0XFF/50000;
122 2 TL1=0XFF%50000;
123 2 TR1=1; // 重起定时器1
124 2 if (second%2) //
125 2 { if (flag0==1 ){
126 4 flag0=0;
127 4 undispbuf[0]=dispbuf[0] ; // 进行数据保护
128 4 undispbuf[1]=dispbuf[1] ;
129 4 undispbuf[2]=dispbuf[2] ;
130 4 undispbuf[3]=dispbuf[3] ;
131 4 undispbuf[4]=dispbuf[4] ;
132 4 undispbuf[5]=dispbuf[5] ;}
133 3
134 3 if (flag2==0x01)
135 3
136 3 dispbuf[0]=16 ; // 显示灭(查表的)
137 3 if ( flag2==0x02)
138 3 dispbuf[1]=16 ;
139 3 if (flag2==0x04)
140 3 dispbuf[2]=16 ;
141 3 if (flag2==0x08)
142 3 dispbuf[3]=16 ;
143 3 if (flag2==0x10)
144 3 dispbuf[4]=16 ;
145 3 if (flag2==0x20)
146 3 dispbuf[5]=16 ;
147 3 }
148 2 else // 恢复显示
149 2 {
150 3 if(flag0==0){
151 4 flag0=1;
152 4 dispbuf[0]=undispbuf[0] ;
153 4 dispbuf[1]=undispbuf[1] ;
154 4 dispbuf[2]=undispbuf[2] ;
155 4 dispbuf[3]=undispbuf[3] ;
156 4 dispbuf[4]=undispbuf[4] ;
157 4 dispbuf[5]=undispbuf[5] ; }
158 3
159 3 }
160 2 }
161 1
162 1
163 1
164 1
165 1
166 1 }
167
168 /*****************************************************************
169 //
170 //
171 *****************************************************************/
172
173
174
175 uchar KeyBord (void)
176 {
177 1
178 1 uchar key ;
179 1 key =P1&0xf;
C51 COMPILER V8.02 CLOCK_MAIN 01/05/2008 15:47:41 PAGE 4
180 1 if(key) // 检测到按键
181 1 { delay(); // 去抖动延时
182 2 P1=P1&0xf;
183 2 key=P1;
184 2 if (key==0x0f)
185 2 {
186 3 ligth=0; // 输出指示
187 3 return 0;
188 3 }
189 2 else
190 2 {
191 3 ligth=1; // 输出指示
192 3 return key;
193 3 }
194 2 }
195 1 return 0;
196 1
197 1 }
198
199
200 void keymenu(void )
201 {
202 1
203 1 uchar state=0x01;
204 1 key=KeyBord();
205 1 // 主功能键
206 1
207 1 if (key==KEY1)
208 1 {
209 2 flag1=0; //停止时间显示
210 2 /*
211 2 // 刷新数据区
212 2
213 2 dispbuf[0]=0;
214 2 dispbuf[1]=0;
215 2 dispbuf[2]=0;
216 2 dispbuf[3]=0;
217 2 dispbuf[4]=0;
218 2 dispbuf[5]=0;
219 2 flag2=0x3f; //计数时间显示闪烁等待开始
220 2 TR1=1;
221 2 key=KeyBord();
222 2 while (key!=KEY1)
223 2 {
224 2 key=KeyBord();
225 2 if (key==KEY2)
226 2 {
227 2 flag2=0; // 停止闪烁
228 2 flag3=1 ; //开始时间计时标志
229 2 }
230 2 if (key==KEY3){
231 2 if (flag3==1)
232 2 flag3=0; }
233 2 if (key==KEY4)
234 2 {
235 2 if (flag3==0)
236 2 {
237 2 // 刷新数据区
238 2 dispbuf[0]=0;
239 2 dispbuf[1]=0;
240 2 dispbuf[2]=0;
241 2 dispbuf[3]=0;
C51 COMPILER V8.02 CLOCK_MAIN 01/05/2008 15:47:41 PAGE 5
242 2 dispbuf[4]=0;
243 2 dispbuf[5]=0;
244 2 }
245 2 }
246 2 delay_ms(100) ;
247 2 // key=KeyBord();
248 2 } // enf while (key!=key1) 结束计时模块
249 2
250 2 */
251 2 flag3=0;
252 2 flag2=0x01;
253 2 TR1=1;
254 2 dispbuf[0]=alarm[0][1]%10; // 刷新数据区
255 2 dispbuf[1]=alarm[0][1]/10;
256 2 dispbuf[2]=alarm[0][0]%10;
257 2 dispbuf[3]=alarm[0][0]/10;
258 2 //dispbuf[4]=al_state&&0x01;
259 2 dispbuf[5]=0;
260 2 if (al_state&&0x01)
261 2 dispbuf[4]=10;
262 2 else
263 2 dispbuf[4]=11;
264 2
265 2 key=KeyBord();
266 2 while( key==KEY1)
267 2 key=KeyBord(); // 等待按间释放
268 2 while(key!=KEY1)
269 2 {
270 3
271 3 key=KeyBord();
272 3 if (key==KEY2)
273 3 {
274 4 if (flag2==1){
275 5 alarm[num][1]=alarm[num][1]+1;
276 5 dispbuf[0]=dispbuf[0]+1;
277 5 }
278 4 if (flag2==2){
279 5 alarm[num][1]=alarm[num][1]+10;
280 5 dispbuf[1]=dispbuf[1]+1;
281 5 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -