📄 lcd_input.lst
字号:
C51 COMPILER V7.50 LCD_INPUT 12/01/2006 13:48:46 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD_INPUT
OBJECT MODULE PLACED IN lcd_input.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE lcd_input.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <math.h>
3 #include <stdio.h>
4 #include <absacc.h>
5 #include <intrins.h>
6 #include <string.h>
7 #include <stdlib.h>
8 #define wcadd1 XBYTE[0xbf00] //#define wcadd1 XBYTE[0xfe00] /* 写指令代码地址 */
9 #define wdadd1 XBYTE[0x3f00] //#define wdadd1 XBYTE[0xfc00] /* 写参数及显示数据地址 */
10 #define rdadd1 XBYTE[0xbf00] /* 读参数及显示数据地址 */
11 #define rbadd1 XBYTE[0x3c00] /* 读忙状态地址 */
12 #define Io8155 XBYTE[0xef00]
13 #define M8155 XBYTE[0xcf00]
14 #define M8155_1 XBYTE[0xcf10]
15 #define Io8155_A XBYTE[0xef01]
16 #define Io8155_B XBYTE[0xef02]
17 typedef unsigned char uchar;
18 typedef unsigned int uint;
19 #define PARA1 0x28;
20 #define True 1
21 #define False 0
22 void delay3(uint Tm_count);
23 void sound(bit f,uchar i);
24 void CCW22_PR(char O_X,char O_Y,code_1);
25 uchar key_in(void);
26 void RS_in();
27 void pass();
28 bit Send_c(uchar i);
29 void delay();
30 sbit Input_1 = P0^0;
31 sbit Input_2 = P0^1;
32 sbit Input_3 = P0^2;
33 sbit Input_4 = P0^3;
34 sbit Master = P0^4;
35 sbit Second = P0^5;
36 sbit Bad = P0^6;
37 sbit Speak = P0^7;
38
39 sbit LED_zd = P1^4;
40 sbit LED_zl = P1^5;
41 sbit P20=P2^0;
42 sbit P21=P2^1;
43 sbit P22=P2^2;
44
45 sbit in1=P2^6;
46 sbit in2=P2^7;
47 sbit P00=P0^0;
48
49 sbit Maste=P3^1;
50 sbit Select=P3^0;
51
52 sbit P34=P3^4;
53 sbit P35=P3^5;
54 sbit P36=P3^6;
55 sbit P37=P3^7;
C51 COMPILER V7.50 LCD_INPUT 12/01/2006 13:48:46 PAGE 2
56 bit RUN; //电机运行壮态
57 bit Front;//电机前或后壮态 0/Front,1/back
58 bit Key;
59 bit RXD_D;
60 bit Busy;
61 uchar SAVE_D;
62 uchar TH0_T;
63 uchar TL0_T;
64 uchar V_k;
65 uchar speed;
66 //code uchar DJ_F[]={0xFE,0xF7,0xFD,0xFB};
67 //code uchar DJ_B[]={0xFB,0xFD,0xF7,0xFE};
68
69 code uchar DJ_F[]={0xFA,0xFB,0xF9,0xFD,0xF5,0xF7,0xF6,0xFE};
70 code uchar DJ_B[]={0xFE,0xF6,0xF7,0xF5,0xFD,0xF9,0xFB,0xFA};
71 code uchar DJ_V[3][2]={0xa6,0xe2,
72 0x49,0xb2,
73 0x48,0x64};
74
75 code uchar CGTAB[3][2]={0xba,0xe2,0x80,0xc1,0x10,0x80};
76 void main()
77 {
78 1 uchar i,save;
79 1 uchar cont;
80 1 bit FLAG_1,FLAG_2;
81 1 Busy = False;
82 1 speed = 0;
83 1 SCON = 0x52;
84 1 TMOD = 0x21;
85 1 IP = 0x07;
86 1 TH1=TL1=0xF4;
87 1 RXD_D = 0;
88 1 SAVE_D = 0;
89 1 V_k = 0;
90 1
91 1 TH0_T = DJ_V[0][0];
92 1 RUN = 0;
93 1 TL0_T = 0;
94 1 EA = 1;
95 1 TR1 = 1;
96 1 EX0 = 1;
97 1 delay();
98 1 pass();
99 1 while (1)
100 1 {
101 2
102 2 cont = 0; FLAG_2 = 0;
103 2 while (1)
104 2 {
105 3 if (RXD_D) RS_in();
106 3 i = key_in();
107 3 if (RUN==0) {if (i == 6) break;} /* 设定手动按键 */
108 3 if (i==0)
109 3 {
110 4 if (cont >= 200) { i = save; break;}
111 4 else continue;
112 4 }
113 3 if (save == i) {if(cont >= 200) continue; else cont++;}
114 3 else {save=i;cont=0;};
115 3 }
116 2 if (!Busy)
117 2 {
C51 COMPILER V7.50 LCD_INPUT 12/01/2006 13:48:46 PAGE 3
118 3 FLAG_1 = Send_c(i);
119 3 if(FLAG_1==0) Bad=0; else Bad=1;
120 3 }
121 2 }
122 1 }
123 //+++++++++++++++++++++++++++++++++++++++++
124 void RS_in()
125 {uchar i;
126 1
127 1 RXD_D=0;i=SAVE_D;SBUF=i;while(!TI);TI=0;
128 1 switch (i){
129 2 case 1: {Front=0;ET0=1;TR0=1;}break; /* 电机反转 */
130 2 case 2: {Front=1;ET0=1;TR0=1;}break; /* 电机正转 */
131 2 case 3: {ET0=0;TR0=0;P2|=0x07;}break; /* 电机停 */
132 2 case 4: {TH0_T=DJ_V[0][V_k];}break; /* 每分钟8毫升 */
133 2 case 5: {TH0_T=DJ_V[1][V_k];}break; /* 每分钟4毫升 */
134 2 case 6:
135 2 {
136 3 if (V_k == 0) speed = 1;
137 3 TH0_T = DJ_V[2][V_k];
138 3 } break; /* 每分钟2毫升 */
139 2 case 7:
140 2 {
141 3 LED_zd = 0; /* 开治疗指示 */
142 3 RUN = 1;
143 3 } break;
144 2 case 8:
145 2 {
146 3 LED_zl = 0; /* 开诊断指示 */
147 3 RUN = 1;
148 3 } break;
149 2 case 9:
150 2 {
151 3 LED_zd = 1; /* 关治疗指示 */
152 3 P1 |= 0x07;
153 3 speed = 0;
154 3 RUN = 0;
155 3 } break;
156 2 case 10:
157 2 {
158 3 LED_zl = 1; /* 关诊断指示 */
159 3 P1 |= 0x07;
160 3 speed = 0;
161 3 RUN = 0;
162 3 }break;
163 2 case 11:V_k=0;break; /* 50ML注射器 */
164 2 case 12:V_k=1;break; /* 25ML注射器 */
165 2 case 13:{ RUN=~RUN;}break; /* 发键连续关 */
166 2 case 14: Busy=~Busy; break; /* 主控忙 */
167 2 default: break;
168 2 }
169 1
170 1 }
171 //==========================================
172 bit Send_c(uchar i)
173 {uint j;
174 1 bit FLAG_1=0;
175 1 Second = False;
176 1 if (Master==0) return(1);
177 1 FLAG_1=0;
178 1 for (j=0;j<65000;j++)
179 1 { if (RXD_D) RS_in();
C51 COMPILER V7.50 LCD_INPUT 12/01/2006 13:48:46 PAGE 4
180 2 if (Master==0)
181 2 {i=~i;P0&=i;Second=1;
182 3 _nop_();_nop_();_nop_();
183 3 FLAG_1=1;P0|=0x3f;
184 3 }
185 2 else continue;
186 2 break;
187 2 }
188 1 Second = True;
189 1 return(FLAG_1);
190 1 }
191
192 //===========/*电机控制*/=================
193 void time_0(void) interrupt 1
194 {static uchar i,count;
195 1 uchar j;
196 1 TR0 = 0;
197 1 EA = 0;
198 1 TH0 = TH0_T;
199 1 TL0 = TL0_T;
200 1 if ((V_k==0) && (TH0_T==0x48))
201 1 {
202 2 if (count >= speed) count = 0; else { count++; goto time_1;}
203 2 }
204 1
205 1 if (i >= 4) i = 0;
206 1 P1 |= 0x0F;
207 1 if (!Front) {j = DJ_F[i]; P1 &= j;}
208 1 else {j = DJ_B[i]; P1 &= j;};
209 1 i++;
210 1
211 1 time_1: EA=1;
212 1 TR0=1;
213 1 }
214 void INT_0(void) interrupt 0
215 {uchar i,k;
216 1 bit s;
217 1 EA=0;
218 1 if (Second==0) {s=0;Second=1;} else s=1;
219 1 //if (RXD_D) P24=0;else P24=1;
220 1 for (k=0;k<0xff;k++)
221 1 {
222 2 if (Master!=0) continue;
223 2 Second=0;
224 2 while(!Master);
225 2 _nop_();_nop_();_nop_();
226 2 i=P0;i|=0xf0;i=~i;
227 2 SAVE_D=i;RXD_D=1;
228 2 break;
229 2 }
230 1 //if (RXD_D==0) LED_gz=0;else LED_gz=1;
231 1 Second=s;
232 1
233 1 EA=1;
234 1 }
235 /*按键处理*/
236 uchar key_in(void)
237 { uchar i,j;
238 1
239 1 P2=0xff;
240 1 P2&=0xf8;
241 1 _nop_();_nop_();_nop_();
C51 COMPILER V7.50 LCD_INPUT 12/01/2006 13:48:46 PAGE 5
242 1 i=P2;
243 1 i|=0xc7;
244 1 _nop_();_nop_();_nop_();
245 1 if (i==0xff) return(0);
246 1 P2=i;j=i;
247 1 i=P2;
248 1 i|=0xf8;
249 1 if (i==0xff) return(0);
250 1 i&=j;Key=1;
251 1
252 1 switch(i)
253 1 {case 0xf6: i=1; break; //1
254 2 case 0xf5: i=2; break; //2
255 2 case 0xf3: i=3; break; //3
256 2 case 0xee: i=4; break; //4
257 2 case 0xed: i=5; break; //5
258 2 case 0xeb: i=6; break; //6
259 2 case 0xde: i=7; break; //7
260 2 case 0xdd: i=8; break; //8
261 2 case 0xdb: i=9; break; //p
262 2
263 2 }
264 1 return(i);
265 1 }
266
267 void delay(void)
268 { uint i;
269 1 for (i=0;i<20000;i++)
270 1 {
271 2 _nop_();
272 2 }
273 1 }
274 /**********************************/
275 void pass()
276 { uchar i;
277 1 CCW22_PR(2,3,3);
278 1 loop:
279 1
280 1 Maste=1;
281 1 while (!Select);
282 1 P3=0xff;
283 1 Maste=0;
284 1 while (Select);
285 1 i=P3;
286 1 i&=0xf0;
287 1 if (i!=0x50) {Maste=1;goto loop;}
288 1 Maste=1;
289 1 }
290 /************************************/
291 /* 汉字写入函数 (图形方式)CCW2_PR */
292 /* 连接字库: CGTAB */
293 /* 函数调用入口: CCW2_PR() */
294 /* 函数输入变量: O_X,O_Y,CODE_1 */
295 /************************************/
296 void CCW22_PR(char O_X,char O_Y,code_1)
297 {
298 1 unsigned char count1;
299 1 unsigned int i,j,a;
300 1 a=0;
301 1 i=PARA1;
302 1 j=i*O_Y+O_X+0x01f0; /* 如为320240屏k=j*O_Y+O_X+0x04ce*/
303 1 wcadd1=0x4f; /* CSRDIR 代码(下移) */
C51 COMPILER V7.50 LCD_INPUT 12/01/2006 13:48:46 PAGE 6
304 1 Maste=0;
305 1 for(i=0;i<2;i++)
306 1 {
307 2 wcadd1=0x46; /* CSRW 代码 */
308 2 wdadd1=j%256; /* 设置光标地址CSR */
309 2 wdadd1=j/256+0x40;
310 2 wcadd1=0x42; /* MWRITE 代码 */
311 2 for(count1=i*16;count1<16*(i+1);count1++)
312 2 {
313 3 wdadd1=CGTAB[code_1][count1]; /* 写入数据 */
314 3 }
315 2 j=j+1;
316 2 }
317 1 while (Select);
318 1 P3&=0x5f;
319 1 }
320 void sound(bit f,uchar i)
321 {
322 1 for (;i>0;i--)
323 1 {
324 2 Speak = False;
325 2 if (f) delay3(100); else delay3(50);
326 2 Speak = True;
327 2 if (i>0) delay3(50);
328 2 }
329 1 }
330 /********定时1ms***********/
331 void delay3(uint Tm_count)
332 {
333 1 uint i;
334 1 while (Tm_count--)
335 1 {
336 2 for (i=0; i<125; i++) {};
337 2 }
338 1 }
339
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 975 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 14
IDATA SIZE = ---- ----
BIT SIZE = 5 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -