📄 12864lcd.lst
字号:
157 void Lcd_init(void) //初始化LCD
158 {
159 1 Delaynms(10); //启动等待,等LCM讲入工作状态
160 1 CS=1;
161 1 Write_char(0,0x30); //基本指令集 //功能设定
162 1 Write_char(0,0x0c); //显示打开,
163 1 Write_char(0,0x01); //清屏,将DDRAM的地址计数器归零
164 1 }
165
166 /******************************************************************************/
167 void Write_char(bit start, unsigned char ddata) //写指令或数据
168 {
169 1 unsigned char start_data,Hdata,Ldata;
170 1 if(start==0)
171 1 start_data=0xf8; //写指令
172 1 else
173 1 start_data=0xfa; //写数据
174 1 Hdata=ddata&0xf0; //取高四位
175 1 Ldata=(ddata<<4)&0xf0; //取低四位
176 1 Send_byte(start_data); //发送起始信号
177 1 Delayms(1); ;
178 1 Send_byte(Hdata); //发送高四位
179 1 Delayms(1); ;
C51 COMPILER V7.20 12864LCD 11/11/2007 20:05:47 PAGE 4
180 1 Send_byte(Ldata); //发送低四位
181 1 Delayms(1);
182 1 }
183
184 /******************************************************************************/
185 void Send_byte(unsigned char bbyte) //发送一个字节
186 {
187 1 unsigned char i;
188 1 for(i=0;i<8;i++)
189 1 {
190 2 SID=bbyte&0x80; //取出最高位
191 2 SCLK=1;
192 2 SCLK=0;
193 2 bbyte<<=1;
194 2 }
195 1 }
196 void Delaynms(unsigned int di) //延时
197 {
198 1 unsigned int da,db;
199 1 for(da=0;da<di;da++)
200 1 for(db=0;db<10;db++);
201 1 }
202 void Delayms(unsigned int time) //延时函数
203 {
204 1 unsigned int data j;
205 1 unsigned int data i;
206 1 for(i=0;i<time;i++)
207 1 for(j=0;j<121;j++)
208 1 _nop_();
209 1 }
210 void Disp_img(unsigned char *img) //图形显示 字模221 横向取膜
211 {
212 1 unsigned char i,j;
213 1 unsigned int k =0 ;
214 1 for(i=0;i<32;i++)
215 1 {
216 2 Write_char(0,0x80+i);
217 2 Write_char(0,0x80);
218 2 for(j=0;j<16;j++)
219 2 Write_char(1,img[k++]);
220 2 }
221 1 for(i=0;i<32;i++)
222 1 {
223 2 Write_char(0,0x80+i);
224 2 Write_char(0,0x88);
225 2 for(j=0;j<16;j++)
226 2 Write_char(1,img[k++]);
227 2 }
228 1 }
229
230 /*****************************************************************************/
231 void Lcd_img_Cls(void) //图形方式下清屏
232 {
233 1 unsigned char i,j;
234 1 for(i=0;i<32;i++)
235 1 {
236 2 Write_char(0,0x80+i);
237 2 Write_char(0,0x80);
238 2 for(j=0;j<16;j++)
239 2 Write_char(1,0x00);///for test
240 2 }
241 1 for(i=0;i<32;i++)
C51 COMPILER V7.20 12864LCD 11/11/2007 20:05:47 PAGE 5
242 1 {
243 2 Write_char(0,0x80+i);
244 2 Write_char(0,0x88);
245 2 for(j=0;j<16;j++)
246 2 Write_char(1,0x00);
247 2 }
248 1 }
249
250
251 void LCD_set_xy( unsigned char x, unsigned char y ) //设置LCD显示的起始位置,X为行,Y为列
252 {
253 1 unsigned char address;
254 1 switch(x)
255 1 {
256 2 case 1: address = 0x80 + y; break;
257 2 case 2: address = 0x90 + y; break;
258 2 case 3: address = 0x88 + y; break;
259 2 case 4: address = 0x98 + y; break;
260 2 default:address = 0x80 + y; break;
261 2 }
262 1 Write_char(0, address);
263 1 }
264
265 void LCD_Write_char_string(unsigned char X,unsigned char Y, unsigned char *s)
266 {
267 1 LCD_set_xy( X, Y );
268 1 while (*s)
269 1 {
270 2 Write_char( 1, *s );
271 2 s ++;
272 2 Delaynms(1);
273 2 }
274 1 }
275
276 /******************************************************************************/
277 void main(void)
278 {
279 1 unsigned char i;
280 1 // LCD_Write_char_string(1,0,(unsigned char * )&a );//在第2行第0列开始显示
281 1 // Write_char(0,0x08);//SLEEP
282 1
283 1 // Write_char(0,0x0C);//WAKE;
284 1 Lcd_init();//初始化LCD,从图形显示状态下返回
285 1 while(1)
286 1 {
287 2 Lcd_init();//初始化LCD,从图形显示状态下返回
288 2 Write_char(0,0x80); //设置起始地址
289 2 for(i=0;i<28;i++)
290 2 {
291 3 Write_char(1,ma[i]);//16 = 8个汉字
292 3 if((i>19) || (i< 16))
293 3 Delayms(1000);
294 3 }
295 2 Write_char(0,0x01);//清屏
296 2 Delayms(1000);
297 2 Write_char(0,0x36); //图形方式
298 2 Disp_img(xiongmao);//显示12864图片
299 2 Delayms(4000);
300 2 Lcd_img_Cls();
301 2 }
302 1
303 1 }
C51 COMPILER V7.20 12864LCD 11/11/2007 20:05:47 PAGE 6
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 627 ----
CONSTANT SIZE = 2088 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 18
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -