《LCD1602程序代码》由会员分享,可在线阅读,更多相关《LCD1602程序代码(3页珍藏版)》请在金锄头文库上搜索。
1、LCD1602 程序代码#include /包含 NOP 空指令的头文件#define uchar unsigned char#define uint unsigned int#define LCD1602_H 1 /宏定义手册中出现的 H 的定义#define LCD1602_L 0 /宏定义手册中出现的 L 的定义#define LCD1602_DAT 1 /数据#define LCD1602_COM 0 /命令#define LCD_15MS 300 /宏定义 15MS 延时需要的数值#defineLCD_5MS 100 /宏定义 5MS 延时需要的数值/*显示模式指令*/#define
2、 LCD_Display_mode 0X38 /设置 16x2 显示 5x7 点阵 8 位数据接口/*显示开/关及光标设置*/#define LCD_shows0 0X0C /开显示 不显示光标 光标不闪烁#define LCD_shows2 0X0E /开显示 显示光标 光标不闪烁#define LCD_shows1 0X0F /开显示 显示光标 光标 闪烁#define LCD_shows3 0X08 /关显示 不显示光标 光标不闪烁/*指针设置*/#define LCD_cursor1 0X04 /写一个字符 地址指针减 1#define LCD_cursor2 0X05 /写一个字符
3、地址指针减 1 并屏幕右移#define LCD_cursor3 0X06 /写一个字符 地址指针加 1#define LCD_cursor4 0X07 /写一个字符 地址指针加 1 并屏幕左移/*清屏指令*/#define LCD_clear 0x01 /清屏指令 数据指针清零 所有显示清零/*忙状态字*/#define LCD_WAY 0x80 /状态字/*宏定义显示起始地址*/#define LCD_ADDH 0X80 /第一行地址 0x80-0xA7#define LCD_ADDL 0XC0 /第二行地址 0xC0-0xE7/*IO 口定义*/#define LCD1602_DATA
4、P0 /宏定义 8 位数据线 IO 为 P0 口 D0D7=P00P07 8位数据线 D0=P00;sbit LCD1602_RS=P25; /数据/命令选择端(H/L)sbit LCD1602_RW=P26; /读/写选择端(H/L)sbit LCD1602_E =P27; /使能信号/*函数声明*/void LCD1602_init(); /液晶初始化函数void LCD1602_writecd(bit lcd_rs, uchar LCD1602_d);/写命令/数据 函数bit lcd_rs 是数据还是命令 uchar LCD1602_d 要写入的数据uchar LCD1602_read
5、way(); /读忙状态函数 由写入和读取函数调用uchar LCD1602_readata(); /读数据函数void LCD_DELAY(uchar LCD_delay); /*液晶初始化函数*/void LCD1602_init() /液晶初始化函数 LCD_DELAY(LCD_15MS); /延时 15MS 初始化LCD1602_writecd(LCD1602_COM,LCD_Display_mode);/写指令 38H 设置 16x2显示 5x7 点阵 8 位数据接口LCD1602_writecd(LCD1602_COM,LCD_shows0); /开显示 不显示光标 光标不闪烁LC
6、D1602_writecd(LCD1602_COM,LCD_cursor1); /检查忙状态LCD1602_writecd(LCD1602_COM,LCD_clear); /写指令 01H:显示清屏/*液晶写命令/数据函数*/void LCD1602_writecd(bit lcd_rs, uchar LCD1602_cd)/写命令/数据 函数 uchar LCD1602_NUM; /定义变量用来液晶无忙回答的退出死循环LCD1602_NUM=255; /忙状态检测次数while(LCD1602_readway() /检查忙状态LCD1602_NUM-; /检测次数自减if(LCD1602_N
7、UM=0) /判断检测次数等于 0break; /退出循环判断忙LCD1602_RW = LCD1602_L; /读/写选择端(H/L)LCD1602_RS = lcd_rs; /数据/命令选择端(H/L)LCD1602_DATA= LCD1602_cd; /IO 口赋值LCD1602_E = LCD1602_H; /拉高使能信号开始传输数据LCD1602_E = LCD1602_L; /拉低使能信号锁存数据LCD1602_DATA= 0xff; /IO 口数据清除/*忙状态读取函数*/uchar LCD1602_readway()/读状态函数由写入和读取函数调用 uchar LCD1602_
8、way; /状态字变量LCD1602_DATA=0xff; /IO 口数据清除LCD1602_RS = LCD1602_COM; /数据/命令选择端(H/L) 命令LCD1602_RW = LCD1602_H; /读/写选择端(H/L)LCD1602_E = LCD1602_H; /拉高使能信号开始接收状态LCD1602_way =LCD1602_DATA; /读取状态LCD1602_E = LCD1602_L; /拉低使能信号锁存数据LCD1602_way =LCD1602_way&LCD_WAY;/取忙状态字return(LCD1602_way); /返回状态字/*液晶读数据函数*/uch
9、ar LCD1602_readata()/读数据函数 uchar LCD1602_data; /数据暂存变量while(LCD1602_readway(); /检查忙状态 -LCD1602_DATA=0xff; /IO 口数据清除LCD1602_RS = LCD1602_DAT; /数据/命令选择端(H/L) 数据LCD1602_RW = LCD1602_H; /读/写选择端(H/L)LCD1602_E = LCD1602_H; /拉高使能信号开始接收状态LCD1602_data= LCD1602_DATA; /读取状态LCD1602_E = LCD1602_L; /拉低使能信号锁存数据return(LCD1602_data); /返回数据/*延时函数*/void LCD_DELAY(uchar LCD_delay)/ uchar lcd_del;while(LCD_delay-) /自减lcd_del=100;while(lcd_del-);