#include #define BIAS 0X50 //1/2偏压,4背极 #define RC256 0X30 //系统时钟选择为片内RC振荡器 #define WDTDIS1 0X0A //禁止WDT溢出标志输出 #define TIMERDIS 0X08 //时基输出禁能 #define SYSEN 0X02 //打开系统时钟 #define LCDON 0X06 //打开偏压发生器 #define SYSDIS 0X00 //关闭系统时钟和偏压发生器 #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); /***************************延时子函数******************************/ void delay() //延时 { uchar i=0; while(i<10) i++; } void delay1s() //延时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; } /*************************发送命令子函数A***************************/ void SENDCOMA(uchar com) //发送命令A,ID=100+0 { START_HT1621(); SENDBIT(0X80,4); SENDBYTE(com); } /*************************发送命令子函数B***************************/ void SENDCOMB(uchar adr) //发送命令B,发送显示数据 { START_HT1621(); //HT1621初始化 SENDBIT(0XA0,4); //发送写数据ID:101+6位LCD之RAM地址第1位 SENDBIT(adr,5); //然后发送地址后5位 } /*************************发送命令子函数C***************************/ void SENDCOMC(uchar com) //发送命令C,ID=100+1 { START_HT1621(); SENDBIT(0X90,4); SENDBYTE(com); } /***********************按位发送数据子函数**************************/ void SENDBIT (uchar dat,uchar bitcnt) //按位发送数据 { uchar i; for(i=0;i if((dat&0x80)==0X00) //从最高位发送 DATA=0; else DATA=1; delay(); WR=1; //在WR的上升沿,数据写入HT1621B delay(); WR=0; dat=dat<<1; } } /*************************发送字节数据子函数************************/ void SENDBYTE (uchar dat) //发送字节数据 { SENDBIT(dat,8); } /***************************LCD显示子函数***************************/ void display(uchar dat) //LCD显示 { uchar i; SENDCOMB(0X00); //从RAM的0X00地址开始放入数据 for (i=0;i<8;i++) { SENDBYTE(dat); //从SEG0开始显示数据 } } /******** *****************HT1621B初始化设置*************************/ void SETUP_HT1621() //HT1621偏压、背极、工作方式设置 { SENDCOMA(BIAS); SENDCOMA(RC256); SENDCOMA(SYSEN); delay1s(); SENDCOMA(LCDON); SENDCOMA(WDTDIS1); SENDCOMA(TIMERDIS); } /*******************************主函数******************************/ main() //主函数 { TRISB=0X00; //B口设为输出,以控制HT1621驱动LCD SETUP_HT1621(); while(1) { display(0XFF); //全显示 } }下载本文