?? lcd1602.c
字號:
#include"lcd1602.h"
uchar date[2];
void delay(uchar ms)
{ // 延時子程序
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL LCD_check_busy() //定義LCD_check_busy()返回值是位
{ // 測試LCD忙碌狀態
BOOL result;
rs = 0;
rw = 1;
ep = 1;
result = (BOOL)(LCD_DATA&0x80); //讀取第八位
ep = 0;
return result; //返回檢測信號
}
void lcd_write(uchar cd,uchar temp)
{ // 寫入指令數據到LCD
uchar i;
while(LCD_check_busy());
date[0]=temp&0xf0; //取高四位
date[1]=(temp<<4)&0xf0; //取低四位
for(i=0;i<2;i++) //循環二次,分別送數據的高低位
{
if(cd) //當寫數據時使RS=1,當為寫指令時RS=0
rs = 1;
else
rs=0;
rw = 0;
ep = 0;
LCD_DATA = date[i]; //送數據到LCD
if(cd) //保持RS原來的狀態,不然會使送數據失敗
rs = 1;
else
rs=0;
ep = 1;
ep = 0;
}
}
void lcd_pos(uchar pos)
{
lcd_write(0,pos|0x80); //設定顯示位置
}
void lcd_init()
{ //LCD初始化設定
lcd_write(0,0x38); //寫三個0x38是初始化要求
delay(1);
lcd_write(0,0x38);
delay(1);
lcd_write(0,0x38);
delay(1);
lcd_write(0,0x28); // 四位數據數、雙行顯示、5X7點陣字型體
delay(1);
lcd_write(0,0x0C); // 顯示開、關光標
delay(1);
lcd_write(0,0x06); // 數據讀、寫操作后,AC自動增一
delay(1);
lcd_write(0,0x18);
delay(1);
lcd_write(0,0x01); //清除LCD的顯示內容
delay(1);
}
void lcd_strwdat( uchar Loc,uchar *str )
{ //寫入字符串顯示數據到LCD
lcd_pos(Loc);
while(*str!='\0')
{
lcd_write(1,*str);
str++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -