📄 mcs51-项目开发经典.lst
字号:
185 { SBUF = uart_data_out;
186 1 while(TI==0);
187 1 TI=0;
188 1 }
189 //-------------------------------------------------------------------------------------------------
190 //函数功能:串口发射字符数组。通常将要发送的字符数组定义在CODE代码区。
191 void uart_string_out(char * char_array)
192 { uchar i;
193 1 for(i=0; i<strlen(char_array) ;i++)
194 1 {
195 2 uart_byte_out(char_array[i]);
196 2 }
197 1 }
198
199 // 液晶ST7920驱动程序
200 //=================================================================================================
201 //-------------------------------------------------------------------------------------------------
202 // 函数功能:液晶并行写数据或写指令
203 // 形参:dat_or_comm 区分指令或数据,由宏定义可知 comm表示指令,dat表示数据
204 // content 指令或数据内容
205 void write_lcd (uchar dat_comm,uchar content)
206 {
207 1 check_busy ();
208 1 if(dat_comm)
209 1 {rs=1; //data
210 2 rw=0; //write
211 2 }
212 1 else
213 1 {rs=0; //command
214 2 rw=0; //write
215 2 }
216 1 P0=content; //output data or comm
217 1 e=1;
218 1 e=0;
219 1 }
220 //-------------------------------------------------------------------------------------------------
221 uchar read_lcd (void)
222 { uchar fhz;
223 1 check_busy ();
224 1 P0=0xff;
225 1 rs=1;
226 1 rw=1;
227 1 e=1;
228 1 fhz=P0;
229 1 e=0;
230 1 return(fhz) ;
231 1 }
232 //-------------------------------------------------------------------------------------------------
233 //函数功能:判断液晶忙闲
234 void check_busy (void)
235 { uint max_delay_time=65535;
236 1 P0=0xff;
237 1 rs=0;
238 1 rw=1;
239 1 e =1;
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/07/2008 20:01:11 PAGE 5
240 1 while(busy==1)
241 1 {
242 2 max_delay_time--;//如果busy==1条件永远满足不了(如液晶损坏),则延时一段时间后退出
243 2 if(max_delay_time==0) break;
244 2 }
245 1 e =0;
246 1 }
247 //-------------------------------------------------------------------------------------------------
248 // 函数功能:液晶模块初始化
249 void init_lcd (void)
250 {
251 1 write_lcd (comm,0x30); //6 功能设定:使用基本指令动作,8位控制接口
252 1 write_lcd (comm,0x01); //1 清屏:DDRAM全部写20H,地址指针指向00H
253 1 write_lcd (comm,0x02); //2 地址归位:地址指针指向00H
254 1 write_lcd (comm,0x06); //3 点设定:置光标右移,AC自动加 1,整体显示不移动
255 1 write_lcd (comm,0x0c); //4 显示状态设定:置整体显示开,光标关,光标位置不反白闪烁
256 1 write_lcd (comm,0x14); //5 光标或显示移位控制:光标右移,AC加 1
257 1 }
258 //-------------------------------------------------------------------------------------------------
259 // 函数功能:刷新图像
260 void image_clear(void)
261 {
262 1 uchar y_zb,x_zb;
263 1
264 1 for(y_zb=0;y_zb<32;y_zb++)
265 1 {for(x_zb=0;x_zb<8;x_zb++)
266 2 {line_display (y_zb, x_zb, 0x0000);
267 3 }
268 2 }
269 1 }
270 //-------------------------------------------------------------------------------------------------
271 // 函数功能:清DDRAM
272 void lcm_clear_ram (void)
273 {
274 1 write_lcd (comm,0x30);
275 1 write_lcd (comm,0x01);
276 1 }
277 //-------------------------------------------------------------------------------------------------
278 // 函数功能:显示汉字或字符
279 // 12232C液晶模块的显示结构为:共2行显示,每行可显示15个字符或7个半汉字
280 // 显示内容可以字符和汉字混排,方法如下:
281 // 即一个汉字为2字节,一个字符1字节,汉字字符可以穿插,只要保证每行15字节就可正确显示
282 void chinese_or_character_display (uchar code *char_name)
283 {
284 1 uchar i;
285 1 write_lcd (comm,0x30);
286 1
287 1 write_lcd (comm,0x80);//设定DDRAM地址到地址计数器AC,即第一行显示首址
288 1 for (i=0;i<15;i++)
289 1 {write_lcd (dat,char_name[i]);//显示第一行内容,要显示字符串的0-14字节
290 2 }
291 1 write_lcd (comm,0x90);//设定DDRAM地址到地址计数器AC,即第二行显示首址
292 1 for (i=15;i<30;i++)
293 1 {write_lcd (dat,char_name[i]);//显示第二行内容,要显示字符串的15-29字节
294 2 }
295 1 }
296 //-------------------------------------------------------------------------------------------------
297 // 函数功能:显示图片
298 void image_display (uchar code *img)
299 {
300 1 uchar i,j;
301 1 for(j=0;j<32;j++)
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/07/2008 20:01:11 PAGE 6
302 1 {
303 2 for(i=0;i<8;i++)
304 2 {
305 3 write_lcd (comm,0x34);
306 3 write_lcd (comm,y+j);
307 3 write_lcd (comm,x+i);
308 3 write_lcd (comm,0x30);
309 3 write_lcd (dat,img[j*16+i*2]);
310 3 write_lcd (dat,img[j*16+i*2+1]);
311 3 }
312 2 }
313 1 write_lcd (comm,0x36);//绘图显示开
314 1 }
315 //-------------------------------------------------------------------------------------------------
316 void line_display (uchar y_coordinate, uchar x_coordinate, uint show_data)
317 {
318 1 uchar data_high,data_low;
319 1 data_high = (show_data & 0xff00)>>8;
320 1 data_low = show_data & 0x00ff;
321 1
322 1 write_lcd (comm,0x34);
323 1 write_lcd (comm,0x80 + y_coordinate);
324 1 write_lcd (comm,0x80 + x_coordinate);
325 1
326 1 write_lcd (comm,0x30);
327 1
328 1 write_lcd (dat,data_high);
329 1 write_lcd (dat,data_low);
330 1
331 1 write_lcd (comm,0x36);//绘图显示开
332 1 }
333 //-------------------------------------------------------------------------------------------------
334 uint line_read (uchar y_coordinate, uchar x_coordinate)
335 {
336 1 uchar data_high,data_low;
337 1 uint data_backup;
338 1
339 1 write_lcd (comm,0x34);
340 1 write_lcd (comm,0x80 + y_coordinate);
341 1 write_lcd (comm,0x80 + x_coordinate);
342 1
343 1 write_lcd (comm,0x30);
344 1 read_lcd ();
345 1 data_high = read_lcd ();
346 1 data_low = read_lcd ();
347 1
348 1 data_backup = data_high;
349 1 data_backup = (data_backup<<8) | data_low;
350 1
351 1 return(data_backup);
352 1 }
353 //=================================================================================================
354 // T1中断服务程序
355 //=================================================================================================
356 void T1_interrupt(void) interrupt 3
357 {
358 1 TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
359 1 TL1=0x00;
360 1 t1_delay_time++;//在需要延时的地方清空并判断该变量
361 1 }
362 //=================================================================================================
363 // end of the file
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/07/2008 20:01:11 PAGE 7
364 //=================================================================================================
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 665 ----
CONSTANT SIZE = 587 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 25
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -