zhghtr 发表于 2007-9-23 21:20:10

Atemga16和8279??

请问有人用过Atemga16和8279连接吗??怎么联法?谢谢!

machao 发表于 2007-9-23 23:39:37

为什么用8279,不用7279?

zhghtr 发表于 2007-9-24 15:16:41

不想占用串口!!!

machao 发表于 2007-9-24 16:02:40

还使用3个“!”,说明你比较顽固啦。

不知道你的串口是指哪个串口,M16有3个串行接口。

7279可以使用I/O口模拟,比并口扩展少用I/O。并且M16本身不支持并口扩展。另外到周力功网站找一下,有个类似的7290的51例子,使用I2C接口,改一下就可以了。

外围采用串口扩展是发展趋势,尤其在8位系统中。

下面是我书中的部分介绍:

    在并行接口向串行接口发展的今天,市场上已经推出了采用串行接口的专用的键盘/LED驱动电路,典型的有HD7279、ZLG7290等。这些芯片的功能同8279类似,甚至还要强大,但与控制器的连接只需要2~4根信号线。使用这些新型的可编程键盘显示器接口芯片,具有外围电路简洁,接口速度快,程序效率高,性能稳定,多功能等特点,得到了广泛的应用。

16.4.1 ZLG7290简介
    ZLG7290键盘/LED驱动器是周立功公司针对仪器仪表行业的需要自行研制的一款芯片。该芯片能自动完成8位LED数码管的动态扫描和(最多)64按键检测扫描,大大减轻单片机用于显示/键盘的工作时间和程序负担,可使集中资源用于信号的检测和控制。由于ZLG7290采用I2C总线的接口方式,使得芯片与单片机间的通讯只用2个I/O口便可完成,节省了单片机有限的I/O口资源。ZLG7290的主要特点有:
I2C串行接口,提供键盘中断信号,方便于处理器接口;
可驱动8位共阴数码管或64只独立LED和64个按键;
可控扫描位数,可控任一数码管闪烁;
提供数据译码和循环,移位,段寻址等控制;
8个功能键,可检测任一键的连击次数;
无需外接元件即直接驱LED,可扩展驱动电流和驱动电压;

相比40脚的8279,ZLG7290只有24个引脚,减少了近50%。这主要是由于ZLG7290只使用了2个引脚与控制器连接。图16-16是ZLG7290的典型应用电路。

       图16-16 ZLG7290的典型应用电路

    在图中,U1就是ZLG7290B。为了使电源更加稳定,一般要在Vcc到GND之间接入47~470uF 的电解电容E1。J1是ZLG7290B与微控制器的接口,按照I2C总线协议的要求,信号线SCL和SDA上必须要分别加上拉电阻,其典型值是10KΩ。晶振Y1通常取值4MHz,调节电容C3和C4通常取值在10pF左右。复位信号是低电平有效,一般只需外接简单的RC复位电路,也可以通过直接拉低RST 引脚的方法进行复位。

    数码管必须是使用共阴极的,不能直接使用共阳极的。DPY1和DPY2是4位联体式数码管,共同组成一个完整的8位LED显示。数码管在工作时要消耗较大的电流,R1~R8是限流保护电阻,典型值是270Ω。如果要增大数码管的亮度,可以适当减小电阻值,最低为200Ω。

    64只按键中,前56个按键是普通按键K1~K56,最后8个为功能键F0~F7。键盘电阻R9~R16 的典型值是3.3KΩ。数码管扫描线和键盘扫描线是共用的,所以二极管D1~D8是必须的,有了它们就可以防止按键干扰数码管显示的情况发生。

    在多数的应用当中,可能不需要太多的按键,这时可以按行或按列裁减键盘。裁减后相应行的二极管或相应列的电阻可以省略。如果完全不使用数码管,则原来用到的所有限流电阻R1~R8也都可以省略,这时ZLG7290B消耗的电流大大降低,典型值为1mA。

16.4.2 AVR与ZLG7290的连接
   
    ATmega16与ZLG7290的硬件连接非常简单,将图16-16中的J1上SCL、SDA和~INT分别与ATmega16的PC0、PC1和PB2(外部中断INT2输入)连接即可实现ATmega16与ZLG7290的I2C总线连接。ATmega16为主机,ZLG7290则作为从机。
   
    ZLG7290的I2C接口传输速率可达32Kbit/s,同时还可以提供键盘中断信号~INT,以提高主处理器的效率。

    ZLG7290本身也是采用动态扫描方式驱动LED显示以及采样键盘的,它内部使用了24个寄存器,用于控制显示和记录键值等。访问这些寄存器需要通过I2C总线接口来实现。ZLG7290 的I2C总线器件地址是70H(写操作)和71H(读操作)。访问内部寄存器要通过“子地址”来实现。

    有效的按键动作、普通键的单击和连击、以及功能键状态的变化都会使ZLG7290的系统寄存器SystemReg中的KeyAvi位置1, 同时~INT 引脚信号有效,变为低电平。AVR的键盘处理程序可由~INT引脚低电平下降沿中断触发,以提高程序效率。也可以不使用~INT 引脚信号,节省AVR的一个I/O口,而采用轮询方式,定时访问ZLG7290系统寄存器中的KeyAvi位。
   
    可通过I2C总线访问的ZLG7290内部寄存器地址范围为00H~17H,任一寄存器都可按字节直接读写,也可以通过命令接口间接读写,或按位读写。ZLG7290的I2C接口还支持自动增址功能(访问一寄存器后,寄存器子地址sub address自动加一)和地址翻转功能(访问最后一寄存器子地址17H后,寄存器子地址翻转为00H)。ZLG7290的控制和状态查询,全部都是通过读/写寄存器实现的。用户只需象读写24C256内的单元一样,即可实现对ZLG7290的控制,具体请参考ZLG7290指令详解部分。

    由于篇幅所限,这里就不做进一步的程序设计介绍了,在本书的光盘中提供了ZLG7290全部开发资料和设计参考。只不过参考设计例程是MSC-51代码,需要读者转换成AVR的代码。

oldkey 发表于 2007-9-24 16:08:18

老马的脾气真好!

machao 发表于 2007-9-24 16:32:10

表扬还是批评?没人说我脾气好的,学生都怕我,甚至恨我。

armok 发表于 2007-9-25 00:38:59

zhghtr 发表于 2007-11-13 08:33:44

谢谢马老师!!!

zhghtr 发表于 2007-11-13 08:35:19

7楼的三个“!”表示强烈的谢谢。

feifeimao 发表于 2010-8-19 10:34:30

马老师是说的很对,用72797290是蛮好的可是我手头的设计需要控制9只数码管,5行6列的按键呢所以还是考虑是不是用8279+74138+74154的外扩电路来搭建,恳请大家给出更好的建议。

freefei 发表于 2012-10-11 15:36:45

7290B在使用过程中,用手触碰SCL线,会导致7290B把SCL线拉低,并且没法恢复!
页: [1]
查看完整版本: Atemga16和8279??