风骚的51+LCD1602控制(四位,八位控制),1602函数全集+写入字库
LCD1602写字库在文档后面。
LCD1602演示程序(很多函数哦)控制芯片为HD44780
函数都是经过测试的,实物显示都通过了,呵呵,请大家放心使用^_^
呵呵,支持四线数据接口模式,可以任意切换编程,只须改模式选择Port_Type_Select就可以咯!很方便的。
并且我说一下我的个人体会,希望大家在写程序的时候,最好考虑一下程序的可移植性,而且要方便更改参数和硬件资源的选择,最好使用条件编译,任意切换硬件资源,可以方便以后更改参数,就会省去以后不少的不必要的麻烦和错误以及宝贵的时间
里面有标准测试,如果您觉得好的话,请您帮忙顶一下,希望有更多的朋友能知道的更多,更好,学习得更快^_^一起努力加油,写出更好的功能函数。
先简单介绍一下功能函数吧:
/*--------------------------------------------------------------*/
//模式选择(条件编译)
#define Port_Type_Select 1 //=1, 选择八位数据模式
//=0, 选择四位数据模式, LCD高四位接MCU端口高四位
//模式选择(条件编译)
#define Port_Type_Select 1 //=1, 选择八位数据模式
//=0, 选择四位数据模式, LCD高四位接MCU端口高四位
/*--------------------------------------------------------------*/
//函数声明
void LCD_busy (void); //检测LCD是否忙
void LCD_init (void); //LCD初始化
void LCD_cmd (unsigned char cmd); //写入指令
void LCD_dat (unsigned char dat); //写入数据
void LCD_pos (unsigned char x, unsigned char y); //显示定位
void LCD_printc(unsigned char x, unsigned char y, unsigned char c); //定位输出字符
void LCD_prints(unsigned char x, unsigned char y, unsigned char *s); //定位输出字符串
void LCD_printn(unsigned char x, unsigned char y, unsigned int num); //定位输出16位二进制数字
//函数声明
void LCD_busy (void); //检测LCD是否忙
void LCD_init (void); //LCD初始化
void LCD_cmd (unsigned char cmd); //写入指令
void LCD_dat (unsigned char dat); //写入数据
void LCD_pos (unsigned char x, unsigned char y); //显示定位
void LCD_printc(unsigned char x, unsigned char y, unsigned char c); //定位输出字符
void LCD_prints(unsigned char x, unsigned char y, unsigned char *s); //定位输出字符串
void LCD_printn(unsigned char x, unsigned char y, unsigned int num); //定位输出16位二进制数字
unsigned char LCD_current_addr(void); //读出AC当前地址(DB6~DB0)或忙标志位DB7
unsigned char LCD_current_addr_dat(void); //读出AC当前地址的数据
unsigned char LCD_addr_dat(unsigned char x, unsigned char y); //读出AC指定地址的数据
void LCD_pos_CG(unsigned char x, unsigned char *CGRAM_dat); //指定地址(x: 0-7)写入8bytes数据CGRAM
unsigned char LCD_current_addr_dat(void); //读出AC当前地址的数据
unsigned char LCD_addr_dat(unsigned char x, unsigned char y); //读出AC指定地址的数据
void LCD_pos_CG(unsigned char x, unsigned char *CGRAM_dat); //指定地址(x: 0-7)写入8bytes数据CGRAM
/*-------------------------------------------------------------*/
//光标、画面移动,不影响DDRAM
#define LCD_LEFT_MOVE LCD_cmd(0x18); //LCD显示左移一位
#define LCD_RIGHT_MOVE LCD_cmd(0x1c); //LCD显示右移一位
#define LCD_CURSOR_LEFT_MOVE LCD_cmd(0x10); //光标左移一位
#define LCD_CURSOR_RIGHT_MOVE LCD_cmd(0x14); //光标右移一位
//光标、画面移动,不影响DDRAM
#define LCD_LEFT_MOVE LCD_cmd(0x18); //LCD显示左移一位
#define LCD_RIGHT_MOVE LCD_cmd(0x1c); //LCD显示右移一位
#define LCD_CURSOR_LEFT_MOVE LCD_cmd(0x10); //光标左移一位
#define LCD_CURSOR_RIGHT_MOVE LCD_cmd(0x14); //光标右移一位
/*--------------------------------------------------------------*/
//设置显示、光标及闪烁开、关
//设置显示、光标及闪烁开、关
#define LCD_DISPLAY_ON LCD_cmd(0x0c); //LCD开显示
#define LCD_DISPLAY_OFF LCD_cmd(0x08); //LCD关显示
#define LCD_CURSOR_ON LCD_cmd(0x0e); //光标显示
#define LCD_CURSOR_OFF LCD_cmd(0x0c); //光标不显示
#define LCD_CURSOR_BLINK_ON LCD_cmd(0x0f); //光标闪烁
#define LCD_CURSOR_BLINK_OFF LCD_cmd(0x0e); //光标不闪烁
#define LCD_DISPLAY_OFF LCD_cmd(0x08); //LCD关显示
#define LCD_CURSOR_ON LCD_cmd(0x0e); //光标显示
#define LCD_CURSOR_OFF LCD_cmd(0x0c); //光标不显示
#define LCD_CURSOR_BLINK_ON LCD_cmd(0x0f); //光标闪烁
#define LCD_CURSOR_BLINK_OFF LCD_cmd(0x0e); //光标不闪烁
#define LCD_GO_HOME LCD_cmd(0x02); //AC=0,光标、画面回HOME位, DDRAM内容不变
#define LCD_CLR LCD_cmd(0x01); //LCD清屏, 清除DDRAM, 清除屏幕, 置AC为0, 光标回位?
#define LCD_CLR LCD_cmd(0x01); //LCD清屏, 清除DDRAM, 清除屏幕, 置AC为0, 光标回位?
/*--------------------------------------------------------------*/
//工作方式设置
#define LCD_DISPLAY8_DOUBLE_LINE LCD_cmd(0x38); //两行显示8-bits
#define LCD_DISPLAY8_SINGLE_LINE LCD_cmd(0x30); //单行显示8-bits
//工作方式设置
#define LCD_DISPLAY8_DOUBLE_LINE LCD_cmd(0x38); //两行显示8-bits
#define LCD_DISPLAY8_SINGLE_LINE LCD_cmd(0x30); //单行显示8-bits
#define LCD_DISPLAY4_DOUBLE_LINE LCD_cmd(0x28); //两行显示4-bits
#define LCD_DISPLAY4_SINGLE_LINE LCD_cmd(0x20); //单行显示4-bits
#define LCD_DISPLAY4_SINGLE_LINE LCD_cmd(0x20); //单行显示4-bits
字符串截取前四位
/*--------------------------------------------------------------*/
//输入方式设置
#define LCD_AC_AUTO_INCREMENT LCD_cmd(0x06); //数据读、写操作后,AC自动加 1
#define LCD_AC_AUTO_DECREASE LCD_cmd(0x04); //数据读、写操作后,AC自动减 1
#define LCD_MOVE_ENABLE LCD_cmd(0x07); //数据读、写操作,画面平移
#define LCD_MOVE_DISENABLE LCD_cmd(0x06); //数据读、写操作,画面不动
/*--------------------------------------------------------------*/
//输入方式设置
#define LCD_AC_AUTO_INCREMENT LCD_cmd(0x06); //数据读、写操作后,AC自动加 1
#define LCD_AC_AUTO_DECREASE LCD_cmd(0x04); //数据读、写操作后,AC自动减 1
#define LCD_MOVE_ENABLE LCD_cmd(0x07); //数据读、写操作,画面平移
#define LCD_MOVE_DISENABLE LCD_cmd(0x06); //数据读、写操作,画面不动
以下是液晶驱动头文件:
/*--------------------------------------------------------------*/
//File: LCD1602_8A.H
/
//File: LCD1602_8A.H
/
/Time: 20:10
//Modi: 09-5-17
//Modi: 09-5-17
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论