HT1621B通用程序集锦.docx
- 文档编号:6487884
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:13
- 大小:98.57KB
HT1621B通用程序集锦.docx
《HT1621B通用程序集锦.docx》由会员分享,可在线阅读,更多相关《HT1621B通用程序集锦.docx(13页珍藏版)》请在冰豆网上搜索。
HT1621B通用程序集锦
*****************AT89C51
单片机控制HT1621B驱动LCD*********************
全显示程序)
**/
#include
#include
#define
BIAS0X50
//1/2偏压,4背极
//#define
RC2560X30
//系统时钟选择为片内RC振荡器
#define
RC2560X38
#define
WDTDIS10X0A
//禁止WDT溢出标志输出
#define
TIMERDIS0X08
//时基输出禁能
#define
SYSEN0X02
//打开系统时钟
#define
LCDON0X06
//打开偏压发生器
#define
SYSDIS0X00
//关闭系统时钟和偏压发生器
#define_NOP()_nop_()sbitLED=P2^0;
sbitCS=P2^7;
sbitWRD=P2^6;
sbitDATA=P2^5;
#defineucharunsignedchar
#defineuintunsignedintvoidSENDBYTE(uchardat);
voidSENDBIT(uchardat,ucharbitcnt);
voiddelay1s()
//延时1S
{
uchari;
uintj;
for(i=0;i<10;i++)
}
for(j=0;j<1300;j++);
{
CS=1;
WRD=1;
DATA=1;//delay();_NOP();
CS=0;
CS=0;
WRD=0;
WRD=0;
START_HT1621();
SENDBIT(0X80,4);
SENDBYTE(com);
}
发送命令子函数
B*************************
**/
voidSENDCOMB(ucharadr)
//发送命令B,发送显示数据
START_HT1621();
//HT1621初始化
SENDBIT(0XA0,4);
//发送写数据ID:
101+6位LCD之RAM地址第1位
SENDBIT(adr,5);
//然后发送地址后5位
/**
{
START_HT1621();
SENDBIT(0X90,4);
SENDBYTE(com);
}
voidSENDBIT(uchardat,ucharbitcnt)//按位发送数据
{
uchari;
dat=dat<<1;
}
SENDBIT(dat,8);
uchari;
SENDBYTE(dat);
SENDBYTE(dat);
}
//HT1621偏压、背极、工作方式设置
voidSETUP_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有时有波形
刷我自己写的程序就是这个样子,SEGMEN一T部分有波形,其余就是一个电平打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子大家帮我看看是什么问题,谢谢了下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的
//STC12C5204AD单片机控制HT1621B驱动LCD
//关闭LCD偏压发生器
//打开音频输出
//关闭音频输出
延时子函数
#include
#defineBIAS0X52#defineRC256K0X30#defineWDTDIS10X0A#defineTIMERDIS0X08#defineSYSEN0X02#defineSYSDIS0X00#defineLCDON0X06#defineLCDOFF0X04#defineTONEON0X12#defineTONEOFF0X10#defineCSP3_2
#defineWRP3_4
#defineDATAP3_5
#defineucharunsignedchar#defineuintunsignedint/***************************voiddelay(uchari){
while(i--)
{ucharj=0;while(j<8)
//1/3偏压,4背极
//系统时钟选择为片内RC振荡器//禁止WDT溢出标志输出
//时基输出禁止
//打开系统时钟
//关闭系统时钟和偏压发生器//打开LCD偏压发生器
//j=12延时约4.3us
j++;
}
}
voidSendBit_1621(uchardat,ucharcnt)
{
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,ucharcnt){ 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,ucharcnt) { 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_()voidLcd_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; //SendAddress6bitStart=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; } //===================================================================voidLcd_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]); }// voidLcd_Cls(void)//清空LCD显示区 { //功能: 清空LCD显示区 //返值: 无 //入口: cSelectIcLCD的片选,取值为0,1,2 uchari;for(i=0;i lcd.buff[i]=0; Lcd_Refresh(); } //=================================================================== voidLcd_Init(void)//初始化LCD,二个屏都进行处理,同时进行清屏 { LCD_CLK=1; Lcd_Delay; LCD_IO=1; Lcd_Delay;Lcd_Command(0x00);Lcd_Command(0x02);Lcd_Command(0x18);Lcd_Command(0x01);Lcd_Command(0x03);Lcd_Command(0x29); //控制器掉电(控制字) //控制器液晶关闭(控制字) //初始化LCD控制器 //控制器上电(控制字) //控制器液晶显示(控制字) //控制器液晶模式1/3BAIS1/4DUTY(控制字) Lcd_Cls();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HT1621B 通用 程序 集锦