LCD1602顯示C語言
//**********定義與聲明*******************
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineERE2
#defineRSRB4
uchari,num,byte,ys;
ucharconsttable[]="Shanqinggong";//為什么2009前面要空開兩個才能顯示后空開1個兒呢?這個定義要小心!一定要用ucharconst,不要丟了uchar,也不要用code
ucharconsttable1[]="tongxin06-2";//4第二數(shù)組定義初值
voidLCD_init(void);
voidwritecom(char);
voidwritEDAta(char);
voiddelay(uintz)//5延遲函數(shù)常用
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//***************主函數(shù)*****************
voidmain()
{
lcd_init();
while(1)
{
;
}
}
//*******lcdinitial***************關(guān)于LCD的初始化
voidlcd_init()
{
TRISB=0x00;
TRISE=0x00;
PORTB=0X00;
writecom(0x28);//將LCD設(shè)置成4為數(shù)據(jù)方式,兩行顯示,5*7點陣
writecom(0x0C);//顯示控制:打開顯示,
writecom(0x06);//設(shè)置輸入模式
writecom(0x01);//清LCD
writecom(0x80);
for(num=0;num<16;num++)//循環(huán)
{
writedata(table[num]);
delay(1);
}
writecom(0x80+0x40);//11液晶顯示第二行時分秒
for(num=0;num<15;num++)
{
writedata(table1[num]);
delay(1);
}
}
//********寫命令控制*****************
voidwritecom(chari)
{
byte=i;
i=i>>4;
PORTB=i;
RS=0;
E=1;
for(ys=10;ys>0;ys--);
E=0;
PORTB=byte;
RS=0;
E=1;
for(ys=10;ys>0;ys--);
E=0;
}
//********寫數(shù)據(jù)控制*****************
voidwritedata(chari)
{
byte=i;
i=i>>4;
PORTB=i;
RS=1;
E=1;
for(ys=10;ys>0;ys--);
E=0;
PORTB=byte;
RS=1;
E=1;
for(ys=10;ys>0;ys--);
E=0;
}
四條數(shù)據(jù)線輸入:DB4—RB0,DB5—RB1,DB6—RB2,DB7—RB3
寄存器選擇RS接RB4,為"L"指令寄存器,為"H"數(shù)據(jù)寄存器
讀寫使能控制線E,接RE2,每當(dāng)E線向LCD模塊發(fā)送一個正脈沖,LCD模塊與單片機之間將進行一次數(shù)據(jù)交換;