lcd驱动编写代码
2011-04-24 10:04
363 查看
//lcd.h //By 小E VER 0.1 QQ592646022 #define u16 unsigned int #define u8 unsigned char //LCD ADDR #define WRITECMD 0 #define READCMD 2 #define WRITEDATA 1 #define READDATA 3 //LCD REG #define LCDCLS 1 #define LCDHOME 2 #define LCDVISIBLE 8 #define LCDRESET 0x38 #define LCDSETMODE 4 #define LCDSHIFT 16 #define LCDFUCTION 32 #define LCDSETCGADDR 0x40 #define LCDSETDDADDR 0x80 #define LCDCURSORADD 0xe #define LCDCURSORDEC 0xa #define LCDNOCURSORADD 4 #define LCDNOCURSORDEC 0 void lcd_write_cmd(u8 cmd); //写命令 void lcd_write_data(u8 dat); //写数据 void lcd_wait_busy(); //等待不忙 void delay(u16 time); //延时 void lcd_set_xy(u8 x,u8 y); //设置坐标 void lcd_write_string(u8 * pch); //输出字符串 void lcd_write_charxy(u8 ch,u8 x,u8 y); //在坐标(x,y)输出字符 x=列 y=行 void lcd_write_char(u8 ch); //输出字符 void lcd_reset_cursor(); //光标复位 void lcd_cls(); //清屏 bit lcd_is_busy(); //测试是否为忙 返回1忙,0不忙 void lcd_write_cgram(u8 * pcgram); //写cgram数据 //lcd.c #include "lcd.h" #include <reg51.h> #include <absacc.h> void delay(u16 time){ u16 i; for(i=0;i<time;i++){ } } void lcd_set_xy(u8 x,u8 y){ if(y==0){ x|=0x80; }else{ x|=0xc0; } lcd_write_cmd(x); } void lcd_write_string(u8 * pch){ while(*pch){ PBYTE[WRITEDATA]=*pch; lcd_wait_busy(); pch++; } } void lcd_write_charxy(u8 ch,u8 x,u8 y){ lcd_set_xy(x,y); lcd_wait_busy(); lcd_write_data(ch); } void lcd_write_char(u8 ch){ lcd_write_data(ch); } void lcd_write_cmd(u8 cmd){ PBYTE[WRITECMD]=cmd; } void lcd_write_data(u8 dat){ PBYTE[WRITEDATA]=dat; } void lcd_reset_cursor(){ PBYTE[WRITECMD]=0x02; } void lcd_cls(){ PBYTE[WRITECMD]=LCDCLS; } bit lcd_is_busy(){ u8 t; t=PBYTE[READCMD]; return t&0x80; } void lcd_wait_busy(){ while(lcd_is_busy()){ } } void lcd_write_cgram(u8 * pcgram){ u8 i,j,number=0,addrcgram=LCDSETCGADDR; for(i=0;i<8;i++){ for(j=0;j<8;j++){ lcd_write_cmd(addrcgram+j); lcd_wait_busy(); lcd_write_data(pcgram[number++]); } addrcgram+=8; } } void main(){ u8 i,j; u8 table[]="Hello,World."; u8 table1[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E, 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01, 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00, 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心图案 lcd_write_cmd(LCDRESET); lcd_wait_busy(); lcd_write_cmd(LCDVISIBLE|LCDNOCURSORADD); lcd_wait_busy(); lcd_cls(); lcd_wait_busy(); lcd_write_cgram(table1); lcd_wait_busy(); while(1){ lcd_set_xy(0,0); lcd_wait_busy(); lcd_write_data(0xff); delay(5000); lcd_wait_busy(); lcd_write_string(table); delay(5000); lcd_wait_busy(); for(i=0;i<4;i++){ lcd_wait_busy(); lcd_set_xy(15+i,0); lcd_wait_busy(); lcd_write_char(i); } for(i=4;i<8;i++){ lcd_wait_busy(); lcd_set_xy(15+i-4,1); lcd_wait_busy(); lcd_write_char(i); } delay(5000); } } //电路连接图 //实验结果
//实验结果
相关文章推荐
- linux驱动LCD 驱动程序代码编写
- LCD驱动之编写代码
- Android架构实例分析之编写hello驱动的HAL层代码
- S3C2440裸机学习[2] - LCD驱动原理及代码分析[一]
- S5PV210(TQ210)学习笔记——LCD驱动编写
- 编写驱动拦截NT的API实现隐藏文件目录(代码)
- S5PV210(TQ210)学习笔记——LCD驱动编写
- Linux platform驱动代码编写
- Linux LCD 驱动编写<二>
- S3C2440裸机学习 - LCD驱动原理及代码分析[一]
- S3C2440裸机学习[2] - LCD驱动原理及代码分析[二]
- 【Tiny6410 And Linux】—(6.2)—LCD 驱动测试程序(BMP 显示位图)——代码
- Linux驱动编写(块设备驱动代码)
- S3C2440裸机学习- LCD驱动原理及代码分析[二]
- mini2440学习之——移植LCD驱动移植代码中相关的修改部分!
- LCD驱动程序——代码编写(二)
- pxa270&Linux2.6蜂鸣器驱动编写代码
- 最佳程序设计探索之一:需求驱动编写自顶向下的代码
- 【嵌入式linux驱动开发】第十节 LCD 背光驱动代码架构分析(1)
- LCD驱动编写小节