📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 11/29/2007 11:23:34 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************
2 * *
3 * File: Main.c *
4 * *
5 * Author: 王 *
6 * *
7 * Compiler: KEIL C51 V7.01
8 * *
9 * Description: CPU=AT89C2051 11.0592M HZ *
10 * *
11 * Date: 2007/03/28 *
12 * *
13 *****************************************************************************
14 * *
15 * Version | Date | Description *
16 * --------+----------+----------------------------------------------------- *
17 * V1.0 | 07.03.28 | 原始文本 *
18 * *
19 ****************************************************************************/
20 #define Main_GLOBALS
21 #include "includes.h"
22 bit FlagS;
23
24 /****************************************************************************
25 * *
26 * Function: main *
27 * *
28 ****************************************************************************/
29 void main(void)
30 {
31 1 Uint32 FREQ_Buffer;
32 1 Uchar buffer;
33 1 Uint16 TimerBuf;
34 1 char i;
35 1 init();
36 1 while(1)
37 1 {
38 2 if(TestOver==0)
39 2 {
40 3 TR0=0;
41 3 TR1=0;
42 3 TestOver=1;
43 3 ten=1;
44 3 hud=0;
45 3 Test=1;
46 3 TL1=0;
47 3 TH1=0;
48 3 TH0=TH0_VAL;
49 3 TL0=TL0_VAL;
50 3 Over_CNT=0;
51 3 uc1s=19;//测试频率50ms
52 3 TR0=1;
53 3 TR1=1;
54 3 }
55 2 if(T1sOver)
C51 COMPILER V7.50 MAIN 11/29/2007 11:23:34 PAGE 2
56 2 {
57 3 TR0=0;
58 3 TR1=0;
59 3 T1sOver=0;
60 3 if(Test)
61 3 {
62 4 Test=0;
63 4 if(Over_CNT==0)
64 4 {
65 5 TimerBuf=TL1+TH1*256;
66 5 if(TimerBuf<31)//FREQ<200k/s
67 5 {
68 6 SingleFRE=1;//置实频标志
69 6 Buf=1;
70 6 ten=0; //实频切换
71 6 hud=0;
72 6 }
73 5 else if((TimerBuf>30)&&TimerBuf<70)//FREQ<200k/s
74 5 {
75 6 Buf=16;
76 6 ten=0; //切换为16倍分频
77 6 hud=1;
78 6 }
79 5 else
80 5 {
81 6 SingleFRE=0;
82 6 Buf=256;
83 6 ten=1; //切换为100倍分频
84 6 hud=0;
85 6 }
86 5 }
87 4 else
88 4 {
89 5 SingleFRE=0;
90 5 Buf=256;
91 5 ten=1; //切换为100倍分频
92 5 hud=0;
93 5 }
94 4 TL1=0;
95 4 TH1=0;
96 4 TH0=TH0_VAL;
97 4 TL0=TL0_VAL;
98 4 Over_CNT=0;
99 4 uc1s=0; //测试频率1s
100 4 TR0=1;
101 4 TR1=1;
102 4 }
103 3 else
104 3 {
105 4 TestOver=0;
106 4 FREQ=Over_CNT*65536+TH1*256+TL1;
107 4 FREQ=FREQ*Buf;
108 4 }
109 3 Over_CNT=0;
110 3
111 3 }
112 2 if(FREQ!=Old_FREQ) //频率有变化显示
113 2 {
114 3 Old_FREQ=FREQ;
115 3 FREQ_Buffer=FREQ;
116 3 for(i=0;i<8;i++)
117 3 {
C51 COMPILER V7.50 MAIN 11/29/2007 11:23:34 PAGE 3
118 4 Led[i]=FREQ_Buffer%10;
119 4 FREQ_Buffer=FREQ_Buffer/10;
120 4 }
121 3 if(FREQ>99999)
122 3 {
123 4 Led_KHZ=ON;
124 4 Led_HZ=OFF;
125 4 buffer=FREQ/100000;
126 4 if(buffer>9) //FREQ>=1M
127 4 {
128 5 for(i=0;i<5;i++)
129 5 {
130 6 Led[i]=Led[i+2];
131 6 }
132 5 Led[1]=Led[1]|0x80;
133 5 }
134 4 else //FREQ<1m && FREQ>=100000
135 4 {
136 5 for(i=0;i<5;i++)
137 5 {
138 6 Led[i]=Led[i+1];
139 6 }
140 5 Led[2]=Led[2]|0x80;
141 5 }
142 4 }
143 3 else
144 3 {
145 4 Led_KHZ=OFF;
146 4 Led_HZ=ON;
147 4 }
148 3 send_byte(CMD_RESET);//清除显示(消引)
149 3 delay10ms(1);
150 3 UnDis_Flag=0;
151 3 for(i=4;i>=0;i--)
152 3 {
153 4 if(Led[i]!=0)
154 4 {
155 5 DisNum(i,Led[i]);
156 5 UnDis_Flag=1;
157 5 }
158 4 else
159 4 {
160 5 if(UnDis_Flag==1)
161 5 {
162 6 DisNum(i,0);
163 6 }
164 5 }
165 4
166 4 }
167 3 if(FREQ==0)
168 3 {
169 4
170 4
171 4
172 4
173 4 DisNum(0,1);
174 4
175 4
176 4
177 4 }
178 3
179 3 }//END if(FREQ!=Old_FREQ)
C51 COMPILER V7.50 MAIN 11/29/2007 11:23:34 PAGE 4
180 2 } //END while(1)
181 1 } //END main
182 /****************************************************************************
183 * *
184 * Function: void init(void) *
185 * *
186 * Input: - *
187 * Output: - *
188 * *
189 * Description: 程序初始化 *
190 * *
191 ****************************************************************************/
192 void init(void)
193 {
194 1 Uchar j;
195 1 Uint16 Timer;
196 1 EA=0;
197 1 P1=0xff;
198 1 P3=0xff;
199 1 ten=1;
200 1 hud=0;
201 1 Old_FREQ=0;
202 1 FREQ=0;
203 1 Over_CNT=0;
204 1 for (tmr=0;tmr<0x2000;tmr++); // 上电延时DisPlay
205 1 send_byte(CMD_RESET); // 复位HD7279A
206 1 send_byte(CMD_TEST); // 测试指令
207 1 for (j=0;j<3;j++) // 延时约3秒
208 1 {
209 2 delay10ms(100);
210 2 }
211 1 send_byte(CMD_RESET); //清除显示
212 1 DisNum(0,0);
213 1 TMOD=0x51; //T0 timer 50ms,T1 计数。
214 1
215 1 // TMOD=0x21; //T0 timer 50ms,T1 定时。
216 1 Timer=65536-Fosc*T/12;
217 1 TH0_VAL=Timer/256;
218 1 TL0_VAL=Timer%256;
219 1 uc1s=0;
220 1 T1sOver=0;
221 1 TH0=TH0_VAL;
222 1 TL0=TL0_VAL;
223 1 TH1=0;
224 1 TL1=0;
225 1 ET0=1;
226 1 ET1=1;
227 1
228 1 TestOver=0;
229 1 Test=0;
230 1 SingleFRE=0;
231 1 EA=1;
232 1 }
233 /****************************************************************************
234 * *
235 * Function: void Timer0(void) interrupt 1 *
236 * *
237 * Input: - *
238 * Output: - *
239 * *
240 * Description: 50ms中断 *
241 * *
C51 COMPILER V7.50 MAIN 11/29/2007 11:23:34 PAGE 5
242 ****************************************************************************/
243 void Timer0(void) interrupt 1
244 {
245 1 TR0=0;
246 1 TH0=TH0_VAL;
247 1 TL0=TL0_VAL;
248 1 TR0=1;
249 1 uc1s++;
250 1 if(uc1s>19)
251 1 {
252 2 TR0=0;
253 2 TR1=0;
254 2 T1sOver=1;
255 2 }
256 1 }
257 /****************************************************************************
258 * *
259 * Function: void Count1(void) interrupt 3 *
260 * *
261 * Input: - *
262 * Output: - *
263 * *
264 * Description: T1 溢出中断 *
265 * *
266 ****************************************************************************/
267 void Count1(void) interrupt 3
268 {
269 1 Over_CNT++;
270 1 }
271 void EXTINT1(void) interrupt 2
272 {
273 1 TR1=0;
274 1 if(FlagS==1)
275 1 {
276 2 if(TH1!=0||TL0>20)
277 2 {
278 3 Over_CNT++;
279 3 }
280 2 }
281 1 else
282 1 {
283 2 TH1=0;
284 2 TL1=0;
285 2 }
286 1 TR1=1;
287 1 FlagS=!FlagS;
288 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 849 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 35 6
IDATA SIZE = ---- ----
BIT SIZE = 6 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -