#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);
}
}
|