HT1621是128 点内存映象和多功能的LCD 驱动器 , HT1621 的软件配置特性使它适用于多种 LCD 应用场合,包括 LCD 模块和显示子系统。用于连接主控制器和HT1621 的管脚只有 4 或 5 条, HT1621 还有一个节电命令用于降低系统功耗。在虎风所做的这个系统中 ht1621 用于驱动一个静态的 LCD 液晶显示器。液晶显示的方式分为静态显示和动态显示 。 静态与动态的区别在于静态显示是持续供电的 , 而动态显示是利用人的视觉停留效果 , 快速扫描数码管各个段 , 让人在视觉上感觉到数码管是同时显示的。
各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶
程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平
打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子大家帮我看看是什么问题,谢谢了下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的
单片机源程序如下:
- 各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶
- 程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形
- 刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平
- 打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子
- 大家帮我看看是什么问题,谢谢了
- 下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的
- //STC12C5204AD单片机控制HT1621B驱动LCD
- #include <STC12C52XXAD.h>
- #include <stdio.h>
- #include <intrins.h>
- #define BIAS 0X52 //1/3偏压,4背极
- #define RC256K 0X30 //系统时钟选择为片内RC振荡器
- #define WDTDIS1 0X0A //禁止WDT溢出标志输出
- #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 uint unsigned int
- /***************************延时子函数******************************/
- void delay(uchar i) //j=12延时约4.3us
- {
- while(i--)
- {
- uchar j=0;
- while(j<8)
- 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=dat<<1;
- }
- }
- void SendDataBit_1621(uchar dat,uchar cnt)
- {
- uchar i;
- for(i =0; i <cnt; i ++)
- {
- if((dat&0x01)==0) DATA=0;
- else DATA=1;
- WR=0;
- delay(2);
- WR=1;
- dat=dat>>1;
- }
- }
- 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;
- _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 a[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
- //=============================================================================
- #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_Delay;
- 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;i<6;i++)
- {
- if(Start&0x20) LCD_IO=1;
- else LCD_IO=0;
- Lcd_Delay;
- LCD_CLK=0;
- Lcd_Delay;
- Start=Start<<1;
- LCD_CLK=1;
- Lcd_Delay;
- }
- //Send data 8bit
- for(i=0;i<8;i++)
- {
- if(cData&0x01) LCD_IO=1;
- else LCD_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(uchar Command)
- //向指定的LCD当中写入一个命令
- //每个命令应以100三个位为起始,命令长度为9位,实际有效位为8位,因此在最后补一个0
- // LcdSelect--LCD的片选确定,取值为0,1,2
- // Command----要写入的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;i<8;i++)
- {
- LCD_CLK=0;
- Lcd_Delay;
- if(Command&0x80) LCD_IO=1;
- else LCD_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进行刷屏
- {
- uchar i;
- for(i=0;i<LCD_BUFF_MAX;i++)
- Lcd_Data(i,lcd.buff[i]);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
HT1621(不带字库).zip
(1.43 MB, 下载次数: 112)
|