📄 lcd_51.lst
字号:
C51 COMPILER V7.06 LCD_51 11/10/2008 22:12:04 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD_51
OBJECT MODULE PLACED IN lcd_51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_51.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define _LCD_51_C_
2 #include "LCD_51.h"
3
4 //==========================================
5 //函数名称:液晶模块使能
6 //函数作用: 使能液晶
7 //入口参数: 无
8 //返回类型:无
9 //==========================================
10 void LCD_en_write(void) reentrant
11 {
12 1 EN_SET;
13 1 delay_nus(4);
14 1 EN_CLR;
15 1 }
16
17 //==========================================
18 //函数名称:写指令
19 //函数作用:
20 //入口参数: 液晶指令command
21 //返回类型:无
22 //==========================================
23 void LCD_write_command(uchar command) reentrant
24 {
25 1 delay_nus( 16 );
26 1 RS_CLR;
27 1 DB &= 0X0F; //清高四位
28 1 DB |= command & 0xf0; //写高四位
29 1 LCD_en_write();
30 1 command=command << 4; //低四位移到高四位
31 1 DB &= 0x0f; //清高四位
32 1 DB |= command & 0xf0; //写低四位
33 1 LCD_en_write();
34 1 //delay_nms(2); //清屏指令时间很长, 保险起见,可以增加
35 1 }
36
37 //==========================================
38 //函数名称:写数据
39 //函数作用:
40 //入口参数: 数据DATA
41 //返回类型:无
42 //==========================================
43 void LCD_write_data(uchar DATA) reentrant
44 {
45 1 delay_nus(16);
46 1 RS_SET; //RS=1
47 1 DB &= 0X0f; //清高四位
48 1 DB |= DATA&0xf0; //写高四位
49 1 LCD_en_write();
50 1 DATA = DATA << 4; //低四位移到高四位
51 1 DB &= 0X0f; //清高四位
52 1 DB |= DATA&0xf0; //写低四位
53 1 LCD_en_write();
54 1 }
55
C51 COMPILER V7.06 LCD_51 11/10/2008 22:12:04 PAGE 2
56 //==========================================
57 //函数名称:液晶初始化函数
58 //函数作用:
59 //入口参数: 无
60 //返回类型:无
61 //==========================================
62 void LCD_init( void )reentrant
63 {
64 1 LCD_write_command(0x28);
65 1 LCD_en_write(); //********总结这里一定要加这液晶使能*********
66 1 delay_nus(20);
67 1 LCD_write_command(0x28); //4位显示
68 1 LCD_write_command(0x0c); //显示开
69 1 LCD_write_command(0x01); //清屏
70 1 delay_nms(5); //延时一定要长
71 1 }
72
73 //==========================================
74 //函数名称:写地址
75 //函数作用:
76 //入口参数: 行位置r, 列位置c
77 //返回类型:无
78 //==========================================
79 void LCD_set_rc( uchar r, uchar c )reentrant
80 {
81 1 uchar address;
82 1
83 1 if (r == 1)
84 1 address = 0x80 + c;
85 1 else if(r == 2)
86 1 address = 0xc0 + c;
87 1
88 1 LCD_write_command( address );
89 1 }
90
91 //==========================================
92 //函数名称:写字符串
93 //函数作用: 在指定位置写一串字符串
94 //入口参数: 行位置r, 列位置c, 字符串*s
95 //返回类型:无
96 //==========================================
97 void LCD_write_string(uchar r, uchar c, uchar *s)reentrant
98 {
99 1 LCD_set_rc( r, c ); //写地址
100 1
101 1 while( *s ) // 写显示字符
102 1 {
103 2 LCD_write_data( *s );
104 2 s++;
105 2 }
106 1 }
107
108 void LCD_write_char(uchar r, uchar c, uchar DATA)reentrant //写字符
109 {
110 1 LCD_set_rc( r, c );
111 1 LCD_write_data( DATA );
112 1 }
113
114 //==========================================
115 //函数名称:写字符数组
116 //函数作用: 在指定位置写一串字符串
117 //入口参数: 行位置r, 列位置c, 字符数组chardata[], 字符个数
C51 COMPILER V7.06 LCD_51 11/10/2008 22:12:04 PAGE 3
118 //返回类型:无
119 //==========================================
120 void LCD_write_array( uchar r, uchar c, uchar array[] )reentrant
121 {
122 1 uchar i = 0;
123 1 while( array[i] != '\0' )
124 1 {
125 2 LCD_write_char( r, c, array[i] );
126 2 if( ++c == 16 )
127 2 {
128 3 if( r == 1 )
129 3 {
130 4 c = 0;
131 4 r = 2;
132 4 LCD_write_char( r, c, array[i] );
133 4 }
134 3
135 3 else if( r == 2 )
136 3 {
137 4 c = 0;
138 4 r = 1;
139 4 LCD_write_char( r, c, array[i] );
140 4 }
141 3 }
142 2 i++;
143 2 }
144 1 }
145
146
147 //==========================================
148 //函数名称:显示一个整型数据
149 //函数作用: 在指定位置显示整数
150 //入口参数: 行位置r, 列位置c, 字符数组dataint[]
151 //返回类型:无
152 //==========================================
153 void LCD_write_datalongint( uchar r, uchar c, long int dataint )reentrant
154 {
155 1 uchar datachar1[8];
156 1 uchar datachar2[8];
157 1 uchar n = 0;
158 1 uchar i =0;
159 1 uchar k =0; //取字符个数
160 1 uchar kk = 0; //取字符个数
161 1 long int datainttmp = dataint;
162 1
163 1 while( datainttmp != 0 )
164 1 {
165 2 datachar1[n++] = ( datainttmp % 10 ) + 0x30; //转换为字符
166 2 datainttmp /= 10;
167 2 }
168 1
169 1 if( dataint != 0 ) //*/*//*/
170 1 {
171 2 k = n - 1;
172 2 kk = n;
173 2
174 2 for( i = 0; i < kk; i++, k-- )
175 2 {
176 3 datachar2[k] = datachar1[i]; //将数字符串倒过来
177 3 }
178 2
179 2 LCD_set_rc( r, c );
C51 COMPILER V7.06 LCD_51 11/10/2008 22:12:04 PAGE 4
180 2 for( i = 0; i < kk; i++ )
181 2 {
182 3 LCD_write_char( r, c++, datachar2[i] );
183 3 }
184 2 }
185 1
186 1 else
187 1 LCD_write_char( r, c, '0' );
188 1 }
189
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 786 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -