⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_code.c

📁 该代码为一些常用的LCD驱动子函数
💻 C
字号:
#include <iom16v.h>
#include <macros.h>
//#include<Delay.h>
//---------------变量类型宏定义-------------
#define uchar unsigned char 
#define uint unsigned int
//-------------引脚电平-------------------  
#define RS_1 PORTB|=BIT(PB0)
#define RS_0 PORTB&=~BIT(PB0)
#define RW_1 PORTB|=BIT(PB1)
#define RW_0 PORTB&=~BIT(PB1)
#define EN_1 PORTB|=BIT(PB2)
#define EN_0 PORTB&=~BIT(PB2)
//=================================
#define Dataport PORTC  //数据端口
#define Busy 0x80       //忙信号
#define Xtal 8          //晶振   
#define LCM_RS PORTD7 //选中指令寄存器
#define LCM_RW PORTD6 //写模式

#define LCM_EN PORTD5 //置LCM_EN 端为低电平,延时一会儿

//================================================================待显示字符

 
uchar str0[]="I LOVE AVR";

  

/*-----------------------------写指令到LCM 子函数-------------------------------*/
void WriteCommandLCM(uchar WCLCM, uchar BusyC) /*函数名为WriteCommandLCM 的写
                                               指令到LCM 子函数。定义WCLCM、BusyC 为无符号字符型变量*/
{ //WriteCommandLCM 函数开始
if(BusyC)
{ReadStatusLCM();} /*若BusyC 为"1",则调用ReadStatusLCM 子
                    函数进行忙检测*/
Dataport=WCLCM; //将变量WCLCM 中的指令传送至P1 口

RS_0; //选中指令寄存器
RW_1; //写模式
EN_0; //置LCM_EN 端为低电平
EN_0; //置LCM_EN 端为低电平,延时一会儿
EN_1; //置LCM_EN 端为高电平,写入使能
} // WriteCommandLCM 函数结束
/*----------------------------写数据到LCM 子函数-------------------------------*/
void WriteDataLCM(uchar WDLCM) /*函数名为WriteDataLCM 的写数据到LCM 子函数。
定义WDLCM 为无符号字符型变量*/
{ // WriteDataLCM 函数开始
ReadStatusLCM(); //调用ReadStatusLCM 子函数检测忙信号
Dataport=WDLCM; //将变量WDLCM 中数据传送至P1 口
RS_1; //选中数据寄存器
RW_0; //写模式
EN_0; //置LCM_EN 端为低电平
EN_0; //置LCM_EN 端为低电平,延时一会儿
EN_1; //置LCM_EN 端为高电平,写入使能
} // WriteDataLCM 函数结束
/*--------------------------------读数据到MCU 子函数---------------------------*/
uchar ReadDataLCM(void) //函数名为ReadDataLCM 的读数据到MCU 子函数
{ // ReadDataLCM 函数开始
RS_1; //选中数据寄存器
RW_1; //读模式
EN_0; //置LCM_EN 端为低电平
EN_0; //置LCM_EN 端为低电平,延时一会儿
EN_1; //置LCM_EN 端为高电平,读使能
return(Dataport); //返回P1 口的内容
} // ReadDataLCM 函数结束
//--------------------------------读状态到MCU 子函数-----------------------------
uchar ReadStatusLCM(void) //函数名为ReadStatusLCM 的读状态到MCU 子函数
{ //ReadStatusLCM 函数开始
Dataport=0xFF; //置P1 口为全1
RS_0; //选中指令寄存器
RW_1; //读模式
EN_0; //置LCM_EN 端为低电平
EN_0; //置LCM_EN 端为低电平,延时一会儿
EN_1; //置LCM_EN 端为高电平,读使能
while(PORTC&Busy); //检测忙信号。当P1 口内容与Busy(80H)相与后不为零时,程序
                  //原地踏步
return(Dataport); //返回P1 口的内容
} // ReadStatusLCM 函数结束 


/*--------------------------LCM 初始化子函数----------------------------*/
void InitLcd() //函数名为InitLcd 的LCM 初始化子函数
{ // InitLcd 函数开始
WriteCommandLCM(0x38,1);//8 位数据传送,2 行显示,5*7 字形,检测忙信号
WriteCommandLCM(0x08,1);//关闭显示,检测忙信号
WriteCommandLCM(0x01,1);//清屏,检测忙信号
WriteCommandLCM(0x06,1);//显示光标右移设置,检测忙信号
WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示、不闪烁,检测忙信号
} // InitLcd 函数结束
/*-------------------显示指定座标的一个字符子函数---------------------------*/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y) X|=0x40;
X|=0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
/*--------------------显示指定座标的一串字符子函数----------------------*/
void DisplayListChar(uchar X,uchar Y,uchar *DData)
{
uchar ListLength=0;
Y&=0x1;
X&=0xF;
while(X<=15)

{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}    

void Delay(uint i)
{
uint j;
for(i=0;i<0xff;i++);
{
for(j=0;j<0xff;j++);
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -