📄 display.lst
字号:
C51 COMPILER V7.50 DISPLAY 07/07/2007 16:38:12 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE display.c OPTIMIZE(0,SPEED) DEBUG OBJECTEXTEND
line level source
1
2
3 #include<reg764.h>
4 #include<intrins.h>
5 #define dissda P1_7
6 #define disscl P1_6
7 unsigned char str_table[10]={0x5F,0x06,0x3D,0x2F,0x66,0x6B,0x7B,0x0E,0x7F,0x6F};
8
9 unsigned char error;
10 unsigned char turn;
11 unsigned char x1_4;
12 //unsigned char timer0=107;
13 unsigned char cell;
14 unsigned char hour;
15 unsigned char min;
16 unsigned char sec;
17 unsigned char timer1=200;
18
19 struct store
20 {
21 unsigned char power_gross[8];
22 unsigned char year_month_date[8];
23 unsigned char ammeter_number[8];
24 }ddsd22j={"00700903","20060928","19830904"};
25
26 void delay5()
27 {
28 1 _nop_();
29 1 _nop_();
30 1 _nop_();
31 1 _nop_();
32 1 _nop_();
33 1 }
34
35 void stop3566()
36 {
37 1 disscl=1;
38 1 delay5();
39 1 dissda=1;
40 1 delay5();
41 1 disscl=0;
42 1 delay5();
43 1 }
44 void start3566()
45 {
46 1 disscl=1;
47 1 delay5();
48 1 dissda=1;
49 1 delay5();
50 1 dissda=0;
51 1 delay5();
52 1 disscl=0;
53 1 delay5();
54 1 }
55
C51 COMPILER V7.50 DISPLAY 07/07/2007 16:38:12 PAGE 2
56 void write3566(unsigned char disdata)
57 {
58 1 unsigned char i;
59 1 unsigned char disdata0;
60 1 for (i=0;i<8;i++)
61 1 {
62 2 disdata0=disdata;
63 2 dissda=0;
64 2 if((disdata0&0x80)!=0)
65 2 dissda=1;
66 2 delay5();
67 2 disscl=1;
68 2 delay5();
69 2 disscl=0;
70 2 delay5();
71 2 disdata=disdata<<1;
72 2 }
73 1 disscl=1;
74 1 delay5();
75 1 disscl=0;
76 1 delay5();
77 1 }
78
79
80 void dis_inter() interrupt 3
81 {
82 1 timer1=timer1-1;
83 1 if(timer1>=1)
84 1 {
85 2 ;
86 2 }
87 1 else
88 1 {
89 2 // turn=turn+1;
90 2 // if(turn>=0x05)
91 2 // turn=0x00;
92 2 sec=sec+1;
93 2 timer1=200;
94 2 }
95 1 TH1=0x3C;
96 1 TL1=0xB0;
97 1 }
98
99
100 void latent(unsigned char null)
101 {
102 1 write3566(null);
103 1 }
104
105 void dis_number()
106 {
107 1 unsigned char num;
108 1 if(x1_4 != 0x00)
109 1 write3566(0x5F | 0x80);//display "0" and "OFF"
110 1 else
111 1 write3566(0x5F);//display "0"
112 1 num=turn;
113 1 num=num & 0x0F;
114 1 if(num>=0x05)
115 1 write3566(0x5F);
116 1 else
117 1 write3566(str_table[num]);
C51 COMPILER V7.50 DISPLAY 07/07/2007 16:38:12 PAGE 3
118 1
119 1 }
120
121 void dis_power_gross()
122 {
123 1 unsigned char k;
124 1 unsigned char mid1;
125 1 unsigned char comp=0;
126 1
127 1 dis_number();
128 1 for(k=0;k<8;k++)
129 1 {
130 2 if(ddsd22j.power_gross[k]==0x30 && comp==k)
131 2 {
132 3 if((k==0 && x1_4 !=0x00)||(k==7 && cell != 0x00)) //latent the unused "0"
133 3 latent(0x00 | 0x80);
134 3 else
135 3 latent(0x00);
136 3 comp=comp+1;
137 3 }
138 2 else
139 2 {
140 3
141 3 mid1=(ddsd22j.power_gross[k] & 0x0F);//latent the high 4 bits
142 3 if((k==0 && x1_4 !=0x00) || k==5 || (k==7 && cell != 0x00))
143 3 write3566(str_table[mid1] | 0x80);
144 3 else
145 3 write3566(str_table[mid1]);
146 3 }
147 2 }
148 1 }
149 void dis_year_month_date()
150 {
151 1 unsigned char mid1;
152 1 unsigned char k;
153 1
154 1 dis_number();
155 1 for(k=0;k<8;k++)
156 1 {
157 2 mid1=ddsd22j.year_month_date[k] & 0x0F;//latent the high 4 bits
158 2 if((k==0 && x1_4 != 0x00) || (k==7 && cell != 0x00))
159 2 write3566(str_table[mid1] | 0x80);
160 2 else if((k==3) || (k==5))
161 2 write3566(str_table[mid1] | 0x80);
162 2 else
163 2 write3566(str_table[mid1]);
164 2 }
165 1 }
166
167 void dis_time()
168 {
169 1 unsigned char h;
170 1 unsigned char mid1;
171 1 if(sec==0x0A || sec==0x1A || sec==0x2A || sec==0x3A || sec==0x4A || sec==0x5A)
172 1 {
173 2 sec=sec & 0xF0;
174 2 sec=sec+0x10;
175 2 }
176 1 if(sec>=0x60)
177 1 {
178 2 sec=0x00;
179 2 min=min+1;
C51 COMPILER V7.50 DISPLAY 07/07/2007 16:38:12 PAGE 4
180 2 if(min==0x0A || min==0x1A || min==0x2A || min==0x3A || min==0x4A || min==0x5A)
181 2 {
182 3 min=min & 0xF0;
183 3 min=min+0x10;
184 3 }
185 2 if(min>=0x60)
186 2 {
187 3 min=0x00;
188 3 hour=hour+1;
189 3 if(hour==0x0A || hour==0x1A)
190 3 {
191 4 hour=hour & 0xF0;
192 4 hour=hour+0x10;
193 4 }
194 3 if(hour>=0x24)
195 3 hour=0x00;
196 3 }
197 2 }
198 1
199 1
200 1 dis_number();
201 1 if(x1_4 !=0x00)
202 1 latent(0x00 | 0x80);
203 1 else
204 1 latent(0x00);
205 1 latent(0x00);
206 1 mid1=hour;
207 1 h=hour;
208 1 mid1=mid1>>4;
209 1 write3566(str_table[mid1 & 0x0F]);
210 1 write3566(str_table[h & 0x0F] | 0x80);
211 1 mid1=min;
212 1 h=min;
213 1 mid1=mid1>>4;
214 1 write3566(str_table[mid1 & 0x0F]);
215 1 write3566(str_table[(h & 0x0F)] | 0x80);
216 1 mid1=sec;
217 1 h=sec;
218 1 mid1=mid1>>4;
219 1 write3566(str_table[mid1 & 0x0F]);
220 1 if(cell != 0x00)
221 1 write3566(str_table[h & 0x0F] | 0x80 );
222 1 else
223 1 write3566(str_table[h & 0x0F]);
224 1
225 1 }
226 void dis_ammeter_number()
227 {
228 1 unsigned char k;
229 1 unsigned char mid1;
230 1
231 1 dis_number();
232 1 for(k=0;k<8;k++)
233 1 {
234 2 mid1=(ddsd22j.ammeter_number[k] & 0x0F);//latent the high 4 bits
235 2 if((k==0 && x1_4 !=0x00) ||(k==7 && cell !=0x00))
236 2 write3566(str_table[mid1] | 0x80);
237 2 else
238 2 write3566(str_table[mid1]);
239 2 }
240 1
241 1 }
C51 COMPILER V7.50 DISPLAY 07/07/2007 16:38:12 PAGE 5
242
243 void dis_error()
244 {
245 1 unsigned char k;
246 1 unsigned char mid1;
247 1 unsigned char err1=error;
248 1 unsigned char err2=error;
249 1 err1=err1>>4;
250 1 err1=err1 & 0x0F;
251 1 err2=err2 & 0x0F;
252 1 mid1=turn;
253 1 if(x1_4 != 0x00)
254 1 write3566(0x5F | 0x80);//display the first NO. and "OFF"
255 1 else
256 1 write3566(0x5F);
257 1 mid1=mid1 & 0x0F;
258 1 write3566(str_table[mid1] | 0x80);//display the second and NO.
259 1 for(k=0;k<8;k++)
260 1 {
261 2 if((k==0 && x1_4 !=0x00)||(k==2))
262 2 latent(0x00 | 0x80);
263 2 else if(k==6)
264 2 write3566(str_table[err1]);
265 2 else if(k==7 && cell!=0x00)
266 2 write3566(str_table[err2] | 0x80);
267 2 else if(k==7 && cell==0x00)
268 2 write3566(str_table[err2]);
269 2 else
270 2 latent(0x00);
271 2 }
272 1
273 1
274 1 }
275
276 void display()
277 {
278 1
279 1 start3566(); //condition of start
280 1
281 1 write3566(0x7C);// address of controller: 01111100
282 1 write3566(0xC8);//1:4 duo ji,1/3 pian zhi 11001000
283 1 write3566(0x80);//display from s0 10000000
284 1 write3566(0xE0);//A2/A1/A0:000 11100000
285 1 write3566(0x70);//colse lcd-fre. 01110000
286 1
287 1 switch(turn)
288 1 {
289 2 case 00: dis_power_gross();break;
290 2 case 01: dis_year_month_date();break;
291 2 case 02: dis_time();break;
292 2 case 03: dis_ammeter_number();break;
293 2 case 04: dis_error();break;
294 2 default : dis_power_gross();break;
295 2 }
296 1
297 1 stop3566(); //condition of stop
298 1 }
299
300
301 void main()
302 {
303 1 TMOD=0x01;
C51 COMPILER V7.50 DISPLAY 07/07/2007 16:38:12 PAGE 6
304 1 TH1=0x3c;
305 1 TL1=0x7b0;
306 1 IEN0=0x88;
307 1 TCON=0x40;
308 1 timer1=200;
309 1 turn=0x02;
310 1 error=0x00;
311 1 x1_4=0x01;
312 1 cell=0x01;
313 1 hour=0x23;
314 1 min =0x59;
315 1 sec =0x50;
316 1 while(1)
317 1 display();
318 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1114 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 60 ----
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 + -