|
#include <reg51.h>
#include <intrins.h>
//定義控制信號端口
sbit RS=0xb0; //P3.0
sbit RW=0xb1; //P3.1
sbit E=0xb2; //P3.2
//聲明調用函數(shù)
void lcd_w_cmd(unsigned char com); //寫命令字函數(shù)
void lcd_w_dat(unsigned char dat); //寫數(shù)據(jù)函數(shù)
unsigned char lcd_r_start(); //讀狀態(tài)函數(shù)
void lcd_int(); //LCD初始化函數(shù)
void delay(unsigned int i); //可控延時函數(shù)
void delay1(); //軟件延時函數(shù),大約幾個機器周期
void main() //主函數(shù)
{
unsigned char lcd[]="SHEN ZHEN";
unsigned char i;
P1=0xff; //送全1到P0口
lcd_int(); //初始化LCD
delay(255);
lcd_w_cmd(0x83); //設置顯示位置
delay(255);
for(i=0;lcd[i]!='\0';i++) //顯示字符串,字符串結束符為'\0'
{
lcd_w_dat(lcd[i]);
delay(200);
}
while(1); //原地踏步,待機命令
}
//函數(shù)名:delay1
//函數(shù)功能:采用軟件實現(xiàn)延時,大約幾個機器周期
//形式參數(shù):無
//返回值:無
void delay1()
{
_nop_();
_nop_();
_nop_();
}
//函數(shù)名:lcd_int
//函數(shù)功能:lcd初始化
//形式參數(shù):無
//返回值:無
void lcd_int()
{
lcd_w_cmd(0x3c); //設置工作方式
lcd_w_cmd(0x0e); //設置光標
lcd_w_cmd(0x01); //清屏
lcd_w_cmd(0x06); //設置輸入方式
lcd_w_cmd(0x80); //設置初始顯示位置
}
//函數(shù)名:lcd_r_start
//函數(shù)功能:讀狀態(tài)字
//形式參數(shù):無
//返回值:返回狀態(tài)字,最高位D7=0,LCD控制器空閑;D7=1,LCD控制器忙
unsigned char lcd_r_start()
{
unsigned char s;
RW=1; //RW=1,RS=0,讀LCD狀態(tài)
delay1();
RS=0;
delay1();
E=1; //E端時序
delay1();
s=P1; //從LCD的數(shù)據(jù)口讀狀態(tài)
delay1();
E=0;
delay1();
RW=0;
delay1();
return(s); //返回讀取的LCD狀態(tài)字
}
//函數(shù)名:lcd_w_cmd
//函數(shù)功能:寫命令字
//形式參數(shù):命令字已存入com單元中
//返回值:無
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do{ //查LCD忙操作
i=lcd_r_start(); //調用讀狀態(tài)字函數(shù)
i=i&0x80; //"與"操作屏蔽掉低7位
delay(2);
}while(i!=0); //LCD忙,繼續(xù)查詢,否則退出循環(huán)
RW=0;
delay1();
RS=0; //RW=0,RS=0,寫LCD命令字
delay1();
E=1; //E端時序
delay1();
P1=com; //將com中的命令字寫入LCD數(shù)據(jù)口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
//函數(shù)名:lcd_w_dat
//函數(shù)功能:寫數(shù)據(jù)
//形式參數(shù):數(shù)據(jù)已存入dat單元中
//返回值:無
void lcd_w_dat(unsigned char dat)
{
unsigned char i;
do{ //查忙操作
i=lcd_r_start(); //調用讀狀態(tài)字函數(shù)
i=i&0x80; //"與"操作屏蔽掉低7位
delay(2);
}while(i!=0); //LCD忙,繼續(xù)查詢,否則退出循環(huán)
RW=0;
delay1();
RS=1; //RW=0,RS=1,寫LCD命令字
delay1();
E=1; //E端時序
delay1();
P1=dat; //將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
//函數(shù)名:delay
//函數(shù)功能:實現(xiàn)軟件延時
//形式參數(shù):無符號整型變量i,控制空循環(huán)的循環(huán)次數(shù)
//返回值:無
void delay(unsigned int i) //延時函數(shù)
{
unsigned int k;
for(k=0;k<i;k++);
}
|
-
-
單片機代碼程序.zip
2018-11-23 19:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
39.69 KB, 下載次數(shù): 10, 下載積分: 黑幣 -5
|