?? 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 + -