HT1621液晶显示驱动详细原理及程序 - 图文
更新时间:2024-05-31 20:42:01 阅读量: 综合文库 文档下载
- ht1621液晶驱动推荐度:
- 相关推荐
Ht1621液晶显示详细驱动使用说明以及程序
1. 概述
HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。用于连接主控制器和HT1621的管脚只有4或5条,HT1621还有一个节电命令用于降低系统功耗。
在虎风所做的这个系统中ht1621用于驱动一个静态的LCD液晶显示器。液晶显示的方式分为静态显示和动态显示。静态与动态的区别在于静态显示是持续供电的,而动态显示是利用人的视觉停留效果,快速扫描数码管各个段,让人在视觉上感觉到数码管是同时显示的。
2. HT1621接线原理图
3. 静态LCD结构图
4. 几个曾经纠结的概念
Time base:时基,即时间基准,可以用来输出,作为外部时钟的时间基准。 占空比:将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,单位时间内扫描多少帧的频率叫帧频,将扫描公共电极(COM)选通的时间与帧周期之比叫占空比。通常占空比等于公共电极数N的倒数,即1/N。这就是说假如你要驱动4个液晶,就需要4个COM,那么你的占空比就要设定为1/4。
偏压比:指的是液晶的偏压系数,可以看看专业技术文章,偏压目的是克服交叉效应,通过把半选择点与非选择点的电压平均,适度提高非选择点的电压来抵消半选择点上的一部分电压,使半选择点上的电压下降,从而提高显示对比度;最终行半选择点和非选择点上的电压均为显示电压的1/a,1/a就称为偏压系数,也称为偏压。此方法称为1/a偏压的平均电压法,简称为1/a偏压法。
VLCD(LCD驱动电压): LCD的驱动电压为加在点亮部分的段电压与公共电压之差(峰-峰值)。
5. 关于RAM地址映射的概念
为了这个问题困扰了很久,虎风太愚钝啦……
Ht1621有一个32*4的LCD驱动,映射到32*4的RAM地址。
上图中写命令101后面跟6位RAM地址,那么这个地址是如何确定的呢?其实说白了也很简单,RAM地址就是SEG的序号。我们要点亮一段液晶管需要给他提供一个电平,而这个电平是由SEG管脚提供的,SEG管脚电平的输出又取决于对应RAM地址中的值。
驱动一个8段数码管的顺序是A,B,C,D,E,F,G,DP,我们认为前面LCD结构图中的数码管3为我们要显示的低位,那么连接原理图中A3的是SEG12,我们就说此时的RAM地址为0b001100,连接B3的是SEG11,对应的RAM地址为0b001011,依次类推,第一个数码管的所有地址为:
0b001100,0b001011,0b001010,0b001001,0b001000,0b001101,0b001110,0b000111//DP2;
其余地址类似,在此不再解释。
6. 程序
Unsigned
char
LCD_ADD[]={0b00001100,0b00110100,0b00010100,0b00100100,0b00000100,0b00101100,0b00011100,0b00111000,0b00000010,0b00111100,0b00011000,0b00101000,0b00001000,0b00100010,0b00010010,0b00110000,0b00001010,0b00110010,0b00010000,0b00100000,0b00000000,0b00101010,0b00011010};
void HT1621_Dis_Char(unsigned char d,unsigned char d_loca) {
unsigned char j;
unsigned char seg_cnt=8 ; if (d_loca==(HT1621_DATA_NUM-1))
seg_cnt=7;
//送3位模式码101及6位首地址000000 0b000000101
for (j=0; j HT1621_Send_Bits(0x05,3); //送写命令代码 101,高到低 HT1621_Send_Bits(LCD_ADD[d_loca*8+j],6); //送每段对应的地址 HT1621_Send_Bits(d&0x01,4); //送数据,com0对应的低位,低到高 d=d>>1;//右移位 HT1621_PORT|=_BV(HT1621_CS); } } /*=========显示小数点========= 输入参数:Poi_loca,为小数点的位置(0是第一位,1是第二位) */ void HT1621_Pri_Point(unsigned char Poi_loca) { unsigned char seg_cnt=8; if (Poi_loca<2) { HT1621_PORT&=~_BV(HT1621_CS); 101 HT1621_Send_Bits(LCD_ADD[Poi_loca*seg_cnt+7],6); //送点对应的地址 //送数据 HT1621_Send_Bits(0x05,3); //送写命令代码 HT1621_Send_Bits(1,4); HT1621_PORT|=_BV(HT1621_CS); } } /******************************************************** =======显示INT型数据 dat--待显示数据 ********************************************************/ void HT1621_Print_onlyInt(unsigned long dat) { unsigned char i; unsigned char data[HT1621_DATA_NUM]; if (dat>=HT1621_DATA_max) dat=dat%HT1621_DATA_max; for(i=0;i data[i]=LCD_CODE[HT1621_NoPrint_Loc];//初始化为不显示 if(dat<10) data[0] = LCD_CODE[(unsigned char) (dat)]; //个位数 else if(dat<100) {data[1] =LCD_CODE[(unsigned char) (dat/10)]; data[0] =LCD_CODE[(unsigned char) (dat)] ;} //十位数 else { data[2] =LCD_CODE[(unsigned char) (dat/100)]; data[1] =LCD_CODE[(unsigned char) (dat/10)] ; data[0] =LCD_CODE[(unsigned char) (dat)]; } //百位数 for(i=0;i 函数HT1621_Dis_Char HT1621_Dis_Char(data[i],i); } /*********************************************************/ //打印INT型数据 //dat--待显示数据 //chk--显示的数据位数: 0--关闭 1~3时,显示对应的数据;大于3时只显示3位;(从左到右) //point_loc--显示的小数点的位置:0以及大于2时:不显示小数点;1-显示第1个,2-显示第2个;(从左到右) /*********************************************************/ void HT1621_Print_Int(unsigned long dat,unsigned char chk,unsigned char point_loc) { unsigned char i; unsigned char data[HT1621_DATA_NUM]; //chk为0,则屏幕不显示 for(i=0;i data[i]= LCD_CODE[HT1621_NoPrint_Loc]; if(chk>0) {data[0] = LCD_CODE[(unsigned char) (dat)]; dat=dat/10; } if(chk>1) {data[1] = LCD_CODE[(unsigned char) (dat)]; dat=dat/10; } if(chk>2) {data[2] = LCD_CODE[(unsigned char) (dat)]; } //显示小数点 if (point_loc==1) data[0]|=0x80; else if (point_loc==2) data[1]|=0x80; //从低位到高位,调用显示每个数的函数HT1621_Dis_Char for(i=0;i /*********************************************************/ //送d_count位数据d;从低位开始送 /*********************************************************/ void HT1621_Send_Bits(unsigned char d, unsigned char d_count) { unsigned char j; for (j=0; j { HT1621_PORT&=~_BV(HT1621_WR); //wr置低; HT1621_Delay(50); //置数据位; if (d & 0x01==1) { HT1621_PORT|=_BV(HT1621_DATA); //data置0 } else { HT1621_PORT&=~_BV(HT1621_DATA); //data置1 } HT1621_PORT|=_BV(HT1621_WR); //wr置高; HT1621_Delay(50); d =(d>>1); //右移位 } } /*********************************************************/ //HT1621初始化 /*********************************************************/ void HT1621_Init() { DDRC |= _BV(4)|_BV(5)|_BV(7); //定义端口PC4-PC5-PC7输出 HT1621_PORT&=~_BV(HT1621_CS); //CS端清零 HT1621_Send_Bits(0x01,3); //送3位命令模式码100 0x80=0b10000000 0100 HT1621_Send_Bits(0xc0,9); //打开LCD偏置发生器 HT1621_PORT|=_BV(HT1621_CS); //CS端置1 HT1621_NoPrint( ); //液晶不显示 HT1621_Send_Bits(0x18,9); //系统时钟选用片内RC HT1621_Send_Bits(0x80,9); //打开系统振荡器 HT1621_Send_Bits(0x94,9); //1/2偏置,2个公共口 1000 } 7. 结束 HT1621作为液晶驱动芯片,功能十分灵活,而液晶在我们的学习项目中会经常用到,所以学好它的操作是十分必要的。 如果你看了这篇文章还不明白,就加虎风的QQ吧,279204362,我喜欢交朋友,让我们共同进步,嘎嘎!
正在阅读:
美术教师小课题研究心得体会05-10
电大西方社会学期末复习试题和答案10-19
方舟生存进化全物品id代码04-18
描写姐姐的作文600字06-12
企业集团税务管理工作总结05-02
2013小学语文教师专业水平测试04-12
2016-2022年中国民宿行业监测及投资前景评估报告 - 图文11-18
2014年高考考生温馨提示04-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 液晶显示
- 原理
- 驱动
- 图文
- 程序
- HT1621
- 详细
- 汽车修理工技师理论知识复习题
- 发热电缆使用说明书
- 自动回转刀架设计说明书
- 2016年餐饮O2O发展现状及市场前景分析
- 人教版高中英语单词表必修五 带音标
- 色彩构成结课论文
- GB 9706.1医用电气设备 安全通用要求 试验模板
- 市政道路、给排水施工组织设计
- 音乐培训学习心得体会(1人评价)
- 遴选考试经验分享,公务员遴选进入考察阶段
- 鹿国萍-星载SAR立体观测系统界面设计
- 2015年松原市事业单位考试通用知识备考资料(1.18)
- 0811新一代网银内管系统操作(分行操作员)
- UML课后习题答案
- 拓展语文视野 提高学习能力
- 2016年手持移动电视现状及发展趋势分析 (目录)_ss
- 新作文听话与不听话韩国岁月号沉船 - 图文
- 纪检监察干部必备基本业务知识
- 六年级上册数学导学案全册
- 3-《物联网应用技术》专业可行性报告