历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2018年01月29日 | 在EM78Pxx上模拟8(COM)*8(SEG)LCD驱动

2018-01-29 来源:eefocus

;/*=============================================================================
;             在EM78Pxx上模拟8(COM)*8(SEG)LCD驱动                              |

;                                                                              |
;                                                                              |
;一. LCD扫描原理:                                                              |
;正向扫描: COM on=VCC,COM off=1/2VCC,对应SEG=1则输出VSS,为0 则输出VCC.         |
;反向扫描: COM on=VSS,COM off=1/2VCC,对应SEG=1则输出VCC,为0 则输出VSS.         |
;                                                                              |
;二. 电路接法:                                                                 |
;    所有COM口线都接一个上拉电阻和一个下拉电阻,阻值相同.                       |
;    当口线设为输入时,端口电压为1/2VCC.                                        |
;    COM I/O口设定高阻输入&正常输出.                                           |
;                                                                              |
;三. 使用方法:                                                                 |
;    由程序定时调用.                                                           |
;                                                                              |
;DATE:2005-02-24 ok                                                            |
;=============================================================================*/


#define LCD_sCAN_bearing  LCD_scan_status.0     ;//扫描方向
#define common_amount 4     ;//common PIN  定义COM口的数量  max=8

;//LCD显示代码寄存器
COM_port == 5    ;//PORT5=COM0--COM7
SEG_port == 6    ;//PORT6=SEG0--SEG7

seg0 == 0x10                 ;//静态变量
seg1 == 0x11
seg2 == 0x12
seg3 == 0x13
seg4 == 0x14
seg5 == 0x15
seg6 == 0x16
seg7 == 0x17
LCD_scan_status  == 0x18
LCD_scan_counter == 0x19


LCD_scan_temp    == 0x1a     ;//动态变量
seg_TEMP         == 0x1b
com_temp         == 0x1c

 


            !seg_port=0        ;//seg_port为outport

LCD_drive()
            SEG_temp=0xff
            com_temp=0xff
            LCD_scan_temp=LCD_scan_counter
            _if LCD_scan_temp!=0
            goto ld1
            jbc seg0,0           ;//COM0
            bc  SEG_temp,0
            jbc seg1,0
            bc  SEG_temp,1
            jbc seg2,0
            bc  SEG_temp,2
            jbc seg3,0
            bc  SEG_temp,3
            jbc seg4,0
            bc  SEG_temp,4
            jbc seg5,0
            bc  SEG_temp,5
            jbc seg6,0
            bc  SEG_temp,6
            jbc seg7,0
            bc  SEG_temp,7
            bc  com_temp,0
ld1:
            _if --LCD_scan_temp!=0
            goto ld2
            jbc seg0,1            ;//COM1
            bc  SEG_temp,0
            jbc seg1,1
            bc  SEG_temp,1
            jbc seg2,1
            bc  SEG_temp,2
            jbc seg3,1
            bc  SEG_temp,3
            jbc seg4,1
            bc  SEG_temp,4
            jbc seg5,1
            bc  SEG_temp,5
            jbc seg6,1
            bc  SEG_temp,6
            jbc seg7,1
            bc  SEG_temp,7
            bc  com_temp,1
ld2:
            _if --LCD_scan_temp!=0
            goto ld3
            jbc seg0,2               ;//COM2
            bc  SEG_temp,0
            jbc seg1,2
            bc  SEG_temp,1
            jbc seg2,2
            bc  SEG_temp,2
            jbc seg3,2
            bc  SEG_temp,3
            jbc seg4,2
            bc  SEG_temp,4
            jbc seg5,2
            bc  SEG_temp,5
            jbc seg6,2
            bc  SEG_temp,6
            jbc seg7,2
            bc  SEG_temp,7
            bc  com_temp,2
ld3:
            _if --LCD_scan_temp!=0
            goto ld4
            jbc seg0,3                  ;//COM3
            bc  SEG_temp,0
            jbc seg1,3
            bc  SEG_temp,1
            jbc seg2,3
            bc  SEG_temp,2
            jbc seg3,3
            bc  SEG_temp,3
            jbc seg4,3
            bc  SEG_temp,4
            jbc seg5,3
            bc  SEG_temp,5
            jbc seg6,3
            bc  SEG_temp,6
            jbc seg7,3
            bc  SEG_temp,7
            bc  com_temp,3
ld4:
            _if --LCD_scan_temp!=0
            goto ld5
            jbc seg0,4                  ;//COM4
            bc  SEG_temp,0
            jbc seg1,4
            bc  SEG_temp,1
            jbc seg2,4
            bc  SEG_temp,2
            jbc seg3,4
            bc  SEG_temp,3
            jbc seg4,4
            bc  SEG_temp,4
            jbc seg5,4
            bc  SEG_temp,5
            jbc seg6,4
            bc  SEG_temp,6
            jbc seg7,4
            bc  SEG_temp,7
            bc  com_temp,4
ld5:
            _if --LCD_scan_temp!=0
            goto ld6
            jbc seg0,5                     ;//COM5
            bc  SEG_temp,0
            jbc seg1,5
            bc  SEG_temp,1
            jbc seg2,5
            bc  SEG_temp,2
            jbc seg3,5
            bc  SEG_temp,3
            jbc seg4,5
            bc  SEG_temp,4
            jbc seg5,5
            bc  SEG_temp,5
            jbc seg6,5
            bc  SEG_temp,6
            jbc seg7,5
            bc  SEG_temp,7
            bc  com_temp,5
ld6:
            _if --LCD_scan_temp!=0
            goto ld7
            jbc seg0,6                          ;//COM6
            bc  SEG_temp,0
            jbc seg1,6
            bc  SEG_temp,1
            jbc seg2,6
            bc  SEG_temp,2
            jbc seg3,6
            bc  SEG_temp,3
            jbc seg4,6
            bc  SEG_temp,4
            jbc seg5,6
            bc  SEG_temp,5
            jbc seg6,6
            bc  SEG_temp,6
            jbc seg7,6
            bc  SEG_temp,7
            bc  com_temp,6
ld7:
            _if --LCD_scan_temp!=0
            goto ld8
            jbc seg0,7                          ;//COM7
            bc  SEG_temp,0
            jbc seg1,7
            bc  SEG_temp,1
            jbc seg2,7
            bc  SEG_temp,2
            jbc seg3,7
            bc  SEG_temp,3
            jbc seg4,7
            bc  SEG_temp,4
            jbc seg5,7
            bc  SEG_temp,5
            jbc seg6,7
            bc  SEG_temp,6
            jbc seg7,7
            bc  SEG_temp,7
            bc  com_temp,7
ld8:
            !com_port=com_temp
            if LCD_scan_bearing==0
               com  SEG_temp           ;//反向扫描COM=0 SEG=1
            else
               com  com_temp           ;//正向扫描COM=1 SEG=0
            endif
            seg_port=SEG_temp          ;//write seg
            com_port=com_temp          ;//write com

            if ++LCD_scan_counter>=common_amount   ;//检查同一方向扫描是否完成
               LCD_scan_counter=0
               if LCD_scan_bearing==0       ;//已经完成则改变扫描方向
                  LCD_scan_bearing=1
               else
                  LCD_scan_bearing=0
               endif
            endif
            return


推荐阅读

史海拾趣

Connection One公司的发展小趣事

在电子行业的初期,Connection One公司凭借其创始人对半导体技术的深刻理解,成功研发出一款具有划时代意义的芯片。这款芯片不仅性能卓越,而且功耗极低,立即在市场上引起了轰动。公司因此迅速积累了第一笔资金,为后续的研发和扩展打下了坚实基础。

DIOTEC公司的发展小趣事

为了进一步完善全球产业布局,DIOTEC于2007年在印度普纳建立了新的生产基地。这座工厂紧邻印度的“门户城市”孟买,为DIOTEC在印度市场的拓展提供了有力支持。印度工厂的投产,不仅加强了DIOTEC在全球市场的竞争力,也进一步巩固了其在亚洲市场的地位。

AAC [American Accurate Components]公司的发展小趣事

随着业务的不断拓展,AAC公司意识到美国市场的巨大潜力。于是,在1996年,AAC决定在美国设立分公司,专门负责美国市场的销售。与此同时,为了满足不断增长的市场需求,AAC还在深圳设立了美欧电子有限公司,专门批量生产手机用讯响器。这一系列的举措使得AAC的产品线更加丰富,产能也得到了大幅提升。

EnerSys公司的发展小趣事

为了进一步拓展市场并加强合作伙伴关系,EnerSys积极寻求与行业领先企业的合作。例如,EnerSys与Verkor携手打造美国锂电超级工厂,这一合作项目将有助于提高EnerSys在美国市场的竞争力,并加速全球清洁能源的转型。通过与合作伙伴的紧密合作,EnerSys在电子行业中的影响力逐渐增强。

Bellin公司的发展小趣事

进入21世纪后,EnerSys加快了其收购与整合的步伐。2000年底,EnerSys收购了Yuasa Corporation(Japan)在北美和南美的储能和动力电池业务。随后,公司又陆续收购了Energy Storage Group of Invensys plc.和FIAMM, S.p.A.的动力电池业务。这些收购不仅扩大了EnerSys的市场份额,还增强了其在专业镍基电池、锂电池、铅酸电池和工业电池领域的技术实力。

Advantech公司的发展小趣事

EnerSys一直致力于技术创新和研发投入。公司拥有一支专业的研发团队,不断推出具有竞争力的新产品和解决方案。例如,EnerSys在锂电池领域取得了重要突破,成功开发出高能量密度、长寿命的锂电池产品。这些创新产品不仅满足了客户的多样化需求,还推动了公司在电子行业中的持续发展。

问答坊 | AI 解惑

单片机

大家共享下…

查看全部问答>

求助:什么是硬件延时

软件延时貌似就是执行空指令 那硬件延时又是整样的啊? 能给个8051的硬件延时图吗? 还有如果用硬件延时延时的话 #include #define uint unsigned int #define uchar unsigned char void dlms(void) { uint j; uint i; for( ...…

查看全部问答>

Easy51 单片机开发板,嵌入式入门的最佳选择。

    Easy51单片机开发板支持Atmel AT89S51/52/53、STC89C51/52/53等多种标准51单片机,是集学习、实验、开发于一体的初学者快速入门套件,是嵌入式入门的最佳选择。     Easy51单片机开发板提供了键盘、数码管、蜂鸣器、液晶 ...…

查看全部问答>

请问幻灯片是怎么产生与传输的?

请问 幻灯片是怎么产生与传输的? 给点交流意见。 给点资料?网站地址什么的。 谢了。…

查看全部问答>

中断问题

本帖最后由 dontium 于 2015-1-23 13:27 编辑 我的主程序里面有许多的调用函数,那我有什么办法可以知道是在执行哪个调用函数的时候产生的中断啊? …

查看全部问答>

一片74AHCT14能驱动几片74HCT4094?

为什么CMOS器件数据手册里总是找不到输入电流的参数呢? 里边的Iik电流是干嘛用的?(翻译过来就是输入钳位电流)   [ 本帖最后由 bdhrui 于 2012-4-24 23:06 编辑 ]…

查看全部问答>

TMS320F28335 中TBCLK的值是多少啊?

//  Some useful Period vs Frequency values //  SYSCLKOUT =     150MHz         100 MHz //  ----------------------------------------- //    ...…

查看全部问答>

STM32F407网口的数据传输速度?

有没有哪位大虾测试过STM32F407的网络数据传输速度? 看了ST网站上的资料,没有看到相关的测试。STM32F407的主频不低,CPU的速度应该不是网络数据传输的瓶颈,有没有同学做过测试的,给大家共享下。 …

查看全部问答>

【MSP430 编译器使用经验】+教你如何用IAR入门430

安装IAR后需要破解。至于如何破解相信网上很多资料。可以下载一个注册机。然后就行了,如果你没破解就算程序完全对的编译也不会通过的。 先打开IAR软件。之后。NEW-》workspace          点击project    ...…

查看全部问答>

AM3352通过usb转串口芯片ft232与下位机稳定性通讯问题

大家好,我在做一个项目,用到AM3352通过usb转串口芯片ft232与下位机通讯。板子工作正常。但是长时间运行,9个小时中,发现有如下日志打印。usb会断开然后重连接。以下是日志。有什么建议解决呢。如果短时间跑没有这个问题。要跑久了才有。其间是一 ...…

查看全部问答>