?? display.lst
字號(hào):
C51 COMPILER V6.11.4C, DISPLAY 04/01/103 02:34:47 PAGE 1
QCW(0x00002D1A)
WIN32 C51 COMPILER V6.11.4C, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN d:\solar_charge_controller\scca\display.obj
COMPILER INVOKED BY: C51.EXE D:\SOLAR_CHARGE_CONTROLLER\SCCA\DISPLAY.C OBJECT(D:
-\SOLAR_CHARGE_CONTROLLER\SCCA\DISPLAY.OBJ) PIN(D:\FSI\INC) NOAM PR(
-D:\SOLAR_CHARGE_CONTROLLER\SCCA\DISPLAY.LST) CD SB OE(1) SM FP(NOFL
-OAT) PW(80)
stmt level source
1 //-----------------
2 //change value that display in lcd
3 //-----------------
4 #include <string.h>
5 #include <ABSACC.H>
6 #include <stdio.h>
7 #include <INTRINS.h>
8 #include <stdlib.h>
9 #include <AT89X52.H>
10
11 #include "charger.h"
12 #include "lcdp.h"
13
14 //----------------------------------------------------------------
-----
15 //keyboard
16 static unsigned char idata pos=0,len=0;
17 static unsigned int idata pushlen=0,uplen=0;
18 unsigned int bdata tlong=0,t50ms=0;
19 static unsigned char bdata kstate=0,mstate=0;
20 sbit waitover=kstate^0;
21 sbit change=kstate^1;
22 sbit key=kstate^2;
23 sbit kflag=kstate^3;//key buffer enmpty while kflag=0
24 //menu
25 static unsigned char idata no;
26 sbit mfirst=mstate^0;
27 sbit madin=mstate^1;
28 sbit mhis=mstate^2;
29 sbit msel=mstate^3;//select date
30 sbit mset=mstate^4;
31 //
32 static unsigned char idata dstr[21];
33 static unsigned char idata str[10];
34
35 static void itoa(unsigned i,unsigned int ad);
36 static void keyrst(void);
37 //
38 //--------------------------------------
39 //change lcd display number
40 static void onchange(unsigned char *chs)
41 {
42 1 len=(unsigned char)strlen(chs)-1;
WARNING 451 IN LINE 42 OF display.c : Assignment between pointers to char signe
-d and unsigned
43 1 //restet cursor in second line
44 1 if(kflag)
45 1 {
46 2 if(key)//over 2s islong push,0x39='9'
47 2 {
48 3 if(chs[pos]>0x39||chs[pos]<0x30)//long push at no number pos
-ition
49 3 {
50 4 keyrst();
51 4 return;
52 4 }
53 3 change=!change;
54 3 if(change)WC_LCD(SCR_TTT);
55 3 else WC_LCD(SCR_TTF); //change cursor state
56 3 delay(1000);
57 3 }
58 2 else //short push
59 2 {
60 3 if(change)
61 3 {
62 4 if(chs[pos]<0x39)chs[pos]++;
63 4 else chs[pos]=0x30;//'0'
64 4 if(pos&1)
65 4 {
66 5 WD_LCD(chs[pos-1]);
67 5 WD_LCD(chs[pos]);
68 5 WC_LCD(SCR_ACL);
69 5 }//acc add 1 while write two time
70 4 else
71 4 {
72 5 WD_LCD(chs[pos]);
73 5 WD_LCD(chs[pos+1]);
74 5 WC_LCD(SCR_ACL);
75 5 }
76 4 }
77 3 else
78 3 if(pos<len)
79 3 {
80 4 if(pos&1)WC_LCD(SCR_ACR);
81 4 pos++;
82 4 WC_LCD(SCR_TTF);
83 4 }
84 3 else
85 3 {
86 4 pos=0;
87 4 WC_LCD(0x90);
88 4 }
89 3 }
90 2 kflag=0;
91 2 }
92 1 }
93 //
94 //----------------------------
95 //key state and buffer reset
96 static void keyrst(void)
97 {
98 1 EX1=1;
99 1 EX0=1;
100 1 ET0=0;
101 1 TR0=0;
102 1
103 1 kstate=0;
104 1 mstate=0;
105 1 pos=0;
106 1 no=0;
107 1 waitover=0;
108 1 WC_LCD(SCR_TFF);
109 1 WC_LCD(0x90);
110 1 clear();
111 1 }
112
113 /*
114 Using to read input key
115 Configure Timer 0
116 - Mode = 2
117 - Interrupt = ENABLED
118 - Clock Source = INTERNAL
119 - Enable Gating Control = DISABLED
120 */
121 //-----------------------------------------
122 //int0,t0,int1,t1,ser;int0 to 12887,int1 to key
123
124
125 void keyint(void)interrupt IE1_VECTOR //start key operation
126 {
127 1 EX0=0;//close 12887 second interrupt
128 1 EX1=0;//close externd keyint
129 1 //init_timer0();//enable readkey
130 1 TMOD &= 0XF0;
131 1 TMOD |= 0X1; //mode 1 max is 65.536ms on 12M
132 1 TL0 = 0X58; //on 6M,100ms(3CB0);
133 1 TH0 = 0X9E; //on 6M,50ms(9E58);
134 1 ET0 = 1; //on 6M,50ms(D8F0);
135 1 TF0 = 0;
136 1 TR0 = 1;
137 1 //display a/d input
138 1 madin=1;
139 1 }
140 //---------------------------------------------
141 //timer0 interrupt,scan key input
142 void readkey(void) interrupt TF0_VECTOR
143 {
144 1 //Timer reload
145 1 TR0=0;
146 1 TL0 = 0X58; //on 6M,100ms(3CB0);
147 1 TH0 = 0X9E; //on 6M,50ms(9E58);
148 1 TR0=1;
149 1 //Timer counter
150 1
151 1 if(((t50ms++)%20)==0)tlong++;
152 1
153 1 if(!kflag)
154 1 {
155 2 if(P3_3)
156 2 {
157 3 uplen++;
158 3 if(pushlen>1)
159 3 {
160 4 key=0;
161 4 kflag=1;
162 4 uplen=0;
163 4 }
164 3 else if(uplen>400)
165 3 {
166 4 waitover=1;
167 4 }
168 3 pushlen=0;
169 3 }
170 2 else
171 2 {
172 3 pushlen++;
173 3 uplen=0;
174 3 if(pushlen>40)
175 3 {
176 4 key=1;
177 4 kflag=1;
178 4 pushlen=0;
179 4 }
180 3 }
181 2 }
182 1
183 1 }
184
185 //
186 //----------------------------------------------
187 #define xdcdy adinhz[8]
188 #define lllssj adinhz[9]
189 //-------------------------------------------------
190 //general after second interrupt
191 //display battery volatage and timer
192 static void firstscr(void)
193 {
194 1 // if(_testbit_(mfirst))
195 1 // {
196 1 itoa(0,adin[8]);
197 1 strcpy(dstr,xdcdy);
WARNING 451 IN LINE 197 OF display.c : Assignment between pointers to char sign
-ed and unsigned
WARNING 451 IN LINE 197 OF display.c : Assignment between pointers to char sign
-ed and unsigned
198 1 strcat(dstr,str);
WARNING 451 IN LINE 198 OF display.c : Assignment between pointers to char sign
-ed and unsigned
WARNING 451 IN LINE 198 OF display.c : Assignment between pointers to char sign
-ed and unsigned
199 1 text(0x80,dstr);
200 1
201 1 itoa(4,0);
202 1 text(0x90,dstr);
203 1 // }
204 1 }
205 //----------------------------------------------
206 //int0,12887 second interrupt,display date and time,
207 //display volatage of storage battery
208
209 void int0second(void) interrupt IE0_VECTOR
210 {
211 1 /*
212 1 str[0]=P128879;
213 1 str[1]=P128878;
214 1 str[2]=P128877;
215 1 str[3]=P128874;
216 1 str[4]=P128872;
217 1 str[5]=P128870;
218 1 str[6]=P128876;
219 1 str[0]=P12887c;
220 1
221 1 today.date[0]=str[0];
222 1 today.date[1]=str[1];
223 1 today.date[2]=str[2];
224 1
225 1 tlong++;
226 1 mfirst=1;
227 1 */
228 1 }
229 //
230 //-----------------------------------------------------------
231 //change unsigned int to ascii,add unit,change to date format
232 static void itoa(unsigned i,unsigned int ad)
233 {
234 1 unsigned char data t;
235 1 unsigned char data k;
236 1
237 1 dstr[0]='\0';
238 1 if(i<4)
239 1 {//change int to string
240 2 t=ad%0xA;
241 2 ad /=0xA;
242 2
243 2 sprintf(str,"%u.%bu\0",(unsigned char)ad,t);
WARNING 451 IN LINE 243 OF display.c : Assignment between pointers to char sign
-ed and unsigned
244 2 if(i==3)
245 2 {
246 3 k=strlen(str);
WARNING 451 IN LINE 246 OF display.c : Assignment between pointers to char sign
-ed and unsigned
247 3 if(k&1)
248 3 {
249 4 str[k++]=0x20;
250 4 str[k]='\0';
251 4 }
252 3 };
253 2 strcat(str,unit[i]);
WARNING 451 IN LINE 253 OF display.c : Assignment between pointers to char sign
-ed and unsigned
WARNING 451 IN LINE 253 OF display.c : Assignment between pointers to char sign
-ed and unsigned
254 2 }
255 1 else
256 1 {//change to timer format string
257 2 sprintf(dstr,"%b02u/%b02u/%b02u \0",str[0],str[1],str[2]);
WARNING 451 IN LINE 257 OF display.c : Assignment between pointers to char sign
-ed and unsigned
258 2 if(i==4)
259 2 {
260 3 sprintf(&dstr[9],"%b02u:%b02u:%b02u\0",str[3],str[4],str[5])
-;
WARNING 451 IN LINE 260 OF display.c : Assignment between pointers to char sign
-ed and unsigned
261 3 }
262 2 }
263 1 }
264 //
265 //----------------------------------------------------------------
-----
266 //menu control
267 // first, current, history, set
268 //----------------------------------------------------------------
-----
269 //
270 //
271 static link pdate=&today;
272
273 void displayadin(void) //current
274 {
275 1
276 1 if(madin)
277 1 if(kflag)
278 1 {
279 2 //--------------------------------------------------
280 2 clear();
281 2 if(key)//long push
282 2 {
283 3 if(no<8)//8 way a/d input
284 3 {//enable mset
285 4 mstate=0;
286 4 kstate=0;
287 4 mset=1;
288 4 no=0;
289 4 }
290 3 else msel=1;//enable msel
291 3
292 3 if(msel)
293 3 {
294 4 pdate=pdate->next;
295 4 mstate=0;
296 4 kstate=0;
297 4 mhis=1;
298 4 };
299 3 delay(2000);
300 3 }
301 2 else//short push
302 2 {
303 3 if(no<8)//8 way a/d input
304 3 { //0 2 4 6
305 4 secondline:
306 4 itoa(uadin[no],adin[no]);
307 4 strcpy(dstr,adinhz[no]);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -