HT1621B 通用程序集锦文档格式.docx
《HT1621B 通用程序集锦文档格式.docx》由会员分享,可在线阅读,更多相关《HT1621B 通用程序集锦文档格式.docx(9页珍藏版)》请在冰点文库上搜索。
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;
WRD=0;
/*************************发送命令子函数A***************************/
voidSENDCOMA(ucharcom)
//发送命令A,ID=100+0
START_HT1621();
SENDBIT(0X80,4);
SENDBYTE(com);
/*************************发送命令子函数B***************************/
voidSENDCOMB(ucharadr)
//发送命令B,发送显示数据
//HT1621初始化
SENDBIT(0XA0,4);
//发送写数据ID:
101+6位LCD之RAM地址第1位
SENDBIT(adr,5);
//然后发送地址后5位
/*************************发送命令子函数C***************************
voidSENDCOMC(ucharcom)
//发送命令C,ID=100+1
SENDBIT(0X90,4);
/***********************按位发送数据子函数**************************/
voidSENDBIT(uchardat,ucharbitcnt)
//按位发送数据
bitcnt;
{
if((dat&
0x80)==0X00)
//从最高位发送
DATA=0;
else
DATA=1;
//delay();
_NOP();
WRD=1;
//在WRD的上升沿,数据写入HT1621B
WRD=0;
dat=dat<
<
1;
}
/*************************发送字节数据子函数************************/
voidSENDBYTE(uchardat)
//发送字节数据
SENDBIT(dat,8);
/***************************LCD显示子函数***************************/
voiddisplay(uchardat)
//LCD显示
SENDCOMB(0X00);
//从RAM的0X00地址开始放入数据
SENDBYTE(dat);
for(i=0;
2;
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
STC12C52XXAD.h>
stdio.h>
#defineBIAS0X52
//1/3偏压,4背极
#defineRC256K0X30
//时基输出禁止
//关闭系统时钟和偏压发生器
//打开LCD偏压发生器
#defineLCDOFF0X04
//关闭LCD偏压发生器
#defineTONEON
0X12
//打开音频输出
#defineTONEOFF0X10
//关闭音频输出
#defineCSP3_2
#defineWRP3_4
#defineDATAP3_5
voiddelay(uchari)
//j=12延时约4.3us
while(i--)
ucharj=0;
while(j<
8)
j++;
voidSendBit_1621(uchardat,ucharcnt)
for(i=0;
i<
cnt;
i++)
if((dat&
0x80)==0)
DATA=0;
elseDATA=1;
WR=0;
delay
(2);
WR=1;
dat=dat<
voidSendDataBit_1621(uchardat,ucharcnt)
0x01)==0)DATA=0;
dat=dat>
>
voidSendCmd(ucharcommand)
_nop_();
SendBit_1621(0x80,4);
SendBit_1621(command,8);
voidWrite_1621(ucharaddr,uchardat)
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
SendDataBit_1621(dat,4);
voidWriteAll_1621(ucharaddr,uchar*p,ucharcnt)
i++,p++)
SendDataBit_1621(*p,8);
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_()
void
Lcd_Data(ucharStart,ucharcData)
//将数据当中的字节与LCD上的进行同步
//Start
--要开始同页面地址,每个页面为4个有效位,总其为32X4字节
//Length
--要同步的页面数量
uchari;
LCD_CS=0;
Lcd_Delay;
//SendID101B
LCD_CLK=0;
LCD_IO=1;
LCD_CLK=1;
LCD_IO=0;
//SendAddress6bit
Start=Start*2;
for(i=0;
6;
if(Start&
0x20)LCD_IO=1;
elseLCD_IO=0;
Start=Start<
//Senddata8bit
8;
if(cData&
0x01)LCD_IO=1;
cData=cData>
LCD_CS=1;
Lcd_Command(ucharCommand)
//向指定的LCD当中写入一个命令
//每个命令应以100三个位为起始,命令长度为9位,实际有效位为8位,因此在最后补一个0
//LcdSelect--LCD的片选确定,取值为0,1,2
//Command----要写入的8位命令
//SendID100B
if(Command&
0x80)LCD_IO=1;
Command=Command<
///最后补一个0
Lcd_Refresh(void)
//重新对LCD进行刷屏
LCD_BUFF_MAX;
Lcd_Data(i,lcd.buff[i]);
Lcd_Cls(void)//清空LCD显示区
//功能:
清空LCD显示区
//返值:
无
//入口:
cSelectIcLCD的片选,取值为0,1,2
lcd.buff[i]=0;
Lcd_Refresh();
Lcd_Init(void)//初始化LCD,二个屏都进行处理,同时进行清屏
Lcd_Command(0x00);
//控制器掉电(控制字)
Lcd_Command(0x02);
//控制器液晶关闭(控制字)
Lcd_Command(0x18);
//初始化LCD控制器
Lcd_Command(0x01);
//控制器上电(控制字)
Lcd_Command(0x03);
//控制器液晶显示(控制字)
Lcd_Command(0x29);
//控制器液晶模式1/3BAIS1/4DUTY(控制字)
Lcd_Cls();