1、单击此处编辑母版标题样式,.,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单片机程序设计实践教程,第九讲 七段数码管和44键盘控制,1,.,9.0 项目演示效果,图XP_9_01 步骤1-打开电源后直接写显存功能启动,2,.,图XP_9_02 步骤2-测试下载数据功能启动,3,.,图XP_9_03 步骤3-测试不同扫描位数功能启动,4,.,图XP_9_04 步骤4-测试键盘功能,5,.,9.1 项目目标设计,掌握,ZLG7290,键盘与显示控制芯片的控制和使用方法;,结合硬件原理图理解例程中各个函数的使用方法;,初步掌握,I,2,C,总线的原理和软件实现方法;,初步了解外部
2、中断,1,的使用方法;,在达到以上四点目标之后,根据本章“项目扩展任务”中提出的问题,以组或个人为单位,在规定时间里完成项目任务。,6,.,9.2 项目任务,图9-1 ZLG7290键盘与显示控制实验的电路原理图,7,.,本项目的任务是在开发板上完成ZLG7290芯片各个功能的演示,该芯片的功能包括测试直接写显存、下载数据、不同扫描位数、闪烁功能、段寻址功能及键盘功能。图9-1所示为基于ZLG7290键盘与显示控制芯片的电路原理图,这部分电路的设计 参照了教材中的参考文献【13】、【14】和【15】,例程的设计基本上源自参考文献【16】,只是为了适用于PMY单片机开发板,对一些端口进行了重新定
3、义。,由于后续项目中的按键和七段LED显示控制都是以本次项目为基础的,因此希望读者提前阅读上文提及的4个参考文献,理解文献【16】中各个函数的使用方法,为顺利完成后续项目做好前期准备。,8,.,9.3 系统板上硬件连线,ZLG7290键盘与显示控制系统板硬件连线图如图9-2所示。,图9-2 ZLG7290键盘与显示控制系统板硬件连线图,9,.,9.4 程序流程图,ZLG7290键盘与显示控制C语言程序流程图如图9-3所示。,图9-3 ZLG7290键盘与显示控制C语言程序流程图,10,.,9.5 C语言源程序(略),9.6,系统构成和程序分析,9.6.1,ZLG7290接口键盘及LED驱动管理
4、芯片 简介,PMY单片机开发板的8位七段LED数码管显示和44键盘的控制由ZLG7290芯片完成,ZLG7290是一种I,2,C接口键盘及LED驱动管理器件,提供数据译码和循环、移位、段寻址等控制。它可采样64个按键或传感器,单片即可完成LED显示、键盘接口的全部功能。ZLG7290的从地址为70H,器件内部通过IIC总线访问的寄存器地址范围为00H17H,任一寄存器都可按字节直接读写,并支持自动增址功能和地址翻转功能。因此,具有功能强、使用方便、厂家技术支持完善及与微处理器之间的连接线少(只有3根)等优点,适合在工业测控中进行应用。,11,.,9.6.2 对ZLG7290头文件的修改,对于P
5、MY单片机开发板,在其上引入参考文献【16】中介绍的软件包时,只需对端口的定义进行重新的设置即可正常使用。参照图9-1,具体修改的地方是软件包中的I2C.h文件对模拟I,2,C总线的引脚定义,只要将原来的定义:,sbit I2C_SCL=P16;,sbit I2C_SDA=P17;,改为,sbit I2C_SCL=P11;,sbit I2C_SDA=P10;,就可在PMY单片机开发板正常运行ZLG7290Demo项目文件,为了在使用中不与参考文献【16】介绍的软件包相混淆,CHP09_ZLG7290Demo即为随书光盘中修改后的项目名,请读者在使用时注意区别对待。,12,.,以测试直接写显存T
6、est_DispBuf()函数为例,概略介绍一下源程序中的函数分析方法,更多的解释请参阅本章提及的参考文献。,ZLG7290Demo.c文件中,函数Test_DispBuf()的定义中包括code char DispDat26数组的定义,该数组定义了向ZLG7290显示缓存寄存器写入字符的显示译码,下面举例来说明如何确定这些译码。,以字符0的显示译码为例,如图9-4所示,字符0的段码g和dp不显示,因此为0;其余段码显示为1,编码按照a至g,dp由高到低的顺序进行排列(与ZLG7290内部架构有关),因此译码为0 xFC,其余的字符译码方法依此类推。,在Test_DispBuf()函数中进行显
7、示的函数是ZLG7290_WriteReg(reg,dat),其中reg为要显示字符在ZLG7290内部寄存器的地址,dat为要显示字符的译码。,13,.,图9-4 字符0的七段LED数码管显示译码过程,14,.,9.6.3ZLG7290软件包的函数使用说明,在本书后面的章节里,只要涉及到8位七段LED数码管显示和44键盘的项目,都会通过ZLG7290来进行控制,因此项目中的C源程序中必须包含以下两个头文件:,#include I2C.h,#include ZLG7290.h,第一个头文件是标准8051单片机模拟I,2,C总线的主机程序头文件,reg52.h已包含在其中,主要包括以下对I,2,
8、C总线的控制函数:,15,.,void I2C_Init();,/I,2,C总线初始化,使总线处于空闲状态,void I2C_Start();,/产生I,2,C总线的起始状态,void I2C_Write(char dat);,/向I,2,C总线写1个字节的数据,char I2C_Read();,/从从机读取1个字节的数据,bit I2C_GetAck();,/读取从机应答位,void I2C_PutAck(bit ack);,/主机产生应答位或非应答位,void I2C_Stop();,/产生IIC总线的停止状态,bit I2C_Puts,(unsigned char SlaveAddr,u
9、nsigned int SubAddr,unsigned char SubMod,char*dat,unsigned int Size);,/I,2,C总线综合发送函数,向从机发送多个字节的数据,bit I2C_Gets,(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char*dat,unsigned int Size);,/I,2,C总线综合接收函数,从从机接收多个字节的数据,16,.,本章提及的参考文献中有对I,2,C通信协议的详细讲解,对照I2C.h和I2C.c文件,就能够帮助读者理解以上列出的各个函
10、数的含义。后面关于数字钟的项目中,有详细的关于I,2,C总线知识的介绍,读者也可参阅该部分的内容以加深对I,2,C总线知识的理解。,第二个头文件ZLG7290.h是数码管显示与键盘管理芯片ZLG7290的标准8051驱动程序头文件,这是读者应重点掌握的内容,如果不能理解其中的含义,最少应学会使用这些函数,随着对后续项目的不断深入实践,单片机理论和实践知识也会不断积累和丰富,反过来再分析这些函数就会更容易理解了。第二个头文件包括以下函数。,17,.,bit ZLG7290_WriteReg(unsigned char RegAddr,char dat);,/功能:向ZLG7290的某个内部寄存器
11、写入数据;,/参数:RegAddr为ZLG7290内部寄存器的地址;dat为要写入的数据,bit ZLG7290_ReadReg(unsigned char RegAddr,char*dat),/功能:从ZLG7290的某个内部寄存器读出数据,/参数:RegAddr为ZLG7290的内部寄存器地址;*dat为保存读出的数据,bit ZLG7290_cmd(char cmd0,char cmd1),/功能:向ZLG7290发送控制命令,/参数:cmd0为写入CmdBuf0寄存器的命令字(第1字节);cmd1为写入CmdBuf1寄存器的命令字(第2字节),18,.,bit ZLG7290_SegO
12、nOff(char seg,bit b),/功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段,/参数:seg取值063,表示数码管(或LED)的段号;对于b,0表示熄灭,1表示点亮,bit ZLG7290_Download(char addr,bit dp,bit flash,char dat),/功能:下载数据并译码,/参数:addr取值07,显示缓存DpRam0DpRam7的编号;dp表示是否点亮该位的小数点,0熄灭,1点亮;flash表示控制该位是否闪烁,0不闪烁,1闪烁;dat取值031,表示要显示的数据,19,.,另外两个有用的函数在ZLG7290Demo.c中,分别是:,v
13、oid DispValue(char x,unsigned char dat),功能:显示100以内的数值,参数:x表示显示位置,取值06;dat表示要显示的数据,取值099,void DispHexValue(char x,unsigned char dat),功能:以十六进制数显示数值,参数:x表示显示位置,取值06;dat表示要显示的数据,取值0255,20,.,ZLG7290Demo.c文件中的void Test_Key()和void Delay(unsigned int t)函数中分别使用外部中断1和定时器T0进行中断控制,关于这部分内容将在后续的项目中加以介绍,读者可以忽略这部分的
14、内容,重点掌握上面提及的7个函数的使用方法,这7个函数重新列写如下:,bit ZLG7290_WriteReg(unsigned char RegAddr,char dat),bit ZLG7290_ReadReg(unsigned char RegAddr,char*dat),bit ZLG7290_cmd(char cmd0,char cmd1),bit ZLG7290_SegOnOff(char seg,bit b),bit ZLG7290_Download(char addr,bit dp,bit flash,char dat),void DispValue(char x,unsigned char dat),void DispHexValue(char x,unsigned char dat),21,.,9.7 项目扩展任务,理解基于ZLG7290的七段数码管和44键盘控制项目的软硬件原理,以组或个人为单位,设计以下程序:,在8个LED数码管上同时显示“HELLOC51”,相隔1s,同时显示“StC89C52”,相隔1s显示“HELLOC51”,的次序点亮七段LED数码管。,22,.,THE END,23,.,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818