《HT1621B 通用程序集锦.docx》由会员分享,可在线阅读,更多相关《HT1621B 通用程序集锦.docx(11页珍藏版)》请在三一办公上搜索。
1、HT1621B 通用程序集锦/* *AT89C51单片机控制HT1621B驱动LCD* * * */ #include #include #define BIAS 0X50 /1/2偏压,4背极 /#define RC256 0X30 /系统时钟选择为片内RC振荡器 #define RC256 0X38 #define WDTDIS1 0X0A /禁止WDT溢出标志输出 #define TIMERDIS 0X08 /时基输出禁能 #define SYSEN 0X02 /打开系统时钟 #define LCDON 0X06 /打开偏压发生器 #define SYSDIS 0X00 /关闭系统时钟和
2、偏压发生器 #define _NOP _nop_ sbit LED=P20; sbit CS=P27; sbit WRD=P26; sbit DATA=P25; #define uchar unsigned char #define uint unsigned int void SENDBYTE (uchar dat); void SENDBIT (uchar dat,uchar bitcnt); /*延时子函数*/ void delay1s /延时1S uchar i; uint j; for(i=0;i10;i+) for(j=0;j1300;j+); /*HT1621B初始化*/ voi
3、d START_HT1621 /初始化HT1621 CS=1; WRD=1; DATA=1; /delay; _NOP; CS=0; CS=0; WRD=0; WRD=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之
4、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;ibitcnt;i+) if(dat&0x80)=0X00) /从最高位发送 DATA=0; else DATA=1; /delay; _NOP; WRD=1; /在WRD的上
5、升沿,数据写入HT1621B /delay; _NOP; WRD=0; dat=dat1; /*发送字节数据子函数*/ void SENDBYTE (uchar dat) /发送字节数据 SENDBIT(dat,8); /*LCD显示子函数*/ void display(uchar dat) /LCD显示 uchar i; SENDCOMB(0X00); /从RAM的0X00地址开始放入数据 SENDBYTE(dat); SENDBYTE(dat); for (i=0;i2;i+) SENDBYTE(dat); /从SEG0开始显示数据 /*HT1621B初始化设置*/ void SETUP_
6、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不到的电平
7、,com3为3点几V的电平,com4有时有波形 刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平 打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子 大家帮我看看是什么问题,谢谢了 下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的 /STC12C5204AD单片机控制HT1621B驱动LCD #include #include #include #define BIAS 0X52 /1/3偏压,4背极 #define RC256K 0X30 /系统时钟选择为片内RC振荡器 #define WDTDIS1 0X0A /禁止WDT溢出标志输出
8、#define TIMERDIS 0X08 /时基输出禁止 #define SYSEN 0X02 /打开系统时钟 #define SYSDIS 0X00 /关闭系统时钟和偏压发生器 #define LCDON 0X06 /打开LCD偏压发生器 #define LCDOFF 0X04 /关闭LCD偏压发生器 #define TONEON 0X12 /打开音频输出 #define TONEOFF 0X10 /关闭音频输出 #define CS P3_2 #define WR P3_4 #define DATA P3_5 #define uchar unsigned char #define uin
9、t unsigned int /*延时子函数*/ void delay(uchar i) /j=12延时约4.3us while(i-) uchar j=0; while(j8) j+; void SendBit_1621(uchar dat ,uchar cnt) uchar i; for(i =0; i cnt; i +) if(dat&0x80)=0) DATA=0; else DATA=1; WR=0; delay(2); WR=1; dat=dat1; void SendDataBit_1621(uchar dat,uchar cnt) uchar i; for(i =0; i 1;
10、 void SendCmd(uchar command) CS=0; _nop_; _nop_; SendBit_1621(0x80,4); SendBit_1621(command,8); CS=1; void Write_1621(uchar addr,uchar dat) CS=0; _nop_; _nop_; SendBit_1621(0xa0,3); SendBit_1621(addr,6); SendDataBit_1621(dat,4); CS=1; void WriteAll_1621(uchar addr,uchar *p,uchar cnt) uchar i; CS=0;
11、_nop_; _nop_; SendBit_1621(0xa0,3); SendBit_1621(addr,6); for(i =0; i cnt; i +,p+) SendDataBit_1621(*p,8); CS=1; /*主函数*/ main uchar a10; a0=0xFF;a1=0xFF;a2=0xFF;a3=0xFF;a4=0xFF; a5=0xFF;a6=0xFF;a7=0xFF;a8=0xFF;a9=0xFF; a10=0xFF;a11=0xFF;a12=0xFF;a13=0xFF;a14=0xFF; a15=0xFF; SendCmd(BIAS); SendCmd(SY
12、SEN); SendCmd(LCDON); / SendCmd(RC256K); WriteAll_1621(0,a,16); / SendCmd(LCDOFF); LCD驱动程序 适用于HT1621 /= #define Lcd_Delay _nop_;_nop_;_nop_;_nop_;_nop_;_nop_ void Lcd_Data(uchar Start,uchar cData) /将数据当中的字节与LCD上的进行同步 / Start -要开始同页面地址,每个页面为4个有效位,总其为32X4字节 / Length -要同步的页面数量 uchar i; LCD_CS=0; Lcd_De
13、lay; Lcd_Delay; Lcd_Delay; /Send ID 101B 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; /Send Address 6bit Start=Start*2; for(i=0;i6;i+) if(Start&0x20)
14、LCD_IO=1; else LCD_IO=0; Lcd_Delay; LCD_CLK=0; Lcd_Delay; Start=Start1; LCD_CLK=1; Lcd_Delay; /Send data 8bit for(i=0;i1; LCD_CLK=1; Lcd_Delay; LCD_CS=1; Lcd_Delay; /= void Lcd_Command(uchar Command) /向指定的LCD当中写入一个命令 /每个命令应以100三个位为起始,命令长度为9位,实际有效位为8位,因此在最后补一个0 / LcdSelect-LCD的片选确定,取值为0,1,2 / Command
15、-要写入的8位命令 uchar i; LCD_CS=0; Lcd_Delay; Lcd_Delay; Lcd_Delay; /Send ID 100B 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;i8;i+) LCD_CLK=0; Lcd
16、_Delay; if(Command&0x80) LCD_IO=1; else LCD_IO=0; Command=Command1; 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进行刷屏 uchar i; for(i=0;iLCD_BUFF_MAX;i+) Lcd_Data(i,lcd.buffi); /= void L
17、cd_Cls(void) /清空LCD显示区 /功能: 清空LCD显示区 /返值: 无 /入口: cSelectIc LCD的片选,取值为0,1,2 uchar i; for(i=0;iLCD_BUFF_MAX;i+) lcd.buffi=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/3BAIS 1/4DUTY(控制字) Lcd_Cls;
链接地址:https://www.31ppt.com/p-3158261.html