lcd1604顯示程序51單片機驅動,lcd1604和lcd1602操作是一樣的,就是多了兩行顯示,也就多了2個顯示地址;LCD1602行地址為80H,C0H
LCD1604行地址為80H,C0H,90H,D0H
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
單片機源程序:
#include <AT89X52.H>
#define lcd_data P0
sbit rs=P2^0; //寄存器類型選擇位
sbit rw=P2^1; //數據讀寫類型控制位
sbit e=P2^2; //下降沿使能控制位
sbit flag=ACC^7; //LCD忙狀態判斷標志位
void wait(void);
void delay(unsigned int temp);
void initial(void);
unsigned char code seg[]={0x43,0x68,0x69,0x6E,0x61,0x20,0x55,0x6E,0x69,0x76, //China University of Mining and
0x65,0x72,0x73,0x69,0x74,0x79,0x20,0x6F,0x66,0x20, //Techlonogy 17--302
0x4D,0x69,0x6E,0x69,0x6E,0x67,0x20,0x61,0x6E,0x64,
0x20,0x20,0x54,0x65,0x63,0x68,0x6C,0x6F,0x6E,0x6F,0x67,
0x79,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5C,0x5C,
0x31,0x37,0x2D,0x2D,0x33,0x30,0x32,0x5C,0x5C,0x20,0x20,0x20};
void main(void){
unsigned char data_index;
unsigned char add_first,add_second,add_third,add_fourth; //LCD行地址為80H,C0H,90H,D0H
initial(); //初始化LCD
while(1){
data_index=0;add_first=0x80;add_second=0xC0;add_third=0x90;add_fourth=0xD0;
while(data_index<=15){
rs=0;rw=0;lcd_data=add_first+data_index;e=1;e=0; //第一行顯示
wait();
rs=1;rw=0;lcd_data=seg[data_index];e=1;e=0;
wait();
data_index++;
}
while(data_index<=31){ //第二行顯示
rs=0;rw=0;lcd_data=add_second+data_index-16;e=1;e=0;
wait();
rs=1;rw=0;lcd_data=seg[data_index];e=1;e=0;
wait();
data_index++;
}
while(data_index<=47){ //第三行顯示
rs=0;rw=0;lcd_data=add_third+data_index-32;e=1;e=0;
wait();
rs=1;rw=0;lcd_data=seg[data_index];e=1;e=0;
wait();
data_index++;
}
while(data_index<=63){ //第四行顯示
rs=0;rw=0;lcd_data=add_fourth+data_index-48;e=1;e=0;
wait();
rs=1;rw=0;lcd_data=seg[data_index];e=1;e=0;
wait();
data_index++;
}
}
}
void initial(void){
rs=0;rw=0;lcd_data=0x38; //置功能,8位數據位,2行顯示,5×7點陣
e=1; e=0;wait();
rs=0;rw=0;lcd_data=0x06; //地址計數器自動加1,顯示屏不移動
e=1;e=0;wait();
rs=0;rw=0;lcd_data=0x0c; //顯示開,光標顯示,光標閃爍
e=1;e=0;wait();
rs=0;rw=0;lcd_data=0x01; //清顯示,光標復位到00H
e=1;e=0;wait();
}
void wait(void){ //判斷LCD處于空閑狀態
do{
rs=0;rw=1;
e=1;
e=0;delay(0);
P0_7=1;flag=P0_7;
}while(flag==0);
}
void delay(unsigned int temp){
unsigned int jj;
for(jj=0;jj<=temp;jj++)
;
}
下載:
LCD1604.zip
(258.92 KB, 下載次數: 119)
2017-5-30 14:32 上傳
點擊文件名下載附件
|