📄 lcd1602.lst
字号:
C51 COMPILER V8.02 LCD1602 04/25/2009 20:54:56 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: D:\keilc51\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<c8051f020.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 //***************程序说明*******************
6 // 对字符型液晶显示器定义三根地址线:
7 // sbit RS=P4^0;sbit RW=P4^1;sbit EN=P4^2;
8 // 由于P4口在f020单片机上不可位寻址,故以下
9 // 程序均采用对P4口赋值的形式给三根控制位赋值
10 //*******************************************
11
12 //*******************************************
13 // 该部分主要是对要用到的函数进行申明
14 // 后面将具体的对相关函数进行定义,可选择性的选
15 // 择相关函数
16 //*******************************************
17 void Lcd1602_Initial( );
18 void Lcd1602_Write_Command(uchar Command_Code);
19 void Lcd1602_Write_Data(uchar row,uchar column,uchar Data);
20 void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer);
21 //void Lcd1602_Clear_Char(uchar row,uchar column);
22 //void Lcd1602_Clear_Line(uchar line); //前两个函数没用
23 //void Lcd1602_Clear_All( ); //这个函数只在AD9851中用
24
25 void Lcd_delay(uint t1,t2);
26 //void Lcd_delay(uint t1,uint t2); 可以写成上面这种方式
27
28 //**********************************************
29 // 功能说明:对字符型液晶显示器LCD1602进行初始化
30 // 输入变量:无 ; 全局变量:无
31 // 返回值: 无
32 // 调用函数:Lcd1602_Write_Command()
33 //**********************************************
34 void Lcd1602_Initial( )
35 {
36 1 Lcd1602_Write_Command(0x38);//显示模式设置:0011(数据位8位),1(双行显示)0(5*7点阵)**
37 1 Lcd1602_Write_Command(0x0c);//显示开关设置:0000,11(开显示),1(开光标),1(字符闪烁)
38 1 Lcd1602_Write_Command(0x01);//清屏显示设置:显示清屏。
39 1 Lcd1602_Write_Command(0x06);//输入方式设置:0000,011(光标自左向右移)0(整屏不移动)。
40 1 Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
41 1 Lcd1602_Write_Command(0x02);//光标复位命令:数据指针清零
42 1 Lcd1602_Write_Command(0x0c);//开显示,显示光标,光标闪烁
43 1 Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
44 1 }
45
46 //**************************************************
47 // 功能说明:对字符型液晶显示器LCD1602写入控制字
48 // 输入变量:uchar Command_Code ;全局变量:无
49 // 返回值 :无
50 // 调用函数 :无
51 //**************************************************
52 void Lcd1602_Write_Command(uchar Command_Code)
53 {
54 1 P4=0x00; //RS=0;RW=0;EN=0;开始写入指令
55 1 P5=Command_Code; //将待写入指令赋给P5口
C51 COMPILER V8.02 LCD1602 04/25/2009 20:54:56 PAGE 2
56 1 Lcd_delay(10,1);
57 1 P4=0x04; //NE=1;开启使能
58 1 Lcd_delay(10,10);
59 1 P4=0x00; //EN=0;当EN由高向底转变时,LCD接收数据或指令
60 1 }
61
62 //**************************************************
63 // 功能说明:对字符型液晶显示器LCD1602写入数据
64 // 输入变量:uchar row,uchar column,uchar Data
65 // 其中 row的取值范围为:1-- 2
66 // column的取值范围为:0--15
67 // 全局变量 :无 ;返回值 : 无
68 // 调用函数 :Lcd1602_Write_Command()
69 //**************************************************
70 void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
71 {
72 1 if (row==2)
73 1 column |= 0x40; //当要显示第二行时,相应的地址码为当前列数+0x40;
74 1 column |= 0x80; //算出指令码即让DDRAM指针指向相应的位置
75 1
76 1 Lcd1602_Write_Command(column); //这里不检测忙信号,发送地址码
77 1
78 1 P4=0x01; //RS=1;RW=0;EN=0;开始写入数据
79 1 P5=Data;
80 1 Lcd_delay(10,10);
81 1 P4=0x05; //EN=1
82 1 Lcd_delay(10,10);
83 1 P4=0x01; //EN=0
84 1 }
85
86 //***********************************************************
87 // 功能说明:写字符串到LCD,如果一行写不下,则写到下一行
88 // 如果一屏写不下,则只写一屏;
89 // 输入变量:uchar row,uchar column,uchar *dis_buffer
90 // 全局变量 :无 ;返回值 : 无
91 // 调用函数 :Lcd1602_Write_Data();
92 // Lcd1602_Write_Command ;
93 //***********************************************************
94 void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer)
95 {
96 1 uchar i=0;
97 1 while(dis_buffer[i]!='\0')
98 1 {
99 2 Lcd1602_Write_Data(row,column,dis_buffer[i]);
100 2 i++;column++;
101 2 if(column==40)
102 2 {
103 3 column=1;
104 3 row++;
105 3 if(row==2) return;
106 3 else
107 3 {
108 4 switch(row) //这种结构保持以后升级到多行显示液晶
109 4 {
110 5 case 1:Lcd1602_Write_Command(0x80);break;
111 5 case 2:Lcd1602_Write_Command(0x80+0x40);break;//重新调整数据地址指针
112 5 default:break;
113 5 }
114 4 }
115 3 }
116 2 }
117 1 }
C51 COMPILER V8.02 LCD1602 04/25/2009 20:54:56 PAGE 3
118
119 //************************************************************
120 // 功能说明:清除指定的位置的字符,光标返回最左边第一个字符位置
121 // 输入变量:uchar row,uchar column ;全局变量:无
122 // 返回值 : 无
123 // 调用函数 : Lcd1602_Write_String()
124 //************************************************************
125 /*void Lcd1602_Clear_Char(uchar row,uchar column)
126 {
127 Lcd1602_Write_String(row,column," ");
128 }*/
129
130 //*************************************************************
131 // 功能说明:清除指定的行,光标返回最左边第一个字符位置
132 // 输入变量:uchar line ; 全局变量 : 无
133 // 返回值 : 无
134 // 调用函数 :Lcd1602_Write_String();Lcd1602_Write_Command()
135 //*************************************************************
136 /*void Lcd1602_Clear_Line(uchar line)
137 {
138 Lcd1602_Write_String(line,0," ");
139 switch(line) //这种结构保持以后升级到多行显示液晶
140 {
141 case 1:Lcd1602_Write_Command(0x80);break; //将数据地址指针定位到第一行
142 case 2:Lcd1602_Write_Command(0x80+0x40);break; //将数据地址指针定位到第二行
143 default: break;
144 }
145 } */
146
147 //**************************************************************
148 // 功能说明:清屏,并将DDRAM指针指向第一行第一列
149 // 输入变量:无 ;全局变量: 无 ;返回值:无
150 // 调用函数:Lcd1602_Write_Command()
151 //***************************************************************
152 /*void Lcd1602_Clear_All( )
153 {
154 Lcd1602_Write_Command(0x01);//显示清屏。
155 Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
156 } */
157
158 //**************************************************************
159 // 功能说明:延时
160 // 输入变量:uint t1,t2 全局变量:无 ;返回值:无
161 // 调用函数:无
162 //*************************************************************
163
164 //void Lcd_delay(uint t1,uint t2)可以写成下面这种方式
165 void Lcd_delay(uint t1,t2)
166 {
167 1 uint i,j;
168 1 for(i=1;i<t1;i++)
169 1 for(j=1;j<t2;j++);
170 1
171 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 222 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
C51 COMPILER V8.02 LCD1602 04/25/2009 20:54:56 PAGE 4
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 + -