📄 lcd.lst
字号:
C51 COMPILER V7.20 LCD 01/08/2007 00:55:49 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.obj
COMPILER INVOKED BY: c:\keil\C51\BIN\C51.EXE lcd\lcd.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\lcd.lst) OBJECT(lcd.obj)
line level source
1
2 //***************************** lcd.c ****************************//
3 //************************ LCM19264驱动程序 **********************//
4
5 #include<lcd\lcd.h>
6
7 /*****************************************************************
8 *函数:wiat_ready_left()
9 *功能:判断液晶左侧屏是否在忙状态
10 *形式参数:无;
11 *返回值:无
12 ******************************************************************/
13 void wait_ready_left(void)
14 {
15 1 unsigned char temp;
16 1 while(1)
17 1 {
18 2 temp=XBYTE[0x9002]; //读状态端口
19 2 if((temp&stat_busy)==0)
20 2 break;
21 2 }
22 1 return;
23 1 }
24
25 /*****************************************************************
26 *函数:wiat_ready_middle()
27 *功能:判断液晶中间屏是否在忙状态
28 *形式参数:无;
29 *返回值:无
30 ******************************************************************/
31 void wait_ready_middle(void)
32 {
33 1 unsigned char temp;
34 1 while(1)
35 1 {
36 2 temp=XBYTE[0x9102]; //读状态端口
37 2 if((temp&stat_busy)==0)
38 2 break;
39 2 }
40 1 return;
41 1 }
42
43 /*****************************************************************
44 *函数:wiat_ready_right()
45 *功能:判断液晶右侧屏是否在忙状态
46 *形式参数:无;
47 *返回值:无
48 ******************************************************************/
49 void wait_ready_right(void)
50 {
51 1 unsigned char temp;
52 1 while(1)
53 1 {
54 2 temp=XBYTE[0x9202]; //读状态端口
55 2 if((temp&stat_busy)==0)
C51 COMPILER V7.20 LCD 01/08/2007 00:55:49 PAGE 2
56 2 break;
57 2 }
58 1 return;
59 1 }
60
61 /*****************************************************************
62 *函数:set_line()
63 *功能:设置行
64 *形式参数:line-行号;
65 *返回值:无
66 ******************************************************************/
67 void set_line(unsigned char line)
68 {
69 1 wait_ready_left();
70 1 write_inst_left(disp_star_line|line);
71 1 wait_ready_middle();
72 1 write_inst_middle(disp_star_line|line);
73 1 wait_ready_right();
74 1 write_inst_right(disp_star_line|line);
75 1 return;
76 1 }
77
78 /*****************************************************************
79 *函数:set_page()
80 *功能:设置页
81 *形式参数:page-页号;
82 *返回值:无
83 ******************************************************************/
84 void set_page(unsigned char page)
85 {
86 1 wait_ready_left();
87 1 write_inst_left(page_addr_set|page);
88 1 wait_ready_middle();
89 1 write_inst_middle(page_addr_set|page);
90 1 wait_ready_right();
91 1 write_inst_right(page_addr_set|page);
92 1 return;
93 1 }
94
95 /*****************************************************************
96 *函数:set_col()
97 *功能:设置列
98 *形式参数:col-列号;
99 *返回值:无
100 ******************************************************************/
101 void set_col(unsigned char col)
102 {
103 1 wait_ready_left();
104 1 write_inst_left(col_addr_set|col);
105 1 wait_ready_middle();
106 1 write_inst_middle(col_addr_set|col);
107 1 wait_ready_right();
108 1 write_inst_right(col_addr_set|col);
109 1 return;
110 1 }
111
112 /*****************************************************************
113 *函数:lcd_clr_quarter()
114 *功能:液晶模块横向清1/4屏
115 *形式参数:part-清除的部分;
116 *返回值:无
117 ******************************************************************/
C51 COMPILER V7.20 LCD 01/08/2007 00:55:49 PAGE 3
118 extern void lcd_clr_quarter(unsigned char part)
119 {
120 1 unsigned char i,page;
121 1 set_line(0);
122 1 for (page=part*2;page<part*2+2;page++)
123 1 {
124 2 set_page(page); //设置当前页
125 2 set_col(0); //设置当前列
126 2 for (i=0;i<64;i++)
127 2 {
128 3 wait_ready_left();
129 3 write_data_left(0x00); //左侧屏当前列数据为0
130 3 wait_ready_middle();
131 3 write_data_middle(0x00); //中间屏当前列数据为0
132 3 wait_ready_right();
133 3 write_data_right(0x00); //右侧屏当前列数据为0
134 3 }
135 2 }
136 1 return;
137 1 }
138
139 /*****************************************************************
140 *函数:lcd_clr()
141 *功能:液晶模块清全屏
142 *形式参数:无;
143 *返回值:无
144 ******************************************************************/
145 extern void lcd_clr(void)
146 {
147 1 unsigned char i,page;
148 1 set_line(0);
149 1 for (page=0;page<8;page++)
150 1 {
151 2 set_page(page); //设置当前页
152 2 set_col(0); //设置当前列
153 2
154 2 for (i=0;i<64;i++)
155 2 {
156 3 wait_ready_left();
157 3 write_data_left(0x00); //左侧屏当前列数据为0
158 3 wait_ready_middle();
159 3 write_data_middle(0x00); //中间屏当前列数据为0
160 3 wait_ready_right();
161 3 write_data_right(0x00); //右侧屏当前列数据为0
162 3 }
163 2 }
164 1 return;
165 1 }
166
167 /*****************************************************************
168 *函数:init_lcd()
169 *功能:液晶模块初始化
170 *形式参数:无;
171 *返回值:无
172 ******************************************************************/
173 extern void init_lcd(void)
174 {
175 1 wait_ready_left();
176 1 write_inst_left(disp_off); //关显示
177 1 wait_ready_middle();
178 1 write_inst_middle(disp_off);
179 1 wait_ready_right();
C51 COMPILER V7.20 LCD 01/08/2007 00:55:49 PAGE 4
180 1 write_inst_right(disp_off);
181 1 set_line(0); //设置开始行为0
182 1 set_page(0); //设置开始页地址为0
183 1 set_col(0); //设置开始列为0
184 1 wait_ready_left();
185 1 write_inst_left(disp_on); //开显示
186 1 wait_ready_middle();
187 1 write_inst_middle(disp_on);
188 1 wait_ready_right();
189 1 write_inst_right(disp_on);
190 1 lcd_clr(); //清屏
191 1 return;
192 1 }
193
194 /*****************************************************************
195 *函数:disp_bmp()
196 *功能:在指定位置显示一个高16个点阵宽W个点阵的位图
197 *形式参数:x-位图横坐标;y-位图纵坐标;width-位图宽度;bmp-位图代码指针;
198 *返回值:无
199 ******************************************************************/
200 /*void disp_bmp(unsigned char x,unsigned char y,unsigned char width,unsigned char *bmp)
201 {
202 unsigned char i,*p;
203 p=bmp;
204 set_line(0);
205 switch(x/64)
206 {
207 case 0: //左侧屏显示
208 set_page(y/8); //显示位图的上半部
209 set_col(x%64);
210 for(i=0;i<width;i++)
211 {
212 wait_ready_left();
213 write_data_left(*p);
214 p++;
215 }
216 set_page(y/8+1);//显示位图的下半部
217 set_col(x%64);
218 for(i=0;i<width;i++)
219 {
220 wait_ready_left();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -