HT1621B通用程序集锦.docx
- 文档编号:7997926
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:9
- 大小:18.23KB
HT1621B通用程序集锦.docx
《HT1621B通用程序集锦.docx》由会员分享,可在线阅读,更多相关《HT1621B通用程序集锦.docx(9页珍藏版)》请在冰豆网上搜索。
HT1621B通用程序集锦
/*********************************************************************
*****************AT89C51单片机控制HT1621B驱动LCD*********************
***************** (全显示程序) *********************
*********************************************************************/
#include
#include
#defineBIAS0X50 //1/2偏压,4背极
//#defineRC2560X30 //系统时钟选择为片内RC振荡器
#defineRC256 0X38
#defineWDTDIS10X0A //禁止WDT溢出标志输出
#defineTIMERDIS0X08 //时基输出禁能
#defineSYSEN0X02 //打开系统时钟
#defineLCDON0X06 //打开偏压发生器
#defineSYSDIS0X00 //关闭系统时钟和偏压发生器
#define_NOP()_nop_()
sbitLED=P2^0;
sbitCS=P2^7;
sbitWRD=P2^6;
sbitDATA=P2^5;
#defineucharunsignedchar
#defineuintunsignedint
voidSENDBYTE(uchardat);
voidSENDBIT(uchardat,ucharbitcnt);
/***************************延时子函数******************************/
voiddelay1s() //延时1S
{
uchari;
uintj;
for(i=0;i<10;i++)
for(j=0;j<1300;j++);
}
/**************************HT1621B初始化****************************/
voidSTART_HT1621() //初始化HT1621
{
CS=1;
WRD=1;
DATA=1;
//delay();
_NOP();
CS=0;
CS=0;
WRD=0;
WRD=0;
}
/*************************发送命令子函数A***************************/
voidSENDCOMA(uchar) //发送命令A,ID=100+0
{
START_HT1621();
SENDBIT(0X80,4);
SENDBYTE();
}
/*************************发送命令子函数B***************************/
voidSENDCOMB(ucharadr) //发送命令B,发送显示数据
{
START_HT1621(); //HT1621初始化
SENDBIT(0XA0,4); //发送写数据ID:
101+6位LCD之RAM地址第1位
SENDBIT(adr,5); //然后发送地址后5位
}
/*************************发送命令子函数C***************************
voidSENDCOMC(uchar) //发送命令C,ID=100+1
{
START_HT1621();
SENDBIT(0X90,4);
SENDBYTE();
}
/***********************按位发送数据子函数**************************/
voidSENDBIT(uchardat,ucharbitcnt) //按位发送数据
{
uchari;
for(i=0;i { if((dat&0x80)==0X00) //从最高位发送 DATA=0; else DATA=1; //delay(); _NOP(); WRD=1; //在WRD的上升沿,数据写入HT1621B //delay(); _NOP(); WRD=0; dat=dat<<1; } } /*************************发送字节数据子函数************************/ voidSENDBYTE(uchardat) //发送字节数据 { SENDBIT(dat,8); } /***************************LCD显示子函数***************************/ voiddisplay(uchardat) //LCD显示 { uchari; SENDCOMB(0X00); //从RAM的0X00地址开始放入数据 SENDBYTE(dat); SENDBYTE(dat); for(i=0;i<2;i++) { SENDBYTE(dat); //从SEG0开始显示数据 } } /*************************HT1621B初始化设置*************************/ voidSETUP_HT1621() //HT1621偏压、背极、工作方式设置 { SENDCOMA(BIAS); SENDCOMA(RC256); SENDCOMA(SYSEN); delay1s(); SENDCOMA(LCDON); SENDCOMA(WDTDIS1); SENDCOMA(TIMERDIS); } /*******************************主函数******************************/ main() //主函数 { LED=1; SETUP_HT1621(); while (1) { display(0XFF); //全显示 } } 各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶 程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形 刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平 打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子 大家帮我看看是什么问题,谢谢了 下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的 //STC12C5204AD单片机控制HT1621B驱动LCD #include #include #include #defineBIAS0X52 //1/3偏压,4背极 #defineRC256K0X30 //系统时钟选择为片内RC振荡器 #defineWDTDIS10X0A //禁止WDT溢出标志输出 #defineTIMERDIS0X08 //时基输出禁止 #defineSYSEN0X02 //打开系统时钟 #defineSYSDIS0X00 //关闭系统时钟和偏压发生器 #defineLCDON0X06 //打开LCD偏压发生器 #defineLCDOFF0X04 //关闭LCD偏压发生器 #defineTONEON 0X12 //打开音频输出 #defineTONEOFF0X10 //关闭音频输出 #defineCSP3_2 #defineWRP3_4 #defineDATAP3_5 #defineucharunsignedchar #defineuintunsignedint /***************************延时子函数******************************/ voiddelay(uchari) //j=12延时约4.3us { while(i--) { ucharj=0; while(j<8) j++; } } voidSendBit_1621(uchardat,uchart) { uchari; for(i=0;i { if((dat&0x80)==0) DATA=0; elseDATA=1; WR=0; delay (2); WR=1; dat=dat<<1; } } voidSendDataBit_1621(uchardat,uchart) { uchari; for(i=0;i { if((dat&0x01)==0)DATA=0; elseDATA=1; WR=0; delay (2); WR=1; dat=dat>>1; } } voidSendCmd(ucharcommand) { CS=0; _nop_(); _nop_(); SendBit_1621(0x80,4); SendBit_1621(command,8); CS=1; } voidWrite_1621(ucharaddr,uchardat) { CS=0; _nop_(); _nop_(); SendBit_1621(0xa0,3); SendBit_1621(addr,6); SendDataBit_1621(dat,4); CS=1; } voidWriteAll_1621(ucharaddr,uchar*p,uchart) { uchari; CS=0; _nop_(); _nop_(); SendBit_1621(0xa0,3); SendBit_1621(addr,6); for(i=0;i { SendDataBit_1621(*p,8); } CS=1; } /*******************************主函数******************************/ main() { uchara[10]; a[0]=0xFF;a[1]=0xFF;a[2]=0xFF;a[3]=0xFF;a[4]=0xFF; a[5]=0xFF;a[6]=0xFF;a[7]=0xFF;a[8]=0xFF;a[9]=0xFF; a[10]=0xFF;a[11]=0xFF;a[12]=0xFF;a[13]=0xFF;a[14]=0xFF; a[15]=0xFF; SendCmd(BIAS); SendCmd(SYSEN); SendCmd(LCDON); //SendCmd(RC256K); WriteAll_1621(0,a,16); //SendCmd(LCDOFF); } LCD驱动程序适用于HT1621 //============================================================================= #defineLcd_Delay_nop_();_nop_();_nop_();_nop_();_nop_();_nop_() void Lcd_Data(ucharStart,ucharcData) //将数据当中的字节与LCD上的进行同步 //Start --要开始同页面地址,每个页面为4个有效位,总其为32X4字节 //Length --要同步的页面数量 { uchari; LCD_CS=0; Lcd_Delay; Lcd_Delay; Lcd_Delay; //SendID101B LCD_CLK=0; Lcd_Delay; LCD_IO=1; Lcd_Delay; LCD_CLK=1; Lcd_Delay; LCD_CLK=0; Lcd_Delay; LCD_IO=0; Lcd_Delay; LCD_CLK=1; Lcd_Delay; LCD_CLK=0; Lcd_Delay; LCD_IO=1; Lcd_Delay; LCD_CLK=1; Lcd_Delay; //SendAddress6bit Start=Start*2; for(i=0;i<6;i++) { if(Start&0x20)LCD_IO=1; elseLCD_IO=0; Lcd_Delay; LCD_CLK=0; Lcd_Delay; Start=Start<<1; LCD_CLK=1; Lcd_Delay; } //Senddata8bit for(i=0;i<8;i++) { if(cData&0x01)LCD_IO=1; elseLCD_IO=0; Lcd_Delay; LCD_CLK=0; Lcd_Delay; cData=cData>>1; LCD_CLK=1; Lcd_Delay; } LCD_CS=1; Lcd_Delay; } //============================================================================= void Lcd_Command(ucharCommand) //向指定的LCD当中写入一个命令 //每个命令应以100三个位为起始,命令长度为9位,实际有效位为8位,因此在最后补一个0 //LcdSelect--LCD的片选确定,取值为0,1,2 //Command----要写入的8位命令 { uchari; LCD_CS=0; Lcd_Delay; Lcd_Delay; Lcd_Delay; //SendID100B LCD_CLK=0; Lcd_Delay; LCD_IO=1; Lcd_Delay; LCD_CLK=1; Lcd_Delay; LCD_CLK=0; Lcd_Delay; LCD_IO=0; Lcd_Delay; LCD_CLK=1; Lcd_Delay; LCD_CLK=0; Lcd_Delay; LCD_IO=0; Lcd_Delay; LCD_CLK=1; Lcd_Delay; for(i=0;i<8;i++) { LCD_CLK=0; Lcd_Delay; if(Command&0x80)LCD_IO=1; elseLCD_IO=0; Command=Command<<1; Lcd_Delay; LCD_CLK=1; Lcd_Delay; } ///最后补一个0 LCD_CLK=0; Lcd_Delay; LCD_IO=0; Lcd_Delay; LCD_CLK=1; Lcd_Delay; LCD_CS=1; Lcd_Delay; } //============================================================================= void Lcd_Refresh(void) //重新对LCD进行刷屏 { uchari; for(i=0;i Lcd_Data(i,lcd.buff[i]); } //============================================================================= void Lcd_Cls(void)//清空LCD显示区 { //功能: 清空LCD显示区 //返值: 无 //入口: cSelectIcLCD的片选,取值为0,1,2 uchari; for(i=0;i lcd.buff[i]=0; Lcd_Refresh(); } //============================================================================= void Lcd_Init(void)//初始化LCD,二个屏都进行处理,同时进行清屏 { LCD_CLK=1; Lcd_Delay; LCD_IO=1; Lcd_Delay; Lcd_Command(0x00); //控制器掉电(控制字) Lcd_Command(0x02); //控制器液晶关闭(控制字) Lcd_Command(0x18); //初始化LCD控制器 Lcd_Command(0x01); //控制器上电(控制字) Lcd_Command(0x03); //控制器液晶显示(控制字) Lcd_Command(0x29); //控制器液晶模式1/3BAIS1/4DUTY(控制字) Lcd_Cls(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HT1621B 通用 程序 集锦