|
一開(kāi)始學(xué)習(xí)的時(shí)候 仿真的時(shí)候1602只亮但是不顯示字符 后來(lái)發(fā)現(xiàn)。。
顯示程序那里需要注意一下 不然仿真會(huì)出問(wèn)題 下面有說(shuō)明
實(shí)驗(yàn):用lcd0602顯示任意英文或數(shù)字.
程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrw=P2^5; //讀寫(xiě)端 RW=1,讀;RW=0,寫(xiě)
sbit lcdrs=P2^6; //寄存器選擇(RS=0,命令寄存器;RS=1,數(shù)據(jù)寄存器
sbit lcden=P2^7; //使能端
uchar tab[]={" EDC"};
uchar tab1[]={" Edison Chen"};//啊這個(gè)引號(hào)里隨便你想寫(xiě)什么都行
void delay(uint x) //延時(shí)
{
uint i,j;
for(i=0;i>0;i++)
for(j=110;j>0;j++);
}
void write_com(uchar cmd) //寫(xiě)入指令到LCD
{
lcdrw=0;
lcden=0;
lcdrs=0;
P0=cmd; //將指令從P0口傳給1602
delay(2);
lcden=1;
delay(2);
lcden=0;
}
void write_data(uchar date) //寫(xiě)入字符顯示數(shù)據(jù)到LCD
{
lcdrw=0;
lcden=0;
lcdrs=1;
P0=date;
delay(2);
lcden=1;
delay(2);
lcden=0;
}
void init()
{
write_com(0x38); //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
delay(1);
write_com(0x06); //移動(dòng)光標(biāo)
delay(1);
write_com(0x0c); //顯示開(kāi),關(guān)光標(biāo)
delay(1);
write_com(0x01); //清除LCD的顯示內(nèi)容
delay(1);
}
void lcd_POS(uchar pos) //設(shè)定顯示位置
{
write_com(0x80|pos); //數(shù)據(jù)指針=80+地址變量 “|”為“按位或”
}
void show_string(uchar *str) //顯示子程序 (這個(gè)真的很方便)
{
while(*str!='\0') //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)(注意:這里不加分號(hào) 加了分號(hào)LCD沒(méi)有顯示 )
write_data(*str++); //將字符常量寫(xiě)入LCD,并指向下一個(gè)字符
}
void main()
{
init();
while(1)
{
lcd_POS(0); //第一行第一列開(kāi)始顯示
show_string(tab); //將tab數(shù)組字符串寫(xiě)入LCD顯示
delay(5);
lcd_POS(0x40); //第二行第一列開(kāi)始顯示
show_string(tab1);
}
|
|