|
//PIC16C72單片機(jī)控制HT1621B驅(qū)動(dòng)LCD #include <pic.h> #define BIAS 0X50 //1/2偏壓,4背極 #define RC256 0X30 //系統(tǒng)時(shí)鐘選擇為片內(nèi)RC振蕩器 #define WDTDIS1 0X0A //禁止WDT溢出標(biāo)志輸出 #define TIMERDIS 0X08 //時(shí)基輸出禁能 #define SYSEN 0X02 //打開(kāi)系統(tǒng)時(shí)鐘 #define LCDON 0X06 //打開(kāi)偏壓發(fā)生器 #define SYSDIS 0X00 //關(guān)閉系統(tǒng)時(shí)鐘和偏壓發(fā)生器 #define CS RB5 #define WR RB6 #define DATA RB7 #define uchar unsigned char #define uint unsigned int void SENDBYTE (uchar dat); void SENDBIT (uchar dat,uchar bitcnt); /***************************延時(shí)子函數(shù)******************************/ void delay() //延時(shí) { uchar i=0; while(i<10) i++; } void delay1s() //延時(shí)1S { uchar i; uint j; for(i=0;i<10;i++) for(j=0;j<1300;j++); } /**************************HT1621B初始化****************************/ void START_HT1621() //初始化HT1621 { CS=1; WR=1; DATA=1; delay(); CS=0; CS=0; WR=0; WR=0; } /*************************發(fā)送命令子函數(shù)A***************************/ void SENDCOMA(uchar com) //發(fā)送命令A(yù),ID=100+0 { START_HT1621(); SENDBIT(0X80,4); SENDBYTE(com); } /*************************發(fā)送命令子函數(shù)B***************************/ void SENDCOMB(uchar adr) //發(fā)送命令B,發(fā)送顯示數(shù)據(jù) { START_HT1621(); //HT1621初始化 SENDBIT(0XA0,4); //發(fā)送寫數(shù)據(jù)ID:101+6位LCD之RAM地址第1位 SENDBIT(adr,5); //然后發(fā)送地址后5位 } /*************************發(fā)送命令子函數(shù)C***************************/ void SENDCOMC(uchar com) //發(fā)送命令C,ID=100+1 { START_HT1621(); SENDBIT(0X90,4); SENDBYTE(com); } /***********************按位發(fā)送數(shù)據(jù)子函數(shù)**************************/ void SENDBIT (uchar dat,uchar bitcnt) //按位發(fā)送數(shù)據(jù) { uchar i; for(i=0;i<bitcnt;i++) { if((dat&0x80)==0X00) //從最高位發(fā)送 DATA=0; else DATA=1; delay(); WR=1; //在WR的上升沿,數(shù)據(jù)寫入HT1621B delay(); WR=0; dat=dat<<1; } } /*************************發(fā)送字節(jié)數(shù)據(jù)子函數(shù)************************/ void SENDBYTE (uchar dat) //發(fā)送字節(jié)數(shù)據(jù) { SENDBIT(dat,8); } /***************************LCD顯示子函數(shù)***************************/ void display(uchar dat) //LCD顯示 { uchar i; SENDCOMB(0X00); //從RAM的0X00地址開(kāi)始放入數(shù)據(jù) for (i=0;i<8;i++) { SENDBYTE(dat); //從SEG0開(kāi)始顯示數(shù)據(jù) } } /*************************HT1621B初始化設(shè)置*************************/ void SETUP_HT1621() //HT1621偏壓、背極、工作方式設(shè)置 { SENDCOMA(BIAS); SENDCOMA(RC256); SENDCOMA(SYSEN); delay1s(); SENDCOMA(LCDON); SENDCOMA(WDTDIS1); SENDCOMA(TIMERDIS); } /*******************************主函數(shù)******************************/ main() //主函數(shù) { TRISB=0X00; //B口設(shè)為輸出,以控制HT1621驅(qū)動(dòng)LCD SETUP_HT1621(); while(1) { display(0XFF); //全顯示 } } |