历史上的今天
返回首页

历史上的今天

今天是:2025年01月17日(星期五)

正在发生

2018年01月17日 | ht1621 LCD通用驱动实例

2018-01-17 来源:eefocus

;LCD 设定(命令模式字的低8位数据)
BIAS EQU 52H ;1/3 偏压4背极
RC256 EQU 30H ;系统时钟选用片
内RC振荡器
SYSEN EQU 02H ;打开系统时钟
LCDON EQU 06H ;打开偏压发生器
SYSDIS EQU 00H ;关闭系统时钟和

偏压发生器
X32K EQU 28H ;系统时钟选择为
片外晶振        
ToneOn EQU 12H ;打开音频输出
ToneOff EQU 10H ;关闭音频输出
Tone4k EQU 80H ;音频输出频率为
4K
Tone2k EQU 0C0H         ;音频输出频率为2K
TIMEREN EQU 0CH   ;时基输出使能
TIMERDIS EQU 08H ;时基输出禁能
CLRtime         EQU 18H ;清零进基发生器
WDTEN EQU 0EH ;使能WDT溢出标志
输出
WDTDIS EQU 0AH ;禁止WDT溢出标志
输出
CLRWDT EQU 1CH ;清零WDT
IRQEN EQU 10H ;使能IRQ输出
IRQDIS EQU 00H ;禁止IRQ输出
FR1 EQU 40H ;设置时基输出
1Hz,WDT溢出时间4s

;HT1621B控制位(液晶模块接口定义,用户根据自已的需要更改)
CS BIT P0.1 ;HT1621B片选
WRITE BIT P0.3 ;HT1621B写控制位
SDATA BIT P0.5 ;HT1621B数据线

;显示缓冲区(用户根据自已的需要更改变量的存储地址)
DISBUFFER EQU 34H ;显示缓冲区地址34H--43H(16
字节)

;临时变量定义(不会破坏这些资源,只是临时占用,用户不要自行修改)
lcdbitcnt EQU 03H ;发送位计数器
lcdcommand EQU 02H ;发送命令缓冲器
lcdadr EQU 01H ;lcd显存指针
LCDBYTECNT EQU 04H ;发送字节数记数器 

;===============================================================================
====          
;                              向HT1621B发送命令和数据模块
;软件包面向用户的界面程序:
; Send1621Com    发送命令子程序,命令ID为100+0型式 + 命令字
; Send1621ComB    发送命令子程序(B),命令ID为100+1型式 + 命令字
; HT1621DOWN    设置1621进行掉电工作方式
; INTI1621    初化1621,并打开LCD显示,用户可更改相应初化字,进行1621的不同设
置。
; BrushLcd 刷新LCD显示,即将显示缓冲区的16字节数据发送到1621,从SEG0
段开始。
; DISDPTR    将DPTR指向的程序存储器的数据(连续16字节)发送到1621显示。
;这此子程序都会自动保护所需的临时单元,所以占用较多的堆栈,用户要注意这一点。
;===============================================================================
====

;发送命令程序
;名称: Send1621Com
;描述: 向HT1621B发送控制命令,命令内容在LCDCOMMAND中。
;所发的命令类型为ID=100+0+命令,占用堆栈。
Send1621Com:
PUSH ACC
PUSH LCDBITCNT
ACALL INTI ;起动1621(即初
化)
MOV LCDBITCNT,#04h
MOV A,#80h        ;发送ID值100+0
ACALL sendb0
MOV A,LCDCOMMAND ;取得命令字
ACALL send1621byte ;发送到1621
SETB write
SETB cs
SETB sdata
POP LCDBITCNT
POP ACC
RET

;发送命令程序(B)
;名称: Send1621ComB
;描述: 向HT1621B发送控制命令,命令内容在LCDCOMMAND中。
;所发的命令类型为ID=100+1+命令,占用堆栈。
Send1621ComB:
PUSH ACC
PUSH LCDBITCNT
ACALL INTI ;起动1621(即初
化)
MOV LCDBITCNT,#04h
MOV A,#90h ;发送ID值100+1
ACALL sendb0
MOV A,LCDCOMMAND
ACALL send1621byte
SETB write ;将SPI接口均置为
高电平
SETB cs
SETB sdata
POP LCDBITCNT
POP ACC
RET

;HT1621B掉电模式
;使1621进行掉电模式,以降低功耗
HT1621DOWN:
PUSH LCDCOMMAND
MOV LCDCOMMAND,#SYSDIS ;关闭系统振荡器即进行掉电
方式
ACALL Send1621Com                  
POP LCDCOMMAND
RET

;1621设置
;描述:进行1621的基本设置,偏压、背极、系统工作方式
;用户添加初化内容或更改设置内容。
INTI1621:
PUSH LCDCOMMAND
MOV LCDCommand,#bias                    
ACALL  Send1621Com ;工作于1/3偏压,
4背极                 
MOV LCDCommand,#X32K       
ACALL Send1621Com ;系统时钟选择为
外部时钟
MOV LCDCommand,#wdtdis          
ACALL Send1621Com ;关闭看门狗
MOV LCDCommand,#timerdis        
ACALL Send1621Com                                  
MOV LCDCommand,#sysen ;启动1621系统振荡器
ACALL Send1621Com                 
MOV LCDCommand,#LCDON ;启动1621显示偏压发生器,启
动显示
ACALL Send1621Com
POP LCDCOMMAND
RET  

;刷新显示子程序
;名称:BrushLcd
;描述:把显示缓冲区DISBUFFER共16个单元的内容送到1621中
BrushLcd:
PUSH LCDBYTECNT
PUSH LCDADR
MOV LCDBYTECNT,#16 ;发送16个数据
MOV LCDADR,#DISBUFFER ;指向显示缓冲区
DISPLAY0:
LCALL SEND1621DATA ;调用发送数据子
程序,从SEG0段开始
POP LCDADR
POP LCDBYTECNT
RET 

;函数名:DISDPTR
;功能:    把DPTR指向的程序存贮器的16个字节内容直接送到1621的显示缓冲区内
;参数:    DPTR-缓冲区指针
;返回值:无
DISDPTR:
PUSH 07H
PUSH 00H
PUSH 06H
PUSH ACC
MOV R7,#10H ;设置各指针及变
量初值
MOV R0,# DISBUFFER ;先把数据读入显
示缓冲区
MOV R6,#00
ICERRORCON:
MOV A,R6
MOVC A,@A+DPTR ;读取程序区的数据
MOV @R0,A ;放入显示缓冲区
INC R0
INC R6
DJNZ R7,ICERRORCON 
ACALL BrushLcd ;输出显示
POP ACC
POP 06H
POP 00H
POP 07H
RET

;*******************************************************************
;                 子程序
;用启尽量不要单独的调用这此子程序
;***********************************************

;************************************************
;发送数据程序
;名称: Send1621Data
;描述: 向HT1621B发送BYTECNT个数据(从SEG0开始发送)
;           数据在发送缓冲区中,缓冲区指针lcdadr.
;-----------------------------------------------
Send1621Data:
PUSH ACC
PUSH LCDBITCNT
PUSH LCDBYTECNT
PUSH LCDADR
ACALL INTI
MOV LCDBITCNT,#01H ;发送写1621RAM命

MOV A,#80H ;发送1位数据
ACALL SENDB0
MOV A,#40H ;1621RAM地址设置
为00H
ACALL SEND1621BYTE 
MOV R1,LCDADR
SENDNEXT1:
MOV A,@R1 ;读取数据
ACALL SEND1621BYTE ;发送数据
INC R1
DJNZ LCDBYTECNT,SENDNEXT1
SETB WRITE
SETB CS
SETB SDATA
POP LCDADR
POP LCDBYTECNT
POP LCDBITCNT
POP ACC
RET

;************************************************
;1621初始化子程序
;即起动1621
;-----------------------------------------------
INTI:
CLR CS
SETB WRITE
NOP
CLR WRITE
NOP
RET


;******************************************************************
;发送字节数据子程序
;名称: Send1621Byte
;描述: 向HT1621B发送一个字节数据,数据在A中
;-----------------------------------------------
Send1621Byte:
PUSH LCDBITCNT
MOV lcdbitcnt,#08h ;发送8位数据位
ACALL SENDB0 ;调用发送数据位
子程序
POP LCDBITCNT
RET

;******************************************************************
;发送位数据子程序
;名称: sendb0
;描述: 向HT1621B发送N位数据,数据在A中,N在LCDBITCNT中,从高位开始发送
;-----------------------------------------------
SENDB0:
PUSH ACC
PUSH PSW
PUSH LCDBITCNT
SENDB01:
RLC A
MOV SDATA,C ;先发送高位数据
SETB WRITE ;产生WR信号
NOP
NOP
CLR WRITE
NOP
NOP
DJNZ LCDBITCNT,SENDB01 ;未发送完,继续
POP LCDBITCNT
POP PSW
POP ACC
RET

;========================================================
;表格区
;ZY886A型LCD数字显示表(0-F),供用户转换使用。(以上程序不用此表)
LCDData:
DB  0EBH,60H,0C7H,0E5H,6CH,0ADH,0AFH,0E0H,0EFH,0EDH,0EEH,2FH,07H,67H,8FH,8EH
;===============================================================
;
;以上程序是HT1621的通用程序,对不同的LCD只是其字模不一样而以。


推荐阅读

史海拾趣

Belkin公司的发展小趣事

在发展过程中,贝尔金也通过收购其他公司来增强自身实力。例如,2013年贝尔金正式完成对Linksys的收购,这一举措进一步丰富了其产品线,并加强了在网络设备领域的竞争力。此外,贝尔金还通过不断整合内部资源,优化生产流程,提高产品质量和效率。

固得沃克(GOODWORK)公司的发展小趣事

随着业务的不断拓展,固得沃克意识到技术升级和产能扩张的重要性。2019年,公司在江苏盐城成立了江苏固得沃克微电子科技有限公司,作为新的生产基地。该基地拥有2万平米的厂房,引进了具有国际水准的专业生产设备及先进检测仪器,并通过了ISO9001、ISO14001等国际管理体系认证。这一举措不仅提升了公司的生产能力和产品质量,还进一步巩固了其在半导体行业的地位。

amcc [applied micro circuits corp]公司的发展小趣事

深圳市固得沃克电子有限公司(GOODWORK)的故事始于2004年,当时公司正式成立,专注于半导体分立器件的研发、生产和销售。公司总部设在深圳,并创立了自主品牌“GK”。这一时期的固得沃克,凭借对技术的执着追求和对市场的敏锐洞察,逐步在电子行业站稳脚跟。公司初期虽面临诸多挑战,但凭借团队的坚持和创新精神,逐渐赢得了客户的信赖,为后续的快速发展奠定了坚实基础。

东晶(ECEC)公司的发展小趣事

为了满足市场需求和降低成本,东晶电子不断进行产能扩张和自动化升级。公司引进了国际先进的生产设备和技术,提高了生产效率和产品质量。同时,公司还加大了对自动化设备的投入,减少了人力成本,提高了生产效率。这些措施不仅提升了公司的竞争力,也为公司的长远发展奠定了基础。

Analog Power公司的发展小趣事

为了进一步扩大市场份额,Analog Power公司积极寻求与行业内外的合作伙伴建立战略合作关系。他们与多家知名企业建立了紧密的合作关系,共同开发新产品、开拓市场。通过合作,Analog Power不仅获得了更多的市场资源和技术支持,也提升了自身的品牌影响力和竞争力。

DLG Hanbit公司的发展小趣事

随着环保意识的提高,DLG Hanbit公司开始注重环保和可持续发展。公司引进了一系列环保设备和技术,减少了生产过程中的污染物排放。同时,公司还积极推广绿色电子产品,帮助客户实现节能减排。这种环保理念不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

问答坊 | AI 解惑

被同一个坑绊倒了两次-俺的100mWZIGBEE节点调试心得

拿到一个新的PAIC,台湾某厂的UP2202,2.4G频段专用,号称增益25db,输出功率能轻而易举的达到20dbm,恰好有个zigbee项目需要增加功率,于是毫不犹豫的上了它,嘿嘿!     按照原理图,俺画了块板子,看起来貌似该ic使用起来很“弱智” ...…

查看全部问答>

楼道人体感应定时器

楼道人体感应定时器 1、产品特征 Ø 红外感应语音报时提示 Ø 根据环境自动控制灯具 Ø 可扩展为声控 Ø 可扩展数码管显示时间 Ø 语音提示时间段6:00~21:00 2、电器参数 Ø 工作电压:AC22 ...…

查看全部问答>

妨碍你成功的性格特点

知足 只要有吃有穿,腹饱体暖,就感到满足。这种人对生活没有一点欲求,怎么会创造富有与成功呢? 自满 自己的总是最好的,甚至认为自己应该成为别人效仿的标准。这种人不屑于与外界来往,他们根本不知道社会进步到什么程度,怎么可能有更 ...…

查看全部问答>

adoce3.1 对数据库的操作

m_pConn->put_Provider(L\"\\\\DiskOnChip\\\\pda\\\\myce.sdf\");         m_pConn->Open(L\"Provider=microsoft.sqlserver.oledb.ce.2.0;Data Source=\\\\DiskOnChip\\\\pda\\\\myce.sdf\",TEXT(\"\"),TEXT(\"\"),adOpenUns ...…

查看全部问答>

VxWorks下实现了RPC Server,我在WINDOWS的PC上怎么访问?

我的设备上跑的是VxWorks,上面实现了一个RPC服务器,文档里面说是遵循SUN 的RPC规范(RFC1057),现在我在Windows平台下需要访问这个RPC服务器,这个要怎么做?…

查看全部问答>

WinCE5.0自动数据库EDB的使用问题

俺手头上有个WinCE Mobile 6.0的EDB例程(Mobile 6.0的SDK在VS2005上编译通过),在Mobile 6.0的模拟器中可以运行; 然后直接复制到自己的2440上(跑WinCE5.0),刚开始使用2440编译出来的wince5.0sdk在VS2005中编译不过,后来定制WINCE平台时 ...…

查看全部问答>

求助:ce下如何使用看门狗

三星2440的芯片,想使用看门狗, 我现在写了一个驱动,看门狗做如下初始化: //Prescaler value=254, the clock division factor=128,Enable bit of the interrupt. int nCounts = 30000; v_pWatchRegs->rWTCON &= ~0xffff; v_pWatchRegs->rWT ...…

查看全部问答>

从根本上解决PLC高速计数器的计数误差

在应用高速计数器时往往会碰到,计数器与输入计数脉冲信号的脉冲电平不匹配、旋转编码器、光栅尺数据输出是TTL电平,而PLC高速计数器却要求接受的是0 - 24v传输脉冲信号、有的编码器为了提高编码器的可靠性,提供A+、A-,B+、B-,Z+、Z- 对称反相计 ...…

查看全部问答>

香水,给我个STM8s-discovery的软件包。

在ST扯淡的网站上找了两个小时没找到。 愤怒!!! 我需要ST-link STVP STVD 再次提出强烈抗议!!!…

查看全部问答>

本人理解的PWM占空比的PID控制【LM3S*B**】

这两天找了这一块的资料,很多写的都很抽象,自己也想了想,觉得是这样的,大家帮忙看一下并指正:通过PID的输出Uk作为匹配值从而改变PWM的占空比;而Uk一般可以通过增量式PID来计算,它和AD采样值和设定值(模拟量转化为数字量)之差有关系;比如 ...…

查看全部问答>