如何用ZLG7290B驱动数码管

如何用ZLG7290B驱动数码管,第1张

/*

函数:Test_DispBuf()

功能:测试直接写显存

*/

void Test_DispBuf()

{

code char DispDat[16] =

{//字母AbCdEFgHiJkLoPqr的字形数据

0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x6E,

0x20,0x70,0x0E,0x1C,0x3A,0xCE,0xE6,0x0A

}

unsigned char n

unsigned char x

unsigned char reg

unsigned char dat

for ( n=0n<16n++ )

{

for ( x=0x<8x++ )

{

reg = ZLG7290_DpRam + x

dat = DispDat[n]

ZLG7290_WriteReg(reg,dat)

}

Delay(50)

}

}

/*

函数:Test_Download()

功能:测试下载数据功能

*/

void Test_Download()

{

unsigned char x

bit dp

bit flash

char dat

//点亮所有数码管

dp = 1

flash = 0

dat = 8

for ( x=0x<8x++ )

{

ZLG7290_Download(x,dp,flash,dat)

}

Delay(100)

//依次显示所有字型

dp = 0

flash = 0

for ( dat=0dat<32dat++ )

{

for ( x=0x<8x++ )

{

ZLG7290_Download(x,dp,flash,dat)

}

Delay(50)

}

}

先试下

不太了解ZLG7290,也没有电路图,分析了一下,修改4处先看看是否可行,有问题再交流。

MOV R7,#99 (修改) 执行到99

MOV A,#45 (修改)

HANDLELOOP:

MOV MTD,A

PUSH ACC

MOV 30H,R7

MOV MTD+1,MRD

MOV SLA,#ZLG7290

MOV SUBA,#07H

MOV NUMBYTE,#02H

LCALL IWRNBYTE

LCALL DELAY

LCALL DELAY此处增加一句,整体延时1S

USING 2

MOV R7,30H

POP ACC

INC A

DJNZ R7,HANDLELOOP

SJMP MAINLOOP

DELAY:

MOV R7,#100 延时由原来的0.6S改为0.5秒

MIN: DJNZ R7,YS500

RET

YS500: LCALL YS500US

LJMP MIN

YS500US:MOV R6,#80H

DJNZ R6,$

RET

DELAY1: MOV R7,#20H

DJNZ R7,$

RET

ZLG7290是I2C通信,你可以一个I2C接口接多个ZLG7290。或者用我下面说的方案(很巧的一种方案,这是MICROCHIP公司推崇的)

你用的是PIC24HJ12GP202,有28引脚的那个单片机么?这个有21个IO引脚,其中有10个可以复用为AD输入引脚,还有两个引脚可配置为I2C接口。

根据你的描述,首先你需要有四个IO引脚做输入,不管是模拟输入还是数字输入,用23、24、25、26这四个引脚做输入应该可以把。然后2、3引脚可以用来做在线编程的数字输入口。

剩下的15个IO引脚,有两个17、18引脚可以做跟ZLG7290的I2C接口,I2C总线允许挂接多个I2C芯片。你可以用N个ZLG7290接LED和数码管(这是方案1)。

或者(这是我提议的方案2)用一个ZLG7290管理数码管。而剩下的13个引脚中用5个IO引脚就能控制了20个LED灯。具体看下面链接中这个文档的第三页的窍门2 。

这文档是PIC的生产商MICROCHIP公司推出的。适用于PIC这种需要控制输入输出的单片机。它的原理是,PIC单片机的某个IO引脚配置为输入的时候,这个IO引脚其实等于高阻输入状态,等于是和VDD和VSS都是断开的;

而当IO引脚配置为输出状态时,输出高电平为1的时候,它等于是短接到了VDD。而输出低电平为0时,它等于是短接到了VSS。

那么,可以看到图的接法,其中三个IO引脚接了六个灯,这六个灯在同一时间点里只有一个灯会亮。比如的当你让GP0作为输入,那么它对于外面的灯来说,就等于是没有电气输出而断开的,而GP1、GP2都作为输出,GP1=1 GP2=0这样GP1在等效电路上等于是短接Vdd,GP2等于是短接了VSS,这样电流从4号灯正端那里流入,负端留回GP2,3号灯因为是反向戒指,所以不会亮。其他如1号、2号灯都因GP0在等效电路上是断开的,所以也不会亮。

这样,根据程序的不同,可以随意让这六个灯点亮。要全亮也可以,在很短时间内轮流让这几个灯循环点亮,那在人眼看来就等于全亮了。

而根据公式   LED灯的数量= IO口数量 * (IO口数量-1)   那么你的20个LED等只需要5个IO口就能搞定,只是编程序的时候复杂点而已。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11334944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存