目标:LCD1602的编码
- lcd.c
#include "lcd.h"
void Lcd1602_Delay1ms(uint c) //延时'c'ms
{
uchar a,b;
for(;c>0;c--){
for(b=199;b>0;b--){
for(a=1;a>0;a--);
}
}
}
#ifndef LCD1602_4PINS //如果定义的不是四位的话
void LcdWriteCom(uchar com){ //传输命令的函数
LCD1602_E = 0; //使能端为低,可以进行数据改变,在这时把数据放如数据端口(DATAPINS)
LCD1602_RS = 0; //命令
LCD1602_RW = 0; //写入
LCD1602_DATAPINS = com; //数据放入数据端
Lcd1602_Delay1ms(1); //延迟1ms,也可以不延迟
LCD1602_E = 1; //使能端变高,可以把数据输送到液晶
Lcd1602_Delay1ms(5); //给数据传输到液晶的时间
LCD1602_E = 0; //为下次传输时间做准备
}
#else
void LcdWriteCom(uchar com)
{
LCD1602_E = 0;
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
//Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
#ifndef LCD1602_4PINS //如果定义的不是四位的话
void LcdWriteData(uchar dat) //传输数据的函数
{
LCD1602_E = 0;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)
{
LCD1602_E = 0;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
// Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
#ifndef LCD1602_4PINS
void LcdInit()
{
LcdWriteCom(0x38); //开显示
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针的起点
}
#else
void LcdInit()
{
LcdWriteCom(0x32); //将8位总线转为4位总线
LcdWriteCom(0x28); //在四位线下的初始化
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针的起点
}
#endif
- main.c
#include "reg52.h"
#include "lcd.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 Disp1[] = " KAI TUO ZHE V2 "; //第一排要显示的字符
u8 Disp2[] = " Hello World! "; //第二排要显示的字符
void main()
{
u8 i;
LcdInit();
for(i=0;i<16;i++){
LcdWriteData(Disp1[i]); //从指针的起始位置开始传输,自动加1
}
LcdWriteCom(0x80+0x40); //第二排起始地址
for(i=0;i<16;i++){
LcdWriteData(Disp2[i]);
}
while(1); //数据已经传输过去了,可以一直显示,就保持在这就行了
}
- lcd.h
#ifndef _LCD_H_
#define _LCD_H_
//#define LCD1602_4PINs //当使用的四位数据传输的时候定义,使用8位时注释此句话
#include<reg52.h>
#ifndef uint
#define uint unsigned int
#endif
#ifndef uchar
#define uchar unsigned char
#endif
//PIN口定义
#define LCD1602_DATAPINS P0
sbit LCD1602_E = P2^7; //使能端
sbit LCD1602_RW = P2^5; //选择写还是读
sbit LCD1602_RS = P2^6; //命令数据选择端
//函数定义
void Lcd1602_Delay1ms(uint c); //延时'c'ms 4
void LcdWriteCom(uchar com); ///*LCD1602写入8位命令子函数*/
void LcdWriteData(uchar dat); /*LCD1602写入8位数据子函数*/
void LcdInit(); /*LCD1602初始化子程序*/
#endif
网友评论