📄 led.lst
字号:
C51 COMPILER V7.50 LED 07/24/2005 09:42:58 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN E:\hex\LED.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LED.C BROWSE DEBUG OBJECTEXTEND TABS(1) OBJECT(E:\hex\LED.obj)
line level source
1 /*-----------------------------------
2 收款机数字显示器驱动程序(通信部分)
3 -----------------------------------*/
4 /*数字led显示程序模块,通常显示0。00,只有在营业过程中改变输入的数字及小计,单价,余额指示灯*/
5 #include <reg51.h>
6 #include <absacc.h>
7 #include <intrins.h>
8 #include <stdio.h>
9
10 #define uchar unsigned char
11 #define uint unsigned int
12 #define ulong unsigned long
13
14 #define TTHH0 -1800/256 /* 1500 */
15 #define TTLL0 -1800%256
16
17 /*-------- 命令句柄定义 --------*/
18 #define OpenLED 0xa1 /* 打开LED显示 0.00 */
19 #define CloseLED 0xa2 /* 关闭LED显示 */
20 #define WriteLED 0xa3 /* 接收LED显示缓冲区数据 */
21 #define TestLED 0xa4 /* 全显8888或顺序地显示每一段位*/
22 #define LEDbeep 0xa5
23
24 /* 以上各命令在正确接收与处理后返回Finish句柄数据长度为0,否则返
25 回ERROR或其它不同状态.其中的数据格式请根据LED需显示内容,长度
26 自行设计 */
27
28 #define Error 0xff
29 #define OK 0x0
30 #define Finish 0x70
31
32 #define WaitTI while(TI==0);TI=0
33 #define WaitRI while(RI==0);RI=0
34
35 #define Beep P3_7
36 #define SL1 P3_2
37 #define SL2 P3_3
38 #define SL3 P3_4
39 #define SL4 P3_5
40
41 sbit P1_0=P1^0;
42 sbit P1_1=P1^1;
43 sbit P1_2=P1^2;
44 sbit P1_3=P1^3;
45 sbit P1_4=P1^4;
46 sbit P1_5=P1^5;
47 sbit P1_6=P1^6;
48 sbit P1_7=P1^7;
49
50 sbit P3_0=P3^0;
51 sbit P3_1=P3^1;
52 sbit P3_2=P3^2;
53 sbit P3_3=P3^3;
54 sbit P3_4=P3^4;
55 sbit P3_5=P3^5;
C51 COMPILER V7.50 LED 07/24/2005 09:42:58 PAGE 2
56 sbit P3_6=P3^6;
57 sbit P3_7=P3^7;
58
59 sbit TA = 0xc7;
60 sbit RWT = 0xbf;
61 sbit EWT = 0x89;
62 sbit WTR = 0x91;
63 sbit EXBS = 0xdd;
64
65 /******************数据结构定义*****************************************/
66
67 uchar ComBuf[20];
68 uchar DisBuf[20];
69
70 uchar data Order,Len,ledn;
71 uint data Counter;
72 uchar data uc0;
73 uchar bdata p3d;
74 sbit p3d0=p3d^0;
75 sbit p3d1=p3d^1;
76 sbit p3d2=p3d^2;
77 sbit p3d3=p3d^3;
78 sbit p3d4=p3d^4;
79 sbit p3d5=p3d^5;
80 bit bdata fini,FLASH;
81
82 void Receive(void);
83
84 uchar code TAB[26]={ //共阴极
85 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,//0,1,2,3,4,5,6,7,8,9,
86 0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,//0.,1.,2.,3.,4.,5.,6.,7.,8.,9.
87 0xBF,0xfd,0X00,0XFF,0X3F,0X7F //-,合计,8., ,-.,.
88 };
89 /****************************************
90 --------- 定时器1中断服务程序 ----------
91 *****************************************/
92 void TimeCount1(void) interrupt 3 using 0
93 {
94 1 _nop_();
95 1 }
96
97 /*****************************
98 ---- 定时器0中断服务程序 ----
99 *****************************/
100 void TimeCount0(void) interrupt 1 using 1
101 {
102 1 TH0=TTHH0;
103 1 TL0=TTLL0;
104 1 p3d=ledn;
105 1 P3_2=p3d0;
106 1 P3_3=p3d1;
107 1 P3_4=p3d2;
108 1 P3_5=p3d3;
109 1 P1=DisBuf[ledn];
110 1 ledn++;
111 1 if(ledn==12){ledn=15;}
112 1 if(ledn>15){ledn=0;}
113 1 }
114 /**********************
115 ----- 外部中断0 -----
116 /**********************/
117 void External0(void) interrupt 0 using 2
C51 COMPILER V7.50 LED 07/24/2005 09:42:58 PAGE 3
118 {
119 1 _nop_();
120 1 }
121
122 /**************************
123 ------ 外部中断1 -------
124 **************************/
125 void External1(void) interrupt 2 using 3
126 {
127 1 _nop_();
128 1 }
129
130 /* 从串行口接收一字节数据 */
131 void RcvDataBy232(void)
132 {
133 1 Counter=0;
134 1 do
135 1 {
136 2 Counter++;
137 2 if(Counter>0x2ff)/* 若有一段时间收不到数据则退出 */
138 2 {
139 3 uc0=0xff;
140 3 goto endri;
141 3 }
142 2 }while(RI==0);
143 1 uc0=SBUF;
144 1 endri: RI=0;
145 1 }
146 //=====================================================
147 void InitSBUF(void) /* 初始化串行口实现点对点通信 */
148 {
149 1 IE=0;
150 1 TMOD=0x21;
151 1 TL1=0xfd; /* 9600时TH1,TL1=0xfd,1200时TH1,TL1=0XE8 */
152 1 TH1=0xfd;
153 1
154 1 TH0=TTHH0;
155 1 TL0=TTLL0;
156 1 PCON=0x0;
157 1 SCON=0x50;
158 1 TR0=1;
159 1 ET0=1;
160 1 IP=0;
161 1 PS=1;
162 1 TR1=1;
163 1 RI=0; TI=0;
164 1
165 1 }
166
167 /*命令格式:
168 包头(1,0xAA) + 命令(1) + 机器号(1) + 长度(1) + 数据 + Checksum(1)*/
169 void ssio(void) interrupt 4 using 3
170 {
171 1 ES=0;
172 1 ET0=0;
173 1 Receive();
174 1 ES=1; ET0=1;
175 1 RI=0; TI=0;
176 1 }
177
178 /*接收,Order为全局变量,数据放在Un.ComBuf联合体中 */
179 void Receive(void)
C51 COMPILER V7.50 LED 07/24/2005 09:42:58 PAGE 4
180 {
181 1 uchar i;//,c
182 1 RcvDataBy232();
183 1 ComBuf[0]=uc0;
184 1 RcvDataBy232();
185 1 ComBuf[1]=uc0;
186 1 RcvDataBy232();
187 1 ComBuf[2]=uc0;
188 1 Order=uc0; /* 接收命令句柄 */
189 1 RcvDataBy232();
190 1 ComBuf[3]=uc0;
191 1 RcvDataBy232(); /* 接收数据长度 */
192 1 ComBuf[4]=uc0;
193 1 Len=uc0;
194 1 for(i=5;i<Len;i++)//&&i<15
195 1 {
196 2 RcvDataBy232(); /* 接收数据 */
197 2 ComBuf[i]=uc0;
198 2 }
199 1 RcvDataBy232(); //crc
200 1 RcvDataBy232();
201 1 fini=1;
202 1 SBUF=0x4f;
203 1 WaitTI;
204 1 SBUF=0x4b;
205 1 WaitTI;
206 1 SBUF=0x00;
207 1 WaitTI;
208 1 SBUF=0x05;
209 1 WaitTI;
210 1 SBUF=0x00;
211 1 WaitTI;
212 1 SBUF=0x00;
213 1 WaitTI;
214 1 }
215 //===================================
216 //void delay(uint z)
217 //{
218 // uchar i;
219 // while(z-->0){
220 // for(i=0;i<100;i++) _nop_();
221 /// }
222 //}
223 //=====================================
224 void main(void)
225 {
226 1 bit b;
227 1 uchar count;
228 1 uchar i,p,n;
229 1 uchar d;
230 1 ledn=0;
231 1 Beep=1;
232 1 fini=0;
233 1 InitSBUF();
234 1 EA=1;
235 1 for(i=0;i<20;i++) ComBuf[i]=0x00;
236 1 for(i=0;i<15;i++) DisBuf[i]=0XFF;
237 1 DisBuf[0]=TAB[0];
238 1 DisBuf[1]=TAB[0];
239 1 DisBuf[2]=TAB[0];
240 1 DisBuf[3]=TAB[25];
241 1 FLASH=0;
C51 COMPILER V7.50 LED 07/24/2005 09:42:58 PAGE 5
242 1 count=0;
243 1 while(1) /* 通过查询方式接收来自主板的显示请求 */
244 1 {
245 2 ES=0;
246 2 EA=0;
247 2 count++;
248 2 if(count>0x1f)
249 2 {
250 3 count=0;
251 3 p3d=ledn;
252 3 P3_2=p3d0;
253 3 P3_3=p3d1;
254 3 P3_4=p3d2;
255 3 P3_5=p3d3;
256 3 P1=DisBuf[ledn];
257 3 ledn++;
258 3 if(ledn==12){ledn=15;}
259 3 if(ledn>15){ledn=0;}
260 3 }
261 2 if(RI==1){Receive();}
262 2 if(fini==1) /* 分类处理不同的命令 */
263 2 {
264 3 for(i=0;i<20;i++) DisBuf[i]=0xff;
265 3 ES=0;
266 3 i=Len-1;p=0;b=0;
267 3 AA:
268 3 if(ComBuf[i]>=0x30&&ComBuf[i]<=0x39) //数字
269 3 {
270 4 if(b==0){d=ComBuf[i]-0x30;}
271 4 else
272 4 {
273 5 if(p==2||p==6||p==10){d=ComBuf[i]-0x30;}
274 5 else{d=ComBuf[i]-0x30+10;b=0;}
275 5 }
276 4 DisBuf[p]=TAB[d];
277 4 p++;
278 4 }
279 3 else if(ComBuf[i]==0x2e)
280 3 {
281 4
282 4 if(p==3||p==7)
283 4 {
284 5 for(n=0;n<11;n++)
285 5 {
286 6 DisBuf[11-n]=DisBuf[10-n];
287 6 }
288 5 DisBuf[0]=0xff;
289 5 p++;
290 5 }
291 4 b=1;
292 4 if(p==11){b=0;}
293 4 } //.
294 3 else if(ComBuf[i]==0x2d) //-
295 3 {
296 4 if(b==0) DisBuf[p]=0xbf;
297 4 else DisBuf[p]=TAB[24];
298 4 b=0;
299 4 p++;
300 4 }
301 3 else {goto AB;}
302 3 if(i<5||p>12){goto AB;}
303 3 i--;
C51 COMPILER V7.50 LED 07/24/2005 09:42:58 PAGE 6
304 3 goto AA;
305 3 AB: if(b==1)
306 3 {
307 4 DisBuf[p]=TAB[25];
308 4 }
309 3 if(Order==0x00) //单价
310 3 {DisBuf[15]=0xfe;}
311 3 if(Order==0x01) //合计
312 3 {DisBuf[15]=0xfd;}
313 3 if(Order==0x02) //找零
314 3 {DisBuf[15]=0xfb;}
315 3 for(i=0;i<20;i++) ComBuf[i]=0x00;
316 3 fini=0;
317 3 }
318 2
319 2 // ES=1;
320 2 }
321 1 }
322
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 664 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -