📄 lcd.lst
字号:
C51 COMPILER V6.20c LCD 07/15/2004 09:46:24 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c DEBUG OBJECTEXTEND
stmt level source
1
2 #include <.\zm.h>
3 #include <reg52.h>
4 #include <absacc.h>
5 #define uchar unsigned char
6 #define asscii 46 //how many one byte
7 #define null 44//NULL
8 #define cheng 46 //成
9 #define du1 47//都
10 #define si 48//世
11 #define ji1 49//纪
12 #define zhong1 50//中
13 #define ke 51//科
14 #define ping 52//平
15 #define jun 53//均
16 #define su 54//速
17 #define du2 55//度
18 #define jia 56//加
19 #define guang 57//光
20 #define dian 58//电
21 #define men 59//门
22 #define zi 60//自
23 #define jian 61//检
24 #define dan 62//单
25 #define shuang 63//双
26 #define bai 64//摆
27 #define zhou 65//周
28 #define qi1 66//期
29 #define zhong2 67//钟
30 #define pen 68//碰
31 #define zhuang 69//撞
32 #define jiao 70//角
33 #define zhuan 71//转
34 #define xian 72//线
35 #define miao 73//秒
36 #define fen 74//分
37 #define shou 75//手
38 #define dong 76//动
39 #define ce 77//测
40 #define liang 78//量
41 #define zhi 79//智
42 #define neng 80//能
43 #define ji2 81//计
44 #define shu 82//数
45 #define shi 83//时
46 #define qi2 84//器
47 #define tong 85//通
48 #define dao 86//道
49 #define gao 87//高
50 #define di 88 //低
51 #define duo 89
52 #define mai 90
53 #define chong 91
54 #define ci 92
55 //code char ZM[];
C51 COMPILER V6.20c LCD 07/15/2004 09:46:24 PAGE 2
56 extern select_id;
57 extern void PR0(char COM);
58 extern void PR1(char DAT);
59 extern void PR3(char COM);
60 extern void PR4(char DAT);
61 void char_byte(unsigned char lin,unsigned char byte,unsigned char linehead )
62 {
63 1 unsigned char i;
64 1 unsigned char k;
65 1 unsigned int addr_ziku;
66 1 i=byte*8;
67 1 if(i<=53)//left
68 1 {
69 2 PR0(i);
70 2 PR0(0xb8|lin);
71 2 for(k=0;k<8;k++)
72 2 {
73 3 addr_ziku=linehead*16+k;
74 3 PR1(ZM[addr_ziku]);
75 3 }
76 2 PR0(i);
77 2 PR0(0xb8|(lin+1));
78 2 for(k=0;k<8;k++)
79 2 {addr_ziku=linehead*16+k+8;
80 3 PR1(ZM[addr_ziku]);
81 3 }
82 2 }
83 1 else if(i>=61)//right
84 1 {
85 2 PR3(i%61);
86 2 PR3(0xb8|lin);
87 2 for(k=0;k<8;k++)
88 2 {addr_ziku=linehead*16+k;
89 3 PR4(ZM[addr_ziku]);
90 3 }
91 2 PR3(i%61);
92 2 PR3(0xb8|(lin+1));
93 2 for(k=0;k<8;k++)
94 2 {addr_ziku=linehead*16+k+8;
95 3 PR4(ZM[addr_ziku]);
96 3 }
97 2 }
98 1 else //mid
99 1 {
100 2 PR0(i);
101 2 PR0(0xb8|lin);
102 2 for(k=0;k<(61-i);k++)
103 2 {addr_ziku=linehead*16+k;
104 3 PR1(ZM[addr_ziku]);
105 3 }
106 2 PR3(0);
107 2 PR3(0xb8|lin);
108 2 for(k=0;k<(i+8-61);k++)
109 2 {addr_ziku=linehead*16+k+61-i;
110 3 PR4(ZM[addr_ziku]);
111 3 }
112 2 PR0(i);
113 2 PR0(0xb8|(lin+1));
114 2 for(k=0;k<(61-i);k++)
115 2 {addr_ziku=linehead*16+k+8;
116 3 PR1(ZM[addr_ziku]);
117 3 }
C51 COMPILER V6.20c LCD 07/15/2004 09:46:24 PAGE 3
118 2 PR3(0);
119 2 PR3(0xb8|(lin+1));
120 2 for(k=0;k<(i+8-61);k++)
121 2 {addr_ziku=linehead*16+8+k+61-i;
122 3 PR4(ZM[addr_ziku]);
123 3 }
124 2 }
125 1 }
126
127
128 void line_lcd(unsigned char lin,unsigned char linehead[])
129 {
130 1 unsigned char i=0;
131 1 unsigned char j=0;
132 1 unsigned char k=0;
133 1 unsigned int addr_ziku;
134 1 while(linehead[i]!=0xff)
135 1 {
136 2 if(linehead[i]>=asscii)//判断是汉字还是字符
137 2 j+=16;
138 2 else j+=8;
139 2
140 2 if((j<69)&&(j>61)&&(linehead[i]<asscii))//字符从56列开始,左屏有5列,右屏有3列
141 2 {
142 3 PR0(j-8);
143 3 PR0(0xb8|lin);
144 3 for(k=0;k<(8-j+61);k++)
145 3 {
146 4 addr_ziku=linehead[i]*16+k;
147 4 PR1(ZM[addr_ziku]);}
148 3 PR3(0);
149 3 PR3(0xb8|lin);
150 3 for(k=0;k<=(j-61);k++)
151 3 {addr_ziku=linehead[i]*16+k-j+69;
152 4 PR4(ZM[addr_ziku]);}
153 3
154 3 PR0(j-8);
155 3 PR0(0xb8|(lin+1));
156 3 for(k=0;k<(69-j);k++)
157 3 {addr_ziku=linehead[i]*16+k+8;
158 4 PR1(ZM[addr_ziku]);}
159 3 PR3(0);
160 3 PR3(0xb8|(lin+1));
161 3 for(k=0;k<=(j-61);k++)
162 3 {addr_ziku=linehead[i]*16+k+77-j;
163 4 PR4(ZM[addr_ziku]);}
164 3 }
165 2 else if((j<77)&&(j>61)&&(linehead[i]>=asscii))//汉字从56列或48列开始,左屏有5列,右屏有11列或左屏有13列,
-右屏有5列
166 2 {
167 3 PR0(j-16);
168 3 PR0(0xb8|lin);
169 3 for(k=0;k<(77-j);k++)
170 3 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
171 4 PR1(ZM[addr_ziku]);}
172 3 PR3(0);
173 3 PR3(0xb8|lin);
174 3 for(k=0;k<=(j-61);k++)
175 3 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+16-(j-61)+k;
176 4 PR4(ZM[addr_ziku]);}
177 3
178 3 PR0(j-16);
C51 COMPILER V6.20c LCD 07/15/2004 09:46:24 PAGE 4
179 3 PR0(0xb8|(lin+1));
180 3 for(k=0;k<(61-(j-16));k++)
181 3 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
182 4 PR1(ZM[addr_ziku]);}
183 3 PR3(0);
184 3 PR3(0xb8|(lin+1));
185 3 for(k=0;k<(j-61);k++)
186 3 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+16+16-(j-61)+k;
187 4 PR4(ZM[addr_ziku]);}
188 3 }
189 2 else
190 2 {
191 3 if(linehead[i]<asscii)//8*16
192 3 {
193 4 if(j<61)//左屏字符
194 4 {
195 5 PR0(j-8);
196 5 PR0(0xb8|lin);
197 5 for(k=0;k<8;k++)
198 5 {addr_ziku=linehead[i]*16+k;
199 6 PR1(ZM[addr_ziku]);}
200 5 PR0(j-8);
201 5 PR0(0xb8|(lin+1));
202 5 for(k=0;k<8;k++)
203 5 {addr_ziku=linehead[i]*16+k+8;
204 6 PR1(ZM[addr_ziku]);}
205 5 }
206 4 else
207 4 {
208 5 PR3((j-8)%61);
209 5 PR3(0xb8|lin);
210 5 for(k=0;k<8;k++)
211 5 {addr_ziku=linehead[i]*16+k;
212 6 PR4(ZM[addr_ziku]);}
213 5 PR3((j-8)%61);
214 5 PR3(0xb8|(lin+1));
215 5 for(k=0;k<8;k++)
216 5 {addr_ziku=linehead[i]*16+k+8;
217 6 PR4(ZM[addr_ziku]);}
218 5 }//右屏字符
219 4 }
220 3 else//16*16
221 3 {
222 4 if(j<61)//左屏汉字
223 4 {
224 5 PR0(j-16);
225 5 PR0(0xb8|lin);
226 5 for(k=0;k<16;k++)
227 5 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
228 6 PR1(ZM[addr_ziku]);}
229 5 PR0(j-16);
230 5 PR0(0xb8|(lin+1));
231 5 for(k=0;k<16;k++)
232 5 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
233 6 PR1(ZM[addr_ziku]);}
234 5 }
235 4 else//右屏汉字
236 4 {
237 5 PR3(j-61-16);
238 5 PR3(0xb8|lin);
239 5 for(k=0;k<16;k++)
240 5 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
C51 COMPILER V6.20c LCD 07/15/2004 09:46:24 PAGE 5
241 6 PR4(ZM[addr_ziku]);}
242 5 PR3(j-61-16);
243 5 PR3(0xb8|(lin+1));
244 5 for(k=0;k<16;k++)
245 5 {addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
246 6 PR4(ZM[addr_ziku]);}
247 5 }
248 4 }
249 3 }
250 2 i+=1;
251 2
252 2 }
253 1 }
254
255
256 void clear_up(void)
257 {
258 1 char i;
259 1 PR0(0);
260 1 PR3(0);
261 1 PR0(0xb8);
262 1 PR3(0xb8);
263 1 for(i=0;i<61;i++)
264 1 {
265 2 PR1(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -