📄 vfd.lst
字号:
C51 COMPILER V5.02, VFD 11/07/00 14:15:37 PAGE 1
DOS C51 COMPILER V5.02, COMPILATION OF MODULE VFD
OBJECT MODULE PLACED IN VFD.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE VFD.C CD SB DB OE OR PL(69) PW(132) ROM(LARGE) SMALL OT(6,SPEED)
stmt level source
1 #include<reg52.h>
2 #include<panel.h>
3 #include<use.h>
4
5 void WR_PANEL(BYTE);
6 void LIGHT_ALL(void);
7 BYTE RD_PANEL(void);
8 BYTE GET_KEY_VAL(void);
9 BIT LEAP_YEAR(void); // if this year /4 =0
10 BIT LEAP_MONTH(void); // if this month only 30 days
11 void DAY_INC(void); // month and year inc process
12 BYTE HEXTOBCD(BYTE); //translate hex to bcd
13 void COMPARE_TIME(BYTE *); //compare now_time and (alarm_begin&alarm_end)
14 void FILL_ALL_PIX(void);
15 void FILL_BCD_DISP(BYTE *,BYTE *,BYTE *);
16 void KEY_PROCESS(void);
17 void DELAY_TIME(BYTE);
18 void DELAY_100uS(void);
19 BYTE GET_IR_KEY(void);
20 void ALARM_MAKE(void);
21 void timer0(void) interrupt 1 using 1
22 { TR0=0;
23 1 TH0=0XD8;
24 1 TL0=0XF0;
25 1 TR0=1;
26 1 mSECOND++;
27 1 if(mSECOND==50) COUNT2=0;
28 1 if((mSECOND<40)||(mSECOND>60))// SOUND OF ALARM 0mS ON;40mS OFF;60mS ON
29 1 COUNT1=1;
30 1 if((mSECOND>40)&&(mSECOND<60))
31 1 COUNT1=0;
32 1 if(mSECOND>=100)
33 1 { SECOND_INC=1;
34 2 COUNT2=1;
35 2 COUNT3++;
36 2 mSECOND=0;
37 2 };
38 1 }
39 void IR0(void) interrupt 0 using 2
40 {
41 1 EX0=0;//do not allow extern interrupt0
42 1 bKEY=GET_IR_KEY();
43 1 EX0=1;
44 1 }
45 main()
46 {
47 1 BYTE TEMP,TEMPA;
48 1 SP=0x70;
49 1 IR = 1;
50 1 ALARM_OUT1=0;
51 1 ALARM_OUT2=0;
52 1 TR0=0;
53 1 TMOD=0X01;
54 1 TH0=0XD8;
55 1 TL0=0XF0;
56 1 TR0=1;
57 1 PT0=1;//Priority Interrupt timer0
58 1 ET0=1;
59 1 EX0=1;
60 1 IT0=1;
C51 COMPILER V5.02, VFD 11/07/00 14:15:37 PAGE 2
61 1 EA=1;//ENABLE TIMER0
62 1 TEMP=12;
63 1 while(TEMP--)
64 1 DISP_ARRAY[TEMP-1]=0;
65 1 TEMP=15;
66 1 while(TEMP--)
67 1 { TEMPA=3;
68 2 while(TEMPA--)
69 2 ALARM_ARRAY[TEMP-1][TEMPA-1]=0;
70 2 };
71 1 KEY_ARRAY[0]=0;
72 1 KEY_ARRAY[1]=0;
73 1 KEY_ARRAY[2]=0;
74 1 //INITIAL VFD_PANEL AND LET IT ALL DARKEN
75 1 VFD_STB=1;
76 1 VFD_STB=0;
77 1 WR_PANEL(VFD_DISP_MODE);
78 1 VFD_STB=1;
79 1 VFD_STB=0;
80 1 WR_PANEL(VFD_CTRL_MODE);
81 1 VFD_STB=1;
82 1 LIGHT_ALL();
83 1 // WHILE LOOP
84 1 while(1)
85 1 {
86 2 if(SECOND_INC)
87 2 { SECOND_INC=0;
88 3 SECOND++;
89 3 if(SECOND>=60)
90 3 {
91 4 SECOND=0;
92 4 MINUTE++;
93 4 if(MINUTE>=60)
94 4 {
95 5 MINUTE=0;
96 5 HOUR++;
97 5 if(HOUR>=24)
98 5 {
99 6 HOUR=0;
100 6 DAY++;
101 6 switch(DAY)
102 6 {
103 7 case 29:
104 7 if(MONTH==2)
105 7 if(!LEAP_YEAR())
106 7 { DAY=0;
107 8 DAY_INC();
108 8 };
109 7 break;
110 7 case 30:
111 7 if(MONTH==2) DAY_INC();
112 7 break;
113 7 case 31:
114 7 if(LEAP_MONTH()) DAY_INC();
115 7 break;
116 7 case 32:
117 7 DAY_INC();
118 7 break;
119 7 };// END OF SWITCH
120 6 };// hour>=24
121 5 };// minute>=60
122 4 };// second>=60
123 3 };//(second_inc) END OF TIME PROCESS
124 2 SECOND1=HEXTOBCD(SECOND);
125 2 MINUTE1=HEXTOBCD(MINUTE);
126 2 HOUR1=HEXTOBCD(HOUR);
127 2 DAY1=HEXTOBCD(DAY);
C51 COMPILER V5.02, VFD 11/07/00 14:15:37 PAGE 3
128 2 MONTH1=HEXTOBCD(MONTH);
129 2 YEAR1=HEXTOBCD(YEAR);
130 2 //BEGIN ALARM TIME PROCESS
131 2 if(ALARM_ENABLE)
132 2 { TEMP=8;
133 3 do
134 3 { ALARM_ON_OFF=ALARM_ON_OFF_1;
135 4 TEMP=0;
136 4 ALARM_ON_OFF>>=TEMP;
137 4 if(ALARM_ON_OFF^0)
138 4 COMPARE_TIME(&ALARM_ARRAY[TEMP][0]);
139 4
140 4 }while(TEMPA--);
141 3 TEMP=8;
142 3 do
143 3 { ALARM_ON_OFF=ALARM_ON_OFF_2;
144 4 TEMP=0;
145 4 ALARM_ON_OFF>>=TEMP;
146 4 if(ALARM_ON_OFF^0)
147 4 COMPARE_TIME(&ALARM_ARRAY[TEMP+8][0]);
148 4
149 4 }while(TEMPA--);
150 3 ALARM_MAKE();
151 3 };//END OF PROCESS ALARM
152 2 KEY_PROCESS();
153 2 FILL_ALL_PIX();
154 2 LIGHT_ALL();
155 2 };//END OF WHILE(1)
156 1 }//END OF MAIN
157
158
159
160 void WR_PANEL(BYTE TEMP1)
161 { BYTE TEMP4;
162 1 VFD_CLK=1;
163 1 for(TEMP4=0;TEMP4<8;TEMP4++)
164 1 { VFD_CLK=0;
165 2 if(TEMP1&0X01)
166 2 VFD_DATA=1;
167 2 else
168 2 VFD_DATA=0;
169 2 TEMP1>>=1;
170 2 VFD_CLK=1;
171 2 };
172 1 }
173 BYTE RD_PANEL(void)
174 {
175 1 BIT I;
176 1 BYTE TEMP5;
177 1 BYTE TEMP4,TEMP6;
178 1 VFD_CLK=1;
179 1 VFD_DATA=1;
180 1 TEMP5=0;
181 1 for(TEMP4=0;TEMP4<8;TEMP4++)
182 1 { VFD_CLK=0;
183 2 for(TEMP6=0;TEMP6<6;TEMP6++)
184 2 I=VFD_DATA;
185 2 if(I)
186 2 { TEMP6=0X80;
187 3 TEMP6>>=(7-TEMP4);
188 3 TEMP5|=TEMP6;
189 3 };
190 2 VFD_CLK=1;
191 2 };
192 1 return(TEMP5);
193 1 }
194 void LIGHT_ALL(void)
C51 COMPILER V5.02, VFD 11/07/00 14:15:37 PAGE 4
195 { BYTE I;
196 1 VFD_STB=1;
197 1 VFD_STB=0;
198 1 WR_PANEL(0X40);
199 1 VFD_STB=1;
200 1 VFD_STB=0;
201 1 WR_PANEL(0XC0);
202 1 for(I=0;I<12;I++) WR_PANEL(DISP_ARRAY[I]);
203 1 VFD_STB=1;
204 1 }
205 BIT LEAP_YEAR(void)
206 { BIT T;
207 1 switch(YEAR)
208 1 { case 0:
209 2 case 4:
210 2 case 8:
211 2 T=1;
212 2 break;
213 2 default:
214 2 T=0;
215 2 break;
216 2 };
217 1 return(T);
218 1 }
219 BIT LEAP_MONTH(void) //if this month has 30 day
220 { BIT T;
221 1 switch(MONTH)
222 1 { case 4:
223 2 case 6:
224 2 case 9:
225 2 case 11:
226 2 T=1;
227 2 break;
228 2 default:
229 2 T=0;
230 2 break;
231 2 };
232 1 return(T);
233 1 }
234 void DAY_INC(void)
235 { DAY=0;
236 1 MONTH++;
237 1 if(MONTH==0x12)
238 1 { MONTH=0;
239 2 YEAR++;
240 2 if(YEAR==10)
241 2 YEAR=0;
242 2 } ;
243 1 }
244 BYTE HEXTOBCD(BYTE TEMP7)
245 { BYTE E,F;
246 1 E=TEMP7;
247 1 F=E/10;
248 1 E%=10;
249 1 F<<=4;
250 1 F|=E;
251 1 TEMP7=F;
252 1 return(TEMP7);
253 1 }
254 void COMPARE_TIME(BYTE *CP1)
255 { if(HOUR1==*CP1)
256 1 if(MINUTE1==*(CP1++))
257 1 ALARM_ON=1;
258 1 if(HOUR1==*(CP1++))
259 1 if(MINUTE1==*(CP1++))
260 1 ALARM_ON=0;
261 1 }
C51 COMPILER V5.02, VFD 11/07/00 14:15:37 PAGE 5
262 void FILL_BCD_DISP(BYTE *I,BYTE *J,BYTE *K)
263 { BYTE TEMP;
264 1 TEMP=*I;
265 1 TEMP&=0X0F;
266 1 DISP_ARRAY[VFD_N1_ADDR]=DISP_CHARACTER[TEMP];
267 1 TEMP=*I;
268 1 TEMP>>=4;
269 1 TEMP&=0X0F;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -