📄 lcd.c
字号:
/*----------------使能脉冲--------------*/
void En(void)
{ E_H; Delay_us(1000);
E_L; Delay_us(1000);
}
/*-----------------写指令-----------*/
void Write_Cmd(char Cmd)
{ DDRC=0xFF;
E_L;
RS_L;
RW_L;
Delay_us(20);
PORTC =Cmd;
E_H;
Delay_us(20);
E_L;
}
/*----------lcd初始化------------------*/
void Lcd_Init(void)
{ Uchar i ;
DDRC=0xFF;
for(i=0;i<3;i++)
{
Delay_ms(300);
Write_Cmd(0x38); //功能设置 8位数据位 两行显示 5*7点阵
Delay_ms(100);
}
Write_Cmd(0x0E); //显示开.光标、闪烁关
Delay_us(100);
Write_Cmd(0x01); //显示清屏
Delay_us(100);
Write_Cmd(0x02); //归位
Delay_us(100);
Write_Cmd(0x06); //输入方式设置
Delay_us(100);
}
/*----------清屏-------------------*/
void ClrLCD()
{
Write_Cmd(0x01); // Clear display
Delay_us(50);
}
/*-----------写数据----------------*/
void LcdWriteData(char data)
{ while (!(Lcd_Busy()));
E_L;
RS_H;
RW_L;
Delay_us(20);
PORTC = data;
E_H;
Delay_us(20);
E_L;
Delay_us(20);
}
/*-----------读忙标志--------------------*/
Uchar Lcd_Busy()
{
Uchar BF;
DDRC=0x00; //端口c设为输入方式
E_L;
RS_L;
RW_H;
Delay_us(20);
E_H;
Delay_us(20);
BF=PINC;
Delay_us(2);
BF= BF&0x80;
E_L;
DDRC = 0xFF; //端口c设为输出方式
return BF;
}
/*-------------设定写入的地址---------------*/
void Write_Location(char row ,char column)
//void Write_Location(Uchar x, Uchar y)
{
char p;
if(row==0)
{ p=0x80+column-1;}
else { p=0xc0+column-1;}
Write_Cmd(p);
}
/*--------------写入一个字符(ASCII码)-------------*/
void Write_Char(char Char)
{RW_L;
RS_H;
DDRC=0xFF;
PORTC=Char;
En();
Delay_us(100); //wait for 20us after one Char displayed
}
/*---------------------显示字符串-------------------------*/
void Write_String(char *s)
{
for(;*s!='\0';s++)
Write_Char(*s);
}
////////////////////////////////////////////////////////////
/*---------------------lcd初始显示-----------------------*/
void lcd_start(void)
{
Delay_ms(100);
Write_Location(0,1);
Write_String("welcome to use");
Write_Location(1,1);
Write_String("motortest system");
}
///////////////////////////////////////////////////////////////
//-----------------------------------------------------------//
/*-------------------延时子程序----------------------------*/
void Delay_us(Uint time) //delay microsecods
{
Uint i;
for (i=0;i<time;i++)
{
asm("nop");
}
}
void Delay_ms(Uint time) //delay milliseconds
{
Uint i;
for (i=0;i<time;i++)
{
Delay_us(1000);
}
}
void delay(void)
{
Uchar i,j;
for(i=0;i<20;i++){
for(j=0;j<250;j++){
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -