|
#include<reg51.h>
/*************LCD COMMAND*************/
#define Twoline_8bit 56 //0x38
#define CLEAR 1 //0000 0001 CURSOR 指針
#define CURSOR_HOME 2 //0000 0010
#define CURSOR_LEFT 4 //0000 0100
#define CURSOR_RIGHT 6 //0000 0110
#define CURSOR_OFF 12 //0000 1100
#define CURSOR_ON 14 //0000 1110 BLINK 閃爍
#define CURSOR_BLINK 15 //0000 1111
#define GOTO_LINE_2 192 // GOTO 轉到
#define GOTO_LINE_1 126
/*************LCD CONTROL LINE***********/
#define ENABLE 1
#define DISABLE 0
#define READ 1
#define WRITE 0
#define COMMAND 0 // COMMAND 指令
#define DATA 1
#define rs P2_6
#define rw P2_5
#define enable P2_4
sbit P2_6=P2^6;
sbit P2_5=P2^5;
sbit P2_4=P2^4;
void delay100us();
void write_lcd_command(unsigned); // 輸入指令寄存器
void write_lcd_data(unsigned); // 輸入數據寄存器
void init_lcd(void); // 初始化LCD
void clear_lcd(void); // LCD 清屏
void diplay_lcd_string(char *P); // 顯示字符串函數
void gotoxy(unsigned,unsigned); // 設置光標到第X行第Y列
void display_lcd_number(char); // 顯示單個數字
char code int2charlcd[]="0123456789";
void delay100us() //延時函數
{ unsigned char i,j;
for(i=0;i<=10;i++)
for(j=0;j<=10;j++)
;
}
void write_lcd_command(unsigned command) //寫入指令寄存器函數
{
rw=WRITE; //rw為寫狀態
rs=COMMAND; //rs指向指令寄存器
enable=ENABLE; //使能
P1=command; //P1口送指令碼
delay100us();
enable= DISABLE;
rw=1;
}
void write_lcd_data(unsigned lcddata)
{
rw=WRITE; //rw為寫狀態
rs=DATA; //rs指向數據寄存器
enable=ENABLE; //使能
P1=lcddata;
delay100us();
enable=DISABLE;
rw=1;
}
void init_lcd(void)
{
write_lcd_command(Twoline_8bit); // 0b00111000
write_lcd_command(CURSOR_OFF); // 0b00001100
write_lcd_command(CURSOR_RIGHT); // 0b00000110
}
void clear_lcd(void)
{
write_lcd_command(CLEAR);
write_lcd_command(CURSOR_HOME);
}
void display_lcd_string(char *P) //顯示字符串函數
{
while(*P) //例如display_LCD_string(“Hello")
{
write_lcd_data(*P);
P++;
}
}
void display_lcd_number(char number) //顯示數值變量函數
{
unsigned char x,y; //例如isplay_LCD_number(變量)
x=number/10;
y=number-10*x; //變量在函數里進行處理在送數據寄存器顯示
write_lcd_data(int2charlcd[x]);
write_lcd_data(int2charlcd[y]);
}
void gotoxy(unsigned x,unsigned y) //光標跳轉函數X表示第幾行,Y表示第幾列。
{
if(x==1)
write_lcd_command(GOTO_LINE_1+y);
else
write_lcd_command(GOTO_LINE_2+y);
}
void main(void)
{
init_lcd();
clear_lcd();
display_lcd_string("jjjtangxiaojin");
gotoxy(2,1);
display_lcd_string("jjjjtiancai");
while(1);
}
|
|