给大家分享一个lcd1602显示的子程序模块化可多次调用,非常方便移植,不改或改一点就可以用到自己的程序中
单片机源程序如下:
- #include "lcd1602.h"
- /*LCD1602忙碌等待*/
- void LCD1602Wait()
- {
- unsigned char sta;//读取LCD1602状态字
-
- /*读取液晶状态字之前必须将P2口全部拉高*/
- LCD1602_DB = 0xFF;
-
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- LCD1602_EN = 0;
-
- do
- {
- LCD1602_EN = 1;
- sta = LCD1602_DB;//读状态字
- LCD1602_EN = 0;
- } while (sta & 0x80); //检测最高位是否为1,1忙碌,0空闲
- }
- /*LCD1602写命令*/
- void LCD1602WriteCmd(unsigned char cmd)
- {
- //读写前要进行液晶的忙碌等待
- LCD1602Wait();
-
- LCD1602_RS = 0;
- LCD1602_RW = 0;
- LCD1602_EN = 0;
- LCD1602_DB = cmd;
- LCD1602_EN = 1;//高脉冲
- LCD1602_EN = 0;//关闭液晶输出
- }
- /*LCD1602写数据*/
- void LCD1602WriteData(unsigned char dat)
- {
- LCD1602Wait();
-
- LCD1602_RS = 1;
- LCD1602_RW = 0;
- LCD1602_EN = 0;
- LCD1602_DB = dat;//送入数据
- LCD1602_EN = 1;//高脉冲
- LCD1602_EN = 0;//关闭液晶输出
- }
- /*液晶初始化*/
- void InitLCD1602()
- {
- LCD1602WriteCmd(0x38); //写指令38H
- LCD1602WriteCmd(0x0C); //开显示不显示光标
- LCD1602WriteCmd(0x06); //写入字符时字符指针++且光标++
- LCD1602WriteCmd(0x01); //显示清屏
- }
- /*在LCD1602的坐标(x, y)位置显示一个字节*/
- void LcdShowData(unsigned char x, unsigned char y, unsigned char byte)
- {
- unsigned char addr;
-
- if (y == 0)
- {
- addr = 0x00 + x; //第一行的x位置显示
- }
- else
- {
- addr = 0x40 + x; //第二行x的位置显示
- }
- LCD1602WriteCmd(addr + 0x80);
- LCD1602WriteData(byte);
- }
- /*在LCD1602的坐标(x, y)位置显示str*/
- void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str)
- {
- unsigned char addr;
-
- if (y == 0)
- {
- addr = 0x00 + x; //第一行的x位置显示
- }
- else
- {
- addr = 0x40 + x; //第二行x的位置显示
- }
- LCD1602WriteCmd(addr + 0x80);
- while (*str != '\0')
- {
- LCD1602WriteData(*str++);
- }
- }
- //*设置光标的位置为(x, y)
- void LcdSetCoursor(unsigned char x, unsigned char y)
- {
- unsigned char addr;
-
- if (y == 0)
- {
- addr = 0x00 + x;
- }
- else
- {
- addr = 0x40 + x;
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
1602显示函数.zip
(27.6 KB, 下载次数: 38)
|