📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 05/18/2002 13:46:58 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\keil\新建文件夹\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <c8051f020.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5
6 void Lcd1602_Write_Command(uchar Command_Code);
7 void Lcd1602_Write_Data(uchar row,uchar column,uchar Data); //row取1或2,column取0到15
8 void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer);
9 void delay(uint t1,t2);
10
11 void Lcd1602_initial( )
12 {
13 1 Lcd1602_Write_Command(0x38);//显示模式设置
14 1 Lcd1602_Write_Command(0x0c);//开显示,显示光标,光标闪烁
15 1 Lcd1602_Write_Command(0x01);//显示清屏。
16 1 Lcd1602_Write_Command(0x06);//显示光标自动右移,整屏不移动。
17 1
18 1 Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
19 1 Lcd1602_Write_Command(0x02);//数据指针清零
20 1 Lcd1602_Write_Command(0x0c);//开显示,显示光标,光标闪烁
21 1 Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
22 1
23 1 }
24
25
26 //===========================
27 //写一个命令字节
28 //===========================
29 void Lcd1602_Write_Command(uchar Command_Code)
30 {
31 1 P4=0x00; //RS=0,RW=0
32 1 P5=Command_Code;
33 1 delay(10,1);
34 1 P4 |=0x04; //EN=1
35 1 delay(10,10);
36 1 P4 &=~0x04; //EN=0
37 1
38 1 }
39 //===========================
40 //写一个字节数据
41 //===========================
42
43 void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
44 {
45 1
46 1 if (row==2)
47 1 column |= 0x40; //当要显示第二行时地址码+0x40;
48 1 column |= 0x80; // 算出指令码
49 1
50 1 Lcd1602_Write_Command(column); //这里不检测忙信号,发送地址码
51 1
52 1 P4=0x01; //RS=1,RW=0
53 1 P5=Data;
54 1 delay(10,10);
55 1 P4 |=0x04; //EN=1
C51 COMPILER V8.02 LCD 05/18/2002 13:46:58 PAGE 2
56 1 delay(10,10);
57 1 P4 &=~0x04; //EN=0
58 1
59 1 }
60
61
62 //===========================================
63 //写字符串到LCD,如果一行写不下,则写到下一行,
64 //如果一屏写不下,则只写一屏
65 //row的值从1-2,column的值从1-16,不进行值的
66 //有效性检查,有调用者自己保证
67 //===========================================
68
69 void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer)
70 {
71 1 uchar i=0;
72 1
73 1 while(dis_buffer[i]!='\0')
74 1 {
75 2 Lcd1602_Write_Data(row,column,dis_buffer[i]);
76 2 i++;column++;
77 2 if(column==40)
78 2 {
79 3 column=1;
80 3 row++;
81 3 if(row==2)
82 3 return;
83 3 else
84 3 {
85 4 switch(row)//这种结构保持以后升级到多行显示液晶
86 4 {
87 5 case 1:Lcd1602_Write_Command(0x80);break;
88 5 case 2:Lcd1602_Write_Command(0x80+0x40);break;//重新调整数据地址指针
89 5 default:break;
90 5 }
91 4 }
92 3 }
93 2 }
94 1 }
95
96 void delay(uint t1,t2)
97 {
98 1 long int i,j; //为什么不能改为uint ,一改即有问题
99 1 for(i=1;i<t1;i++)
100 1 for(j=1;j<t2;j++);
101 1
102 1 }
103
104
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 313 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -