📄 disp.lst
字号:
C51 COMPILER V7.00 DISP 09/14/2006 16:35:48 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE DISP
OBJECT MODULE PLACED IN DISP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DISP.C OPTIMIZE(9,SIZE) BROWSE ORDER DEBUG OBJECTEXTEND
stmt level source
1 /////////////////////////////////////////////////////
2 #include <REG51STC.H>
3 #include <ABSACC.H>
4 #include "CMD16887.H"
5 #include <INTRINS.H>
6 #include "externxy.h"
7 /*********************************************
8 * 功能: DISP1 金额/容量/单价 *
9 **********************************************/
10 void disp_lcd1(ulong lcddata,uchar lcdadd) //;LCD1三个窗的显示
11 {
12 1 uchar i;
13 1 uchar temp;
14 1 uchar dispmem[6];
15 1 uchar j;
16 1 uchar b;
17 1 uchar endhide; //清前导零要到小数点位置
18 1 bit hide=0;
19 1 bit bymem;
20 1 bbyte=dotmode[5];
21 1
22 1 switch (lcdadd)
23 1 {
24 2 case 0: //单价窗时
25 2 if (a2)
26 2 {a5=0;endhide=4;}
27 2 else if(a5)
28 2 {endhide=3;}
29 2 else
30 2 {endhide=0;}
31 2 break;
32 2 case 4: //金额窗时
33 2 if (a0)
34 2 {a3=0;endhide=2;} //saledot=1;
35 2 else if(a3)
36 2 {endhide=3;} //saledot=0;
37 2 else
38 2 {endhide=0;}
39 2 break;
40 2 case 10: //体积窗时
41 2 if (a1)
42 2 {a4=0;endhide=4;}
43 2 else if(a4)
44 2 {endhide=3;}
45 2 else
46 2 {endhide=0;}
47 2 break;
48 2 default:
49 2 endhide=0;
50 2 goto lcd1_break;
51 2 break;
52 2 }
53 1 if (lcdadd==0)
54 1 { b=4; } //单价栏仅4数字
55 1 else
C51 COMPILER V7.00 DISP 09/14/2006 16:35:48 PAGE 2
56 1 {b=6; }
57 1 for(i=0;i<b;i++)
58 1 { bbyte=(lcddata%10);
59 2 lcddata /=10;
60 2 dispmem[i]=bbyte;
61 2 }
62 1 //-------------------------------
63 1 switch(lcdadd) //更新通讯表格
64 1 {
65 2 case 0: //单价窗时
66 2 table_buf[2]=dispmem[1]*16+dispmem[0];
67 2 table_buf[3]=dispmem[3]*16+dispmem[2];
68 2 break;
69 2 case 4: //金额窗时
70 2 table_buf[40]=dispmem[1]*16+dispmem[0];
71 2 table_buf[41]=dispmem[3]*16+dispmem[2];
72 2 table_buf[42]=dispmem[5]*16+dispmem[4];
73 2 break;
74 2 case 10: //体积窗时
75 2 table_buf[46]=dispmem[1]*16+dispmem[0];
76 2 table_buf[47]=dispmem[3]*16+dispmem[2];
77 2 table_buf[48]=dispmem[5]*16+dispmem[4];
78 2 break;
79 2 }
80 1 //-------------------------------
81 1 AUXR |=0x02;
82 1 for(i=b;i>0;i--)
83 1 { ACC=0x38;
84 2 XBYTE[LCDAADD]=ACC; //ST
85 2 bbyte=dispmem[i-1];
86 2 if(i==endhide) hide=1; //小数点以后不去前导零
87 2 if(i!=1)
88 2 {
89 3 if(bbyte==0 && !hide)
90 3 {
91 4 bbyte=0x0f; //去前导零
92 4 }
93 3 else
94 3 { hide=1; }
95 3 }
96 2 temp=bbyte*16+i+lcdadd-1;
97 2
98 2 for(j=8;j>0;j--)
99 2 { bbyte=temp;
100 3 bymem=(bit)(bbyte&0x80);
101 3 temp<<=1;
102 3 bbyte=0x38;
103 3 a1= bymem; //DS-->DATA
104 3 XBYTE[LCDAADD]=bbyte;
105 3 ACC|=0x01;
106 3 _nop_();_nop_();_nop_();_nop_();
107 3 XBYTE[LCDAADD]=ACC; //CP-->CLK ↑
108 3 ACC&=0xfe;
109 3 _nop_();_nop_();_nop_();_nop_();
110 3 XBYTE[LCDAADD]=ACC; //CP-->CLK ↓
111 3 }
112 2 ACC=0x3c;
113 2 _nop_();_nop_();
114 2 XBYTE[LCDAADD]=ACC; //ST-->INH
115 2
116 2 }
117 1 lcd1_break:
C51 COMPILER V7.00 DISP 09/14/2006 16:35:48 PAGE 3
118 1 AUXR &=0xfd;
119 1
120 1 }
121
122 /*********************************************
123 * 功能: DISP2 金额/容量/单价 *
124 **********************************************/
125 void disp_lcd2(ulong lcddata,uchar lcdadd) //;LCD1三个窗的显示
126 {
127 1 uchar i;
128 1 uchar temp;
129 1 uchar dispmem[6];
130 1 uchar j;
131 1 uchar b;
132 1 uchar endhide; //清前导零要到小数点位置
133 1 bit hide=0;
134 1 bit bymem;
135 1 bbyte=dotmode[5];
136 1
137 1 switch (lcdadd)
138 1 {
139 2 case 0: //单价窗时
140 2 if (a2)
141 2 {endhide=4;}
142 2 else if(a5)
143 2 {endhide=3;}
144 2 else
145 2 {endhide=0;}
146 2 break;
147 2 case 4: //金额窗时
148 2 if (a0)
149 2 {endhide=2;}
150 2 else if(a3)
151 2 {endhide=3;}
152 2 else
153 2 {endhide=0;}
154 2 break;
155 2 case 10: //体积窗时
156 2 if (a1)
157 2 {endhide=4;}
158 2 else if(a4)
159 2 {endhide=3;}
160 2 else
161 2 {endhide=0;}
162 2 break;
163 2 default:
164 2 endhide=0;
165 2 goto lcd2_break;
166 2 break;
167 2 }
168 1 if (lcdadd==0)
169 1 { b=4; } //单价栏仅4数字
170 1 else
171 1 {b=6; }
172 1 for(i=0;i<b;i++)
173 1 { bbyte=(lcddata%10);
174 2 lcddata /=10;
175 2 dispmem[i]=bbyte;
176 2 }
177 1 //-------------------------------
178 1 switch(lcdadd) //更新通讯表格
179 1 {
C51 COMPILER V7.00 DISP 09/14/2006 16:35:48 PAGE 4
180 2 case 0: //单价窗时
181 2 table_buf[2+53]=dispmem[1]*16+dispmem[0];
182 2 table_buf[3+53]=dispmem[3]*16+dispmem[2];
183 2 break;
184 2 case 4: //金额窗时
185 2 table_buf[40+53]=dispmem[1]*16+dispmem[0];
186 2 table_buf[41+53]=dispmem[3]*16+dispmem[2];
187 2 table_buf[42+53]=dispmem[5]*16+dispmem[4];
188 2 break;
189 2 case 10: //体积窗时
190 2 table_buf[46+53]=dispmem[1]*16+dispmem[0];
191 2 table_buf[47+53]=dispmem[3]*16+dispmem[2];
192 2 table_buf[48+53]=dispmem[5]*16+dispmem[4];
193 2 break;
194 2 }
195 1 //-------------------------------
196 1 AUXR |=0x02;
197 1 for(i=b;i>0;i--)
198 1 { ACC=0x38;
199 2 XBYTE[LCDBADD]=ACC; //ST
200 2 bbyte=dispmem[i-1];
201 2 if(i==endhide) hide=1; //小数点以后不去前导零
202 2 if(i!=1)
203 2 {
204 3 if(bbyte==0 && !hide)
205 3 {
206 4 bbyte=0x0f; //去前导零
207 4 }
208 3 else
209 3 { hide=1; }
210 3 }
211 2 temp=bbyte*16+i+lcdadd-1;
212 2
213 2 for(j=8;j>0;j--)
214 2 { bbyte=temp;
215 3 bymem=(bit)(bbyte&0x80);
216 3 temp<<=1;
217 3 bbyte=0x38;
218 3 a1= bymem; //DS-->DATA
219 3 XBYTE[LCDBADD]=bbyte;
220 3 ACC|=0x01;
221 3 _nop_();_nop_();_nop_();_nop_();
222 3 XBYTE[LCDBADD]=ACC; //CP-->CLK ↑
223 3 ACC&=0xfe;
224 3 _nop_();_nop_();_nop_();_nop_();
225 3 XBYTE[LCDBADD]=ACC; //CP-->CLK ↓
226 3 }
227 2 ACC=0x3c;
228 2 XBYTE[LCDBADD]=ACC; //ST-->INH
229 2
230 2 }
231 1 lcd2_break:
232 1 AUXR &=0xfd;
233 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -