MSP-LAB实训-GPIO高级输出之1.3:四位扫描数码管

[复制链接]

7

主题

16

帖子

121

积分

慕课讲师

积分
121
楼主
查看: 2080回复: 1 发表于 2018-10-23 23:01:38   只看该作者
本帖最后由 junying 于 2018-10-23 23:05 编辑

MSP-LAB实训-GPIO高级输出之1.3:四位扫描数码管


实验要求:
1、使用MSP-LAB实验系统的四位扫描数码管,实现0x0000~0xFFFF的自增一显示程序。


题意分析及设计:
1、根据相关原理图(图1所示)得知,每位七段数码管由ab、。。。gdp等八个管脚组成,四位数码管存在4个公共位选择线。我们系统中采用的是共阴的四位数码管,当我们需要在某位数码管显示时,需要让该位公共位选择线为‘0’,而ab...gdp等对应线按照所需显示的数值的图形,正确输出对应的数值。而为了四位全部显示,则需要根据人眼的视觉暂留现象,以25Hz以上的频率(或者说不长于40ms的一个周期内)轮流显示四位数码管的值。因此本题的设计需要考虑如下几个要素的设计:
    (1) 扫描输出的设计;
    (2) 每位数码管显示的字库设计;

2、字库的设计:
    (1) 因为每位数码管的显示字库相同,因此仅需针对一个数码管进行字库设计;
    (2) 系统采用共阴数码管,即需要显示的字段,输出为1’,否则为‘0’;
    (3) 一个数码管可以显示0~9A~F16个不同图形,因此设计一个字库类型为unsigned char DispLib[16];数组中每个元素的下标为需要显示的值,而元素内容为图形所对应管脚的值。假设我们的硬件连线为字段a对应Px的最低位,字段g对应Px的第7位,dp对应最高位,则字库设计如图2、图3、图4所示。


即最后得到的字库如图5所示。

3、扫描机制设计:
    (1) 为了让显示非常稳定,没有闪烁感,本题设计刷新频率为50Hz,即一个周期为20ms。那么四位数码管,每位显示持续时间为5ms。系统中需要设计一个5msTimer中断,来控制刷新机制;
    (2) 为了统一显示机制,本题设计一个帧缓存,即四位数码管的显示缓存寄存器DispBuf。系统刷新时(中断发生时),只针对DispBuf的内容,正确输出到驱动ab、。。。、gdp的管脚上。而应用程序需要将显示的内容,写入到DispBuf即可。本题中,仅实现一个四位数码管的显示,因此DispBuf设计为unsigned char DispBuf[4];其每个元素代码每位数码管的实际显示输出值。
4、为了依次显示0x0000~0xFFFF,系统中需要设计一个定时累加的机制。为了共用Timer中断,我们在Timer中断**程序做一个全局变量Ticks的累加,当累加到20时,即持续了100ms。在应用程序中设计每100ms,显示值自加一操作。


硬件连接:
1、P1.0~P1.6P1.7分别连接J11AB、。。。、GDP,共八根连线;
2、J8LE管脚与3V3相连;
3、P2.0~P2.3分别与J5E0~E3的数码管位选择线直接连接;
4、上述连接完成后,则P1控制每位数码管的具体显示图形,P2控制数码管位选择线;

程序设计:
1、如图6所示,设置GraceTimerA5ms中断;Grace中再设置好P1P2的对应输出管脚,生成相关代码。


2、如图7所示,在CCS中定义DispLib(字库)、BitDisp(位选择)、BitCntTicks等全局变量,定义帧存DispBuf全局变量以及写帧存的函数WriteDispBuf()


3、如图8所示,在Timer中断**程序中,将帧存DispBuf的内容与位选择BitDisp组合构成扫描输出到P1P2。并在做好Ticks处理。


4、如图9所示,在main主循环中,设计一个val自增一操作,并进行写帧存动作。




实验结果:
1、连线图如图10所示;


2、实验动态效果如视频“例程1.3.mp4”所示。查看:https://weibo.com/1404637705/GFih4sBPV


原文链接:https://weibo.com/1404637705/GFigCqeDg

7

主题

16

帖子

121

积分

慕课讲师

积分
121
沙发
发表于 2018-10-25 09:14:27   只看该作者
课后练习:
1、请将四位十六进制修改为四位十进制数值显示;
2、请用三八译码器U6实现八位数码管显示的控制方式;
快速回复 返回顶部 返回列表