1、 (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,
2、unsigned char y, unsigned int num);/定位输出16位二进制数字unsigned char LCD_current_addr(void);/读出AC当前地址(DB6DB0)或忙标志位DB7unsigned 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);/指定地址
3、(x: 0-7)写入8bytes数据CGRAM/*-*/光标、画面移动,不影响DDRAM#define LCD_LEFT_MOVELCD_cmd(0x18);/LCD显示左移一位#define LCD_RIGHT_MOVELCD_cmd(0x1c);/LCD显示右移一位#define LCD_CURSOR_LEFT_MOVELCD_cmd(0x10);/光标左移一位#define LCD_CURSOR_RIGHT_MOVELCD_cmd(0x14);/光标右移一位/*-*/设置显示、光标及闪烁开、关#define LCD_DISPLAY_ON LCD_cmd(0x0c);/LCD开显示#def
4、ine LCD_DISPLAY_OFF LCD_cmd(0x08);/LCD关显示#define LCD_CURSOR_ONLCD_cmd(0x0e);/光标显示#define LCD_CURSOR_OFF/光标不显示#define LCD_CURSOR_BLINK_ONLCD_cmd(0x0f);/光标闪烁#define LCD_CURSOR_BLINK_OFF/光标不闪烁#define LCD_GO_HOMELCD_cmd(0x02);/AC=0,光标、画面回HOME位, DDRAM内容不变#define LCD_CLRLCD_cmd(0x01);/LCD清屏, 清除DDRAM, 清除屏幕
5、, 置AC为0, 光标回位?/工作方式设置#define LCD_DISPLAY8_DOUBLE_LINELCD_cmd(0x38);/两行显示8-bits#define LCD_DISPLAY8_SINGLE_LINELCD_cmd(0x30);/单行显示8-bits#define LCD_DISPLAY4_DOUBLE_LINELCD_cmd(0x28);/两行显示4-bits#define LCD_DISPLAY4_SINGLE_LINELCD_cmd(0x20);/单行显示4-bits/输入方式设置#define LCD_AC_AUTO_INCREMENTLCD_cmd(0x06);/
6、数据读、写操作后,AC自动加 1#define LCD_AC_AUTO_DECREASELCD_cmd(0x04);/数据读、写操作后,AC自动减 1#define LCD_MOVE_ENABLELCD_cmd(0x07);/数据读、写操作,画面平移#define LCD_MOVE_DISENABLE/数据读、写操作,画面不动以下是液晶驱动头文件:/File:LCD1602_8A.H/Time:20:10/Modi:09-5-17/防止被重复定义#ifndef _LCD1602_8A_H_#define _LCD1602_8A_H_#define Int_Transfer/=1, 允许中断服务
7、函数调用/=0, 不允许中断服务函数调用/LCD1602与单片机接口定义sfrLCD_IO = 0x80;/P0-0x80,P1-0x90,P2-0xA0,P3-0xB0;sbitLCD_RS = P20;/LCD数据/命令选择端(H/L)LCD_RW = P21;/LCD 读/写 选择端(H/L)LCD_EN = P22;/LCD使能控制端/LCD1602地址相关/*#define LINE1_HEAD0x80/第一行DDRAM起始地址#define LINE2_HEAD0xc0/第二行DDRAM起始地址#define LINE10/第一行#define LINE2/第二行#define L
8、INE_LENGTH16/每行的最大字符长度(40-DDRAM)#if Port_Type_Select/选择八位数据模式unsigned char LCD_current_addr(void)unsigned char ac_addr;LCD_EN = 0;LCD_RS = 0;/指令LCD_RW = 1;/读出LCD_IO = 0xff;/端口置为输入方式(P0)LCD_EN = 1;ac_addr = LCD_IO;return (ac_addr);#else/选择四位数据模式LCD_IO |= 0xf0;ac_addr = LCD_IO & 0xf0;/高四位ac_addr |= LC
9、D_IO 4;/低四位#endif/检测LCD忙状态#if Int_Transfer/允许中断服务函数调用void LCD_busy(void)unsigned char ac_dat;unsigned char busy_flag;doac_dat = LCD_current_addr();busy_flag = ac_dat & 0x80;while(busy_flag);/=1表示忙, =0表示空闲/不允许中断服务函数调用bit busy_flag;busy_flag = (bit)(ac_dat & 0x80);unsigned char LCD_current_addr_dat(vo
10、id)unsigned char addr_dat;/unsigned char i;LCD_busy();/或者检查忙最可靠for(i = 0; i void LCD_cmd(unsigned char cmd)/检测忙LCD_RW = 0;/写入LCD_IO = cmd;/传指令/下降沿有效LCD_IO &= 0x0f;/清高四位LCD_IO |= cmd &/写高四位cmd = 4;/低四位移到高四位void LCD_dat(unsigned char dat)LCD_IO = dat;/传数据LCD_IO |= dat &dat /显示定位DDRAMvoid LCD_pos(unsigned char x, unsigned char y)if(y)LCD_cmd(x|0xc0);/y=1第二行显示,y=0第一行显示0=x16(40-DD
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1