無標題.jpg (714.95 KB, 下載次數: 20)
下載附件
2023-6-23 18:31 上傳
#include<reg51.h>
#include<intrins.h> //包含_nop_()空函數指令
#define out P2 //P2口輸出顯示
#define uchar unsigned char
#define uint unsigned int
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
void lcd_initial(void); //lcd初始化函數
void cheek_busy(void); //檢查忙標志函數
void write_command(uchar com); //寫命令函數
void write_data(uchar dat); //寫數據函數
void string(uchar ad,uchar *s); //顯示字符函數
void delay(uint); //延時函數
void main(void)
{
lcd_initial();
while(1)
{
string(0x85,"welcome"); //調用函數顯示字符
// string(0xc2,"harbin CHINA");
delay(100);
write_command(0x01); //調用寫命令函數清屏
delay(100);
}
}
void delay(uint j) //延時函數
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250;
}
}
void cheek_busy(void) //檢查忙標志函數
{
uchar dt;
do
{
dt=0xff;
E=0;
RS=0; //RS=1選擇數據寄存器,RS=0選擇指令寄存器
RW=1; //RW=1進行讀操作,RW=0進行寫操作
E=1; //下降沿使能
dt=out;
}while(dt&0x80);
E=0;
}
void write_command(uchar com) //寫命令函數
{
cheek_busy();
E=0;
RS=0;
RW=0;
out=com;
E=1;
_nop_();
E=0;
delay(1);
}
void wirte_data(uchar dat) //寫顯示函數
{
cheek_busy();
E=0;
RS=1;
RW=0;
out=dat;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
delay(1);
}
void lcd_initial(void) //LCD初始化函數
{
delay(15);
write_command(0x38);
delay(5);
write_command(0x38);
delay(5);
write_command(0x38);
delay(5);
write_command(0x0c);
delay(5);
write_command(0x06);
write_command(0x01);
delay(1);
}
void string(uchar ad,uchar *s) //輸出顯示字符串函數
{
write_command(ad);
while(*s>0)
{
write_data(*s++);
delay(100);
}
}
|