超声波.lst
来自「超声波的发射和接收」· LST 代码 · 共 338 行 · 第 1/2 页
LST
338 行
149 void LCD_Init(void)
150 { uchar i=250; //延时
151 1 while(i--);
152 1 Select_Screen(0);
153 1 Set_OnOff(0); //关显示
154 1 LCD_Clr(0); //清屏
155 1 Select_Screen(0);
156 1 Set_OnOff(1); //开显示
157 1 Select_Screen(0);
158 1 Set_StartLine(0); //开始行:0
159 1 }
160
161 // 在指定位置显示字符:x=0-120(字母、数字)/0-112(汉字),y=0-6
162 void Out_Char(uchar x, uchar y, bit mode, char *fmt) //mode: 1 正常显示,0 反白显示
163 {
164 1 int c1,c2,cData;
165 1 uchar i=0,j,uLen;
166 1 uchar k;
167 1
168 1 uLen=strlen(fmt);
169 1
170 1 while(i<uLen)
171 1 {
C51 COMPILER V7.06 __声瞋 12/20/2007 18:29:07 PAGE 4
172 2 c1 = fmt[i];
173 2 c2 = fmt[i+1];
174 2
175 2 if(c1>=0 && c1<128 )// ASCII
176 2 {
177 3 if(c1 < 0x20)
178 3 {
179 4 switch(c1)
180 4 {
181 5 case 13:
182 5 case 10: // 回车或换行
183 5 i++;
184 5 //if(y < (LCD_Y_MAX - (2 * HZ_CHR_HEIGHT)))
185 5 if (y<7)
186 5 {x=0; y+=2;}
187 5 continue;
188 5 case 8: // 退格
189 5 i++;
190 5 if(y>ASC_CHR_WIDTH) y-=ASC_CHR_WIDTH;
191 5 cData = 0x00;
192 5 break;
193 5 }
194 4 }
195 3
196 3 for(j=0;j<sizeof(ASC_16)/sizeof(ASC_16[0]);j++) //sizeof(ASC_16[0]
197 3 {
198 4 if(fmt[i] == ASC_16[j].Index_Char[0])
199 4 break;
200 4 }
201 3
202 3 for(k=0;k<2*ASC_CHR_WIDTH;k++)
203 3 {
204 4 if(j < sizeof(ASC_16)/sizeof(ASC_16[0]))
205 4 {
206 5 if (mode == 1)
207 5 cData=ASC_16[j].Msk_Char[k]; //正常
208 5 else
209 5 cData=~ASC_16[j].Msk_Char[k]; //反白
210 5 }
211 4 else
212 4 cData=0;
213 4
214 4 if (k<ASC_CHR_WIDTH) //字符上半部
215 4 { if ((x+k)<64)
216 5 { Select_Screen(1); //选择左半屏
217 6 Set_Column(x+k);
218 6 }
219 5 else
220 5 { Select_Screen(2); //选择右半屏
221 6 Set_Column(x+k-64);
222 6 }
223 5 Set_Line(y);
224 5 }
225 4 else //字符下半部
226 4 { if ((x+k-ASC_CHR_WIDTH)<64)
227 5 { Select_Screen(1); //选择左半屏
228 6 Set_Column(x+k-8);
229 6 }
230 5 else
231 5 { Select_Screen(2); //选择右半屏
232 6 Set_Column((x+k-8)-64);
233 6 }
C51 COMPILER V7.06 __声瞋 12/20/2007 18:29:07 PAGE 5
234 5 Set_Line(y+1);
235 5 }
236 4
237 4 Write_Dat(cData);
238 4 }
239 3
240 3 if(c1 != 8) // 非退格
241 3 x+=ASC_CHR_WIDTH;
242 3 }
243 2
244 2 else //汉字
245 2 {
246 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) //sizeof(GB_1
-6[0]
247 3 {
248 4 if(fmt[i] == GB_16[j].Index_GB16[0] && fmt[i+1] == GB_16[j].Index_GB16[1])
249 4 break;
250 4 }
251 3 for(k=0;k<2*HZ_CHR_WIDTH;k++)
252 3 {
253 4 if(j < sizeof(GB_16)/sizeof(GB_16[0]))
254 4 {
255 5 if (mode == 1)
256 5 cData=GB_16[j].Msk_GB16[k];
257 5 else
258 5 cData=~GB_16[j].Msk_GB16[k];
259 5 }
260 4 else
261 4 cData=0;
262 4
263 4 if (k<HZ_CHR_WIDTH) //汉字上半部
264 4 { if ((x+k)<64)
265 5 { Select_Screen(1); //选择左半屏
266 6 Set_Column(x+k);
267 6 }
268 5 else
269 5 { Select_Screen(2); //选择右半屏
270 6 Set_Column(x+k-64);
271 6 }
272 5 Set_Line(y);
273 5 }
274 4 else //汉字下半部
275 4 { if ((x+k-HZ_CHR_WIDTH)<64)
276 5 { Select_Screen(1); //选择左半屏
277 6 Set_Column(x+k-HZ_CHR_WIDTH);
278 6 }
279 5 else
280 5 { Select_Screen(2); //选择右半屏
281 6 Set_Column((x+k-HZ_CHR_WIDTH)-64);
282 6 }
283 5 Set_Line(y+1);
284 5 }
285 4
286 4 Write_Dat(cData);
287 4
288 4 }
289 3 x+=HZ_CHR_WIDTH;
290 3 i++;
291 3 }
292 2
293 2 i++;
294 2 }
C51 COMPILER V7.06 __声瞋 12/20/2007 18:29:07 PAGE 6
295 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 923 ----
CONSTANT SIZE = 476 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 15
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?