📄 lcd.c
字号:
#include "HARD_CENECT.H"
#include<intrins.h>
#define uchar unsigned char
#define clr 0x01 //清屏
#define byte unsigned char
void lcd_int(void);
void check_busy(void);
void write_command(byte cm);
void write_lcd_data(byte disp);
void write_LCD(byte shuju,bit C_or_D);
void change_data(void);
void lcd_delay(void);
void lcd_delay_nms(unsigned int n);
void printch(byte adress,byte *ch);
unsigned char LCD_DATA;
/****************************************
*涵数名:printch()
*涵数功能:在指的位置开始显示字符
*****************************************/
void printch(byte adress,byte *ch)
{
write_command(adress);
while(*ch)
{
write_lcd_data(*ch);
ch ++;
}
}
/****************************************
*涵数名:printc()
*涵数功能:在指的位置显示单个字符
*****************************************/
void printc(byte adress,byte disp_data)
{
write_command(adress);
write_lcd_data(disp_data);
}
/*************************
*涵数名:lcd_int()
*涵数功能:初始化LCD
**************************/
void lcd_int(void)
{
write_command(0x30);
lcd_delay_nms(5);
write_command(0x30);
lcd_delay_nms(5);
write_command(0x28);
lcd_delay_nms(5);
write_command(0x28);
lcd_delay_nms(5);
write_command(0x28);
lcd_delay_nms(5);
write_command(0x80);
lcd_delay_nms(5);
write_command(0x01);
lcd_delay_nms(5);
write_command(0x0C);
lcd_delay_nms(5);
}
/*************************
*涵数名:check_busy()
*涵数功能:检查LCD是否为忙
**************************/
void check_busy(void)
{
bit i=1; //定义判断标志位
LCD_E=0; //去使能信号
RS=0; //传送命令数据
RW=1; //此时为读
DATA7=1;
LCD_E=1; //高四位移出
do{;}
while(DATA7!=0);
LCD_E=0;
}
/*************************
*涵数名:write_command()
*涵数功能:写入命令
**************************/
void write_command(byte cm)
{
write_LCD(cm,0); //送命令时RS=0
}
/*************************
*涵数名:write_lcd_data()
*涵数功能:写入显示数据
**************************/
void write_lcd_data(byte disp)
{
write_LCD(disp,1); //送数据时RS=1
}
/**************************
*涵数名:write_LCD()
*涵数功能:写数据到LCD,C_or_D
*表示是命令还是显示数据
***************************/
void write_LCD(byte shuju,bit C_or_D)
{
unsigned char i;
check_busy();
RS=C_or_D;
RW=0;
LCD_E=0;
LCD_DATA=shuju;
for(i=0;i<2;i++)
{
change_data();
LCD_E=1;
lcd_delay();
LCD_E=0;
}
}
/*************************
*涵数名:change_data()
*涵数功能:将要送入的数据转换
*成4BIT格式并送入4条数据线
*要求两次转换是连续的就不用
*重新装入数据
**************************/
void change_data(void)
{
if((LCD_DATA&0x80)==0x80)
DATA7=1;
else
DATA7=0;
LCD_DATA=LCD_DATA<<1;
if((LCD_DATA&0x80)==0x80)
DATA6=1;
else
DATA6=0;
LCD_DATA=LCD_DATA<<1;
if((LCD_DATA&0x80)==0x80)
DATA5=1;
else
DATA5=0;
LCD_DATA=LCD_DATA<<1;
if((LCD_DATA&0x80)==0x80)
DATA4=1;
else
DATA4=0;
LCD_DATA=LCD_DATA<<1;
}
/*********************************************************
*涵数名:lcd_delay_nms(unsigned int n)
*涵数功能:延时N MS
*
*********************************************************/
void lcd_delay_nms(unsigned int n)
{
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=0;j<1140;j++);
}
/*********************************************************
*涵数名:lcd_delay()
*涵数功能:延时N MS
*
*********************************************************/
void lcd_delay(void)
{
byte i;
for(i=0;i<40;i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -