7.5 数码管显示实验
7.5.1 实验目的
(1)通过实验掌握LED的显示控制方法.
(2)通过实验加深对IIC总线工作原理的掌握.
7.5.2 实验设备
(1)硬件:Embest EduKit-Ⅲ实验平台,ULINK USB-JTAG仿真器套件,PC.
(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP/7.
7.5.3 实验内容
编写程序使实验板上八段数码管循环显示0~9字符.
7.5.4 实验原理
(1)八段数码管.
嵌入式系统中,经常使用八段数码管来显示数字或符号,由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛.
①结构.
八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部分英文字母.见图7-11.
图7-11 八段数码管的结构
②类型.
八段数码管有两种不同的形式:一种是八个发光二极管的阳极都连在一起的,称之为共阳极八段数码管;另一种是八个发光二极管的阴极都连在一起的,称之为共阴极八段数码管.
③工作原理.
以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮.
电平信号按照dp,g,e,…,a的顺序组合形成的数据字称为该字符对应的段码,常用字符的段码表如下:
表7-2 常用字符的段码表
④显示方式.
八段数码管的显示方式有两种,分别是静态显示和动态显示.
静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效.
动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的.
(2)IIC原理.
IIC原理请参考6.5.
(3)电路原理.
Embest EduKit-Ⅲ教学电路中使用的是共阴极八段数码管.数码管的显示由芯片ZLG7290进行控制,它的DIG1~DIG8引脚输出LED显示所需的位驱动信号,而SEGA~SEGG及DP引脚输出LED显示所需的段驱动信号.相关电路见图7-12和图7-13.
图7-12 八段数码管连接电路
(4)软件程序设计.
八段数码管上显示的字符段码储存在数组f_szDigital[]中,通过IIC总线依次将它们写入到ZLG7290芯片的显示缓存寄存器(DpRam0~DpRam7)中,即可完成字符在八段数码管上的显示.
①IIC中断使能设置.
由于LED的段码是通过IIC总线传输的,需要采用中断方式来检测每个字节的传输,所以需要定义中断处理程序入口,使能中断.具体的实现方法如下:
rINTMSK=rINTMSK &(~(BIT_ALLMSK|BIT_IIC));//使能中断
pISR_IIC=(unsigned)iic_int;//将IIC中断处理程序指针指向iic_int
图7-13 八段数码管控制电路
②初始化IIC接口.
初始化IIC接口就是对IIC的相关寄存器进行初始设置.如下所示:
rIICADD=0x10; //S3C2410X从设备地址
rIICCON=0xef; //使能ACK和IIC总线中断,设置IICCLK为//MCLK/512,清除pending位以便响应中断.
rIICSTAT=0x10; //使能发送/接收中断
③iic_write()函数介绍.
函数原型:void iic_write(UINT32TunSlaveAddr,UINT32TunAddr,UINT8TucData)参数说明:unSlaveAddr——输入,IIC从设备地址(ZLG7290地址为0x70H)
unAddr——输入,数据地址(即ZLG7290显示缓冲区地址0x10H~0x17H)
ucData——输入,数据值
函数返回值:NULL
所以,通过函数iic_write(0x70,0x10+i,f_szDigital[k])即可将数组f_szDigital[]中的第k+1个元素为段码的字符显示在第i个八段数码管上.
7.5.5 实验方法与操作步骤
(1)准备实验环境.
使用ULINK USB-JTAG仿真器连接到目标板上.使用Embest EduKit-Ⅲ实验板附带的串口线,连接实验板上的UART0和PC的串口.
(2)串口接收设置.
在PC上运行Windows自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制),或者使用其他串口通信程序.
(3)打开实验例程.
①拷贝实验平台附带光盘CD1\CD1_Basic_070615\Software文件夹到RealView MDK软件的安装目录的Keil\ARM\Boards\Embest\目录下(如果已经拷贝,可跳过此步骤).
②使用μVision IDE for ARM通过ULINK USB-JTAG仿真器连接实验板,打开实验例程目录4.6_8led_test子目录下的8led_test.Uv2例程,编译链接工程成功.
③根据ReadMe目录下的ReadMeCommon.txt及readme.txt文件配置集成开发环境(工程默认已经配置正确),点击工具栏“”,在Option for Target对话框的Linker页中选择RuninRAM.sct分散加载文件,点击MDK的Debug菜单,选择Start/Stop Debug Session项或点击工具栏“”,下载工程生成的.axf文件到目标板的RAM中调试运行.
④如果需要将程序烧写固化到Flash中,仅需要更改分散加载文件即可(须慎用,这一步的操作将会破坏Flash中原有固化程序,建议实验中不操作).在Option for Target对话框的Linker页中选择RuninFlash.sct分散加载文件,重新编译工程,点击MDK的Flash菜单,选择Download烧写调试代码到目标系统的Nor Flash中,重启实验板,实验板将会运行烧写到Nor Flash中的代码.
⑤点击Debug菜单的Go或F5键运行程序.
(4)观察实验结果.
①在PC上观察超级终端程序主窗口,可以看到如下界面:
boot success...
8-segment Digit LED Test Example(Please look at LED)
②实验系统八段数码管循环显示0~9字符.
7.5.6 实验参考程序及流程图
图7-14 数码管显示实验主程序流程图
图7-15 数码管显示iic_write_8led函数流程图
(1)LED测试程序.
(2)IIC总线读写程序.
7.5.7 练习题
编写程序首先从左到右显示1、2、3、4、5、6、7、8,然后全部熄灭,再从右向左显示1、2、3、4、5、6、7、8,之后循环往复.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。