#include <reg51.h>
#include <intrins.h>
sbit rs= P3^5; //寄存器类型,1表示数据寄存器,2表示指令寄存器
sbit rw = P3^6; //读写选择 1表示读,0表示写
sbit ep = P3^7; //读写使能,下降沿使能
void delay(unsigned char ms) //延时 n ms
{
unsigned char i;
while(ms--)
{
for(i = 0; i<123; i++)
{
;
}
}
}
bit lcd_bz() //判断LCD是否忙碌
{
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P1 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(unsigned char cmd) //写指令
{
while(lcd_bz());//判断LCD是否忙碌
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P1 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_pos(unsigned char pos) //显示地址
{
lcd_wcmd(pos | 0x80);
}
//写数据
void lcd_wdat(unsigned char dat)
{
while(lcd_bz());//判断LCD是否忙碌
rs = 1;
rw = 0;
ep = 0;
P1 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_wstr(const unsigned char *s)
{
unsigned int x,y,z;
x=number/10000; //x 1,2,3,4
y=(number/1000)%10; // y 2
z=(number/100)%10; //z 3
write_LCD_DATA1(int2charLCD[x]);
display_LCD_string(".");
write_LCD_DATA1(int2charLCD[y]);
write_LCD_DATA1(int2charLCD[z]);
}
void lcd_init() //LCD初始化
{
lcd_wcmd(0x38); //功能设定
delay(1);
lcd_wcmd(0x0c); //显示器开关
delay(1);
lcd_wcmd(0x06); //设定进入模式
delay(1);
lcd_wcmd(0x01); //清除显示屏,把光标移至左上角
delay(1);
}
void main(void)
{
lcd_init();// LCD初始化
delay(10);
lcd_pos(0x01);//设置显示位置
//i = 0;
while(1){
lcd_wstr("abcdefg");
lcd_pos(0x42);
lcd_wstr("abcdefg");
lcd_wcmd(0x01);
delay(3);
}
}
|