函数: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口就能搞定,只是编程序的时候复杂点而已。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)