📄 lcd.lst
字号:
C51 COMPILER V6.12 LCD 01/12/2005 11:39:24 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\lcd.OBJ
COMPILER INVOKED BY: d:\4_soft\Keil\C51\BIN\C51.EXE .\lcd.C DEBUG OBJECTEXTEND
stmt level source
1 //文件名:LCD_TEST
2 //说明:本文件实现了对液晶12232A的功能的测试
3
4 /************************************包含的头文件***********************************/
5 #include <AT898252.h>
6 #include <intrins.h>
7
8 /***************************************定义宏**************************************/
9 #define uchar unsigned char
10 #define uint unsigned int
11
12 /*************************************端口声明**************************************/
13 #define DI P2_0 //12232A的指令数据选择端,H;数据,L:指令
14 #define RW P2_1 //12232A的读写选择信号端,H:读,L:写
15 #define E2 P2_2 //12232A的读写使能信号端(从机),H:读使能,L:写使能
16 #define E1 P2_3 //12232A的读写使能信号端(主机),H:读使能,L:写使能
17 #define DB P0 //12232A的数据线
18
19 /***********************************全局变量的定义***********************************/
20 //uchar data lcd_com; //12232A的指令缓冲器
21 //uchar data lcd_data; //12232A的数据缓冲器
22 uchar bdata lcd_status; //12232A的状态存贮缓冲器
23 sbit busy=lcd_status^7; //12232A的忙标志
24
25 /*************************************函数声明***************************************/
26 void delay_s(uint x); //延时子函数
27 void master_write_com(uchar lcd_com); //主机写指令函数
28 void slave_write_com(uchar lcd_com); //从机写指令函数
29 void master_write_data(uchar lcd_data); //主机写显示数据子函数
30 void slave_write_data(uchar lcd_data); //从机写显示数据子函数
31 void lcd_status_read(void); //读液晶状态子函数
32 void lcd_init(void); //液晶显示初始化子函数
33 void clear_display(void); //清显示子函数
34 void main(void); //显示主函数
35
36 /*********************************延时X毫秒函数**************************************/
37 //说明:实现功能:软件延时X毫秒
38 //输入:软件延时的时间:xms
39 //输出:无
40 void delay_s(uint x)
41 {
42 1 uint n;
43 1 while(x!=0)
44 1 {
45 2 for(n=0;n<125;n++) //一次延时1ms
46 2 {;}
47 2 x--;
48 2 }
49 1 }
50
51 /*************************************读液晶状态子函数******************************/
52 //说明:实现的功能:读液晶的状态
53 //输入:无
54 //输出:无
55 void lcd_status_read(void)
C51 COMPILER V6.12 LCD 01/12/2005 11:39:24 PAGE 2
56 {
57 1 DI=0; //数据线上为指令代码
58 1 _nop_();
59 1 _nop_();
60 1 _nop_();
61 1 _nop_();
62 1 RW=1; //读使能
63 1 lcd_status=DB; //读操作
64 1 }
65
66 /***********************************主机写指令函数**********************************/
67 //说明:实现功能:向主机写指令
68 //输入:指令代码
69 //输出:无
70 void master_write_com(uchar lcd_com)
71 {
72 1 E1=1; //主机读使能
73 1 lcd_status_read(); //读液晶状态
74 1 if(busy)
75 1 {
76 2 delay_s(5);
77 2 }
78 1 _nop_();
79 1 _nop_();
80 1 _nop_();
81 1 _nop_();
82 1 E1=0; //主机写使能
83 1 _nop_();
84 1 _nop_();
85 1 _nop_();
86 1 _nop_();
87 1 RW=0; //写使能
88 1 DB=lcd_com; //写指令
89 1 delay_s(5);
90 1 E1=1;
91 1 delay_s(5);
92 1 E1=0;
93 1 }
94
95 /***********************************从机写指令函数**********************************/
96 //说明:实现功能:向从机写指令
97 //输入:指令代码
98 //输出:无
99 void slave_write_com(uchar lcd_com)
100 {
101 1 E2=1; //从机读使能
102 1 lcd_status_read(); //读液晶状态
103 1 if(busy)
104 1 {
105 2 delay_s(5);
106 2 }
107 1 _nop_();
108 1 _nop_();
109 1 _nop_();
110 1 _nop_();
111 1 E2=0; //从机写使能
112 1 _nop_();
113 1 _nop_();
114 1 _nop_();
115 1 _nop_();
116 1 RW=0; //写使能
117 1 DB=lcd_com; //写指令
C51 COMPILER V6.12 LCD 01/12/2005 11:39:24 PAGE 3
118 1 delay_s(5);
119 1 E2=1;
120 1 delay_s(5);
121 1 E2=0;
122 1 }
123
124 /***********************************主机写显示数据子函数**********************************/
125 //说明:实现功能:向主机写数据
126 //输入:显示数据
127 //输出:无
128 void master_write_data(uchar lcd_data)
129 {
130 1 E1=1; //主机读使能
131 1 lcd_status_read(); //读液晶状态
132 1 if(busy)
133 1 {
134 2 delay_s(5);
135 2 }
136 1 _nop_();
137 1 _nop_();
138 1 _nop_();
139 1 _nop_();
140 1 DI=1; //数据线上为数据
141 1 delay_s(5);
142 1 E1=0; //主机写使能
143 1 _nop_();
144 1 _nop_();
145 1 _nop_();
146 1 _nop_();
147 1 RW=0; //写使能
148 1 DB=lcd_data; //写显示数据
149 1 delay_s(5);
150 1 E1=1;
151 1 delay_s(5);
152 1 E1=0;
153 1 }
154
155 /***********************************从机写显示数据子函数**********************************/
156 //说明:实现功能:向从机写数据
157 //输入:显示数据
158 //输出:无
159 void slave_write_data(uchar lcd_data)
160 {
161 1 E2=1; //从机读使能
162 1 lcd_status_read(); //读液晶状态
163 1 if(busy)
164 1 {
165 2 delay_s(5);
166 2 }
167 1 _nop_();
168 1 _nop_();
169 1 _nop_();
170 1 _nop_();
171 1 DI=1; //数据线上为数据
172 1 delay_s(5);
173 1 E2=0; //从机写使能
174 1 _nop_();
175 1 _nop_();
176 1 _nop_();
177 1 _nop_();
178 1 RW=0; //写使能
179 1 DB=lcd_data; //写显示数据
C51 COMPILER V6.12 LCD 01/12/2005 11:39:24 PAGE 4
180 1 delay_s(5);
181 1 E2=1;
182 1 delay_s(5);
183 1 E2=0;
184 1 }
185
186 /**************************************液晶初始化子函数************************************/
187 //说明:函数实现对液晶的初始化:1:复位,2:选择动态驱动,3:选择1/32的占空比,4:选择正向排列顺序
188 // 5:设置显示起始行为第一行,6:开显示
189 //输入:无
190 //输出:无
191 void lcd_init(void)
192 {
193 1 master_write_com(0xe2);
194 1 slave_write_com(0xe2); //复位
195 1
196 1 master_write_com(0xa4);
197 1 slave_write_com(0xa4); //选择动态驱动
198 1
199 1 master_write_com(0xa9);
200 1 slave_write_com(0xa9); //选择占空比:1/32
201 1
202 1 master_write_com(0xa0);
203 1 slave_write_com(0xa0); //选择正向排列顺序
204 1
205 1 master_write_com(0xc0);
206 1 slave_write_com(0xc0); //显示起始行为第一行
207 1
208 1 master_write_com(0xaf);
209 1 slave_write_com(0xaf); //开显示
210 1 }
211
212 /***************************************清显示子函数************************************/
213 //说明:清屏
214 //输入:无
215 //输出:无
216 void clear_display(void)
217 {
218 1 uchar i; //页数
219 1 uchar j; //列数
220 1 for(i=0;i<4;i++)
221 1 {
222 2 master_write_com(i);
223 2 slave_write_com(i); //选取页地址
224 2
225 2 for(j=0;j<80;j++)
226 2 {
227 3 master_write_com(j);
228 3 slave_write_com(j); //选取列地址
229 3
230 3 master_write_data(0);
231 3 slave_write_data(0); //清列
232 3 }
233 2 }
234 1 }
235 /***************************************显示主函数***************************************/
236 //说明:对液晶12232A的性能测试
237 //输入:无
238 //输出:无
239 void main(void)
240 {
241 1 uchar i;
C51 COMPILER V6.12 LCD 01/12/2005 11:39:24 PAGE 5
242 1 uchar j;
243 1 lcd_init(); //显示初始化
244 1 clear_display(); //清屏
245 1
246 1 for(i=0;i<4;i++)
247 1 {
248 2 master_write_com(i);
249 2 slave_write_com(i); //选取页地址
250 2
251 2 for(j=0;j<61;j++)
252 2 {
253 3 master_write_com(j);
254 3 slave_write_com(j); //选取列地址
255 3
256 3 master_write_data(0xaa);
257 3 slave_write_data(0xaa); //送显示数据
258 3 }
259 2 }
260 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 344 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -