第一范文网 - 专业文章范例文档资料分享平台

第十七节:液晶屏第三大类定律—任意位置显示一个点HT1621驱动段码液晶屏

来源:用户分享 时间:2020-06-26 本文由大度就行 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第十七节:液晶屏第三大类定律—任意位置显示一个点(HT1621驱动段码液晶屏)

(1) 开场白:

段码液晶屏往往应用在出货量比较大的家用消费类电子,比如空调遥控器,小时候带的电子手表等,都是段码屏。段码屏是非标屏,都是客户定做的,第一次开模费大概一两千元,厂家一般都会有起订量的要求,除此之外,它的单位成本相对要比点阵屏要便宜,而且我个人认为显示的效果要比点阵屏漂亮。

段码屏的驱动程序跟数码管的静态驱动程序一样,只要我们弄懂了怎样显示一个基本单位,根据此基本单位编写一个字库表,然后用与(&)和或(|)这两种位运算符就可以随心所欲编写我们要显示的数字或者形状。有两种常用的驱动方案:

第一种:如果单片机内部集成了seg和com引脚的液晶驱动模块,直接用单片机驱动。 第二种:单片机用3个IO口跟HT1621进行通讯,用 HT1621驱动段码屏。

这节我重点介绍第二种。HT1621有4个COM,分别是com3,com2,com1,com0。有32个SEG,分别是SEG0,SEG1….SEG31。

什么是COM,什么是SEG?用鸿哥的思路来解释,COM就是横向上的X坐标,SEG就是纵向上的Y坐标。X坐标与Y坐标组合成一张表格,每格代表一个显示点。比如HT1621,有4个COM,32个SEG,组成一个32行,每行装4个点的表格,一共有128个点,也就是最多可以显示128个点,用数码管的思路,最多可以显示128个LED灯。因为纵向上有32行,因此Y轴的地址范围是0到31。每一行X轴上的4个点,我们用一个字节来表示。一个字节有8位,高4位分别代表这个4个点,低4位为空。比如第一行(SEG0行)的第1个(COM3)要显示,第2个(COM2)要显示,第3个(COM1)不要显示,第4个(COM0)不要显示,那么用一个字节来表示就是十六进制的0xc0.要把这两个点点亮,只要把X轴的数据设置成0xc0,Y轴的数据设置成0x00,然后放到鸿哥精心研制的seg_display(unsigned char col, unsigned char pag)驱动程序里就可以了.

(2)功能需求:

在COM和SEG组成的4X32表格中,显示第二行的第3和第4两个点。 (3) 硬件原理:

用单片机的3个IO口分别跟HT1621的CS,WR,DATA连接。 (4)源码适合的单片机:STC11F04E,晶振为11.0592MHz。

(5)源代码讲解如下: #include \#include \#include \#include \

#define BIAS 0X52 //此处千万小心,鸿哥在上个月的一个项目中就是在这里被卡了7天。

//必须跟硬件电路的COM匹配。1个或者2个COM:0x42。3个COM:0x4A。4个COM:0x52

#define RC256 0X30 #define SYSTEN 0X02 #define SYSDIS 0X00 #define LCDON 0X06

void SendBitToHT1621(unsigned char nbit,unsigned char n);//发送一个字节中的N位到HT1621里,驱动程序的最底层部分

void write_com(unsigned char cmdcode); //写命令到LCD void init_lcd(); //--初始化LCD屏

void seg_display(unsigned char col, unsigned char pag); //显示基本单位点 void screen_clear (); //清空屏幕的内容

//补充说明:吴坚鸿程序风格是这样的,凡是输出IO后缀都是_dr,凡是输入的//IO后缀都//是_sr

sbit ht162x_data_dr=P3^1; sbit ht162x_cs_dr=P3^6; sbit ht162x_wr_dr=P3^0;

main() {

init_lcd(); //初始化液晶屏 screen_clear ();//清空整屏显示内容

seg_display(0x30,1); //在COM和SEG组成的4X32表格中,显示第二行的第3和第4两个点。 while(1) {

; } }

//发送一个字节中的N位到HT1621里,驱动程序的最底层部分 void SendBitToHT1621(unsigned char nbit,unsigned char n)

{

unsigned char i; for(i=0;i

ht162x_wr_dr=0;

if(nbit>=0x80) //判断最高位 ht162x_data_dr=1; else

ht162x_data_dr=0;

_nop_(); _nop_(); _nop_();

ht162x_wr_dr=1; _nop_(); _nop_();

_nop_(); nbit<<=1; } }

//------------------写命令到LCD,,驱动液晶程序的一部分------------------------------ void write_com(unsigned char cmdcode) {

ht162x_cs_dr=0; //选通HT1621 _nop_(); _nop_();

SendBitToHT1621(0x80,4); SendBitToHT1621(cmdcode,8);

_nop_(); _nop_();

ht162x_cs_dr=1; _nop_(); _nop_(); _nop_(); }

//*------------------初始化LCD屏--------------------------*/ void init_lcd() {

write_com(SYSTEN); //Turn on system oscillator write_com(RC256); //启动内部256KRC 振荡器 write_com(BIAS); // 1/3 bais . 4 duty write_com(LCDON); //开启LCD

}

//显示基本单位点,本节的核心内容。col代表X轴,X轴的数据用位来表示,一个字节中的高4位来表示。pag代表Y轴

void seg_display(unsigned char col, unsigned char pag) {

pag<<=2;

ht162x_cs_dr=0; //选通HT1621 _nop_(); _nop_();

SendBitToHT1621(0xA0,3); //发送写数据模式101 SendBitToHT1621(pag,6); //发送Y轴数据 SendBitToHT1621(col,4); //发送X轴数据 ht162x_cs_dr=1; _nop_(); _nop_(); }

//*------------------清空屏幕的内容---------------*/ void screen_clear () {

unsigned char i; unsigned char y=0; for(i=0;i<32;i++) {

seg_display(0x00,y); y=y+1; } }

(6)小结:

因为段码屏是一种客户定做的屏,每种屏的字库表都会不一样,因此我在这节只列出最核心的驱动程序,上层的应用程序大家以后根据项目自己编写,只要多利用查表,与(&)和或

(|)这两种位运算符来处理,不难。软件设置初始化HT1621的配置参数时,要特别注意实际电路上用了多少个COM,然后设置相等的COM配置,否则,应用在大段码显示屏的项目时,有可能因为驱动力不够,会显示乱码。鸿哥在上个月的一个项目中就是被这样的问题卡住了,还好鸿哥功力深厚,仅仅用了7天就找出了问题,现在分享给大家。 (未完待续,下节更精彩,不要走开哦

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新资格考试认证第十七节:液晶屏第三大类定律—任意位置显示一个点HT1621驱动段码液晶屏 全文阅读和word下载服务。

第十七节:液晶屏第三大类定律—任意位置显示一个点HT1621驱动段码液晶屏 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1103155.html(转载请注明文章来源)

相关推荐:

热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top