file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/223551r22qfrp2u46r4pc2.jpg.thumb.jpg
#include <reg51.h>
#include <string.h>
#define lcddata P0 //p0口為數據輸入端
sbit busy=P0^7;
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
void sysbegin(void); //顯示系統初始化函數聲明
void yanshi(unsigned int i); //延時子程序聲明
void redbusy(void); //讀忙子程序聲明,判斷lcd是否忙碌,是否可以輸入數據
void begin(void); //lcd1602顯示一般初始化過程子程序聲明
void writelcd(bit i,unsigned char value); //寫指令函數聲明 RS=L,R/W=L,D0-D7=指令碼,E=高脈沖
//寫數據 RS=H,R/W=L,D0-D7=數據,E=高脈沖
void main()
{
sysbegin(); //系統初始化程序
begin(); //lcd1602顯示初始化
writelcd(0,0x80);//寫指令 顯示地址設置
writelcd(1,*A*);//寫數據 顯示字符設置
while(1);
}
void sysbegin(void) //顯示系統初始化子程序
{
RS=1;
RW=1;
EN=0;
lcddata=0xFF; //這里P0為與LCD D0~D7相連的I/O口
}
void redbusy(void)//讀忙子程序,判斷lcd是否忙碌,是否可以輸入數據
{
lcddata=0xFF; //初始化,p0口為輸入。
RS=0;
RW=1;
EN=1;
while(busy==1); //判斷lcd D7位:為1-忙, 0-不忙 lcddata & 1xxx xxxx 為1一直等待,為0跳出循環。
EN=0; //讀狀態是EN為高脈沖變低脈沖
}
void writelcd(bit i,unsigned char value) //寫指令 RS=L,R/W=L,D0-D7=指令碼,E=高脈沖
// 寫數據函數 RS=H,R/W=L,D0-D7=數據,E=高脈沖
{
redbusy(); //寫指令寫數據前先讀忙
lcddata=value;
RS=i;
RW=0;
EN=1;
EN=0; //寫指令 寫數據EN為高脈沖變低脈沖
}
void begin(void) //lcd1602顯示一般初始化過程
{
yanshi(15000); //延時15ms
writelcd(0,0x28); //寫指令38H 設置液晶的顯示模式:設置為16*2顯示,5*10點陣,8位數據接口
yanshi(5000); //延時5ms
writelcd(0,0x28); //寫指令38H
yanshi(5000); //延時5ms
writelcd(0,0x28); //寫指令38H
yanshi(5000); //延時5ms
writelcd(0,0x28); //寫指令38H 顯示模式設置
//redbusy();
writelcd(0,0x08); //寫指令08H 關閉顯示
//redbusy();
writelcd(0,0x01); //寫指令01H顯示清屏
//redbusy();
writelcd(0,0x06); //寫指令06H光標移動設置
//redbusy();
writelcd(0,0x0C); //寫指令0CH顯示開及光標設置
//redbusy();
}
void yanshi(unsigned int i)//延時子程序
{
while(--i);
}
|