MSP430程序库<九>数码管显示

2019-10-10来源: eefocus关键字:MSP430  程序库  数码管显示

数码管也是单片机系统最常用的输出设备之一(还有液晶、发光二极管等)。七段(这里用的是8段,有小数点)数码管可以完成显示0-9数字和一部分的英文字符如:A、b。本文实现的程序完成显示数字和可显示的英文字符;同时完成数码管显示的printf函数的移植,以支持printf的格式化字符等好用的特点(我用的数码管8个排为一排,方便数字等的显示)。


硬件介绍:

这里所用到的硬件资源包括8个数码管、和msp430单片机的两个8位IO口(这里用的是P3和P5口,如有改变,可以通过宏定义更改)。


数码管是8个共阴的数码管,a-h 8段通过一个200Ω的电阻接到430单片机的P5口。共阴端是由单片机的P3口控制,单片机的一位IO通过一个三极管接到数码管的共阴端,以完成位选。


单片机的P3口时数码管的位选口,某位为高则选中;P5口时段选口;要数码管显示时,通过P3位选,选中某个数码管亮,P5段选选择8段(a-h)中的那些亮,从而控制某一位显示数字或字符。


要同时显示多个数码管,就要动态扫描;动态扫描时,本程序选用的是由看门狗的中断扫描显示:每1.9ms显示其中的一位,动态扫描显示每一位,从而让数码管看起来是同时亮的。


程序实现:

数码管显示首先要有一个数码管显示的断码表(完成数字和字符到数码管段值的表),程序中采用了《MSP430系列单片机系统工程设计与实践》这本书推荐的方式实现的这个数码表:先用宏定义定义每段对应的单片机要输出的段值,然后再实现是个表,当硬件改变时,只需更改前面的每段的段值定义即可,改动的地方少了很多,代码如下:


/*宏定义,数码管a-h各段对应的比特,更换硬件只用改动以下8行*/

#define a       0x01                            //  AAAA

#define b       0x02                            // F    B

#define c       0x04                            // F    B

#define d       0x08                            //  GGGG

#define e       0x10                            // E    C

#define f       0x20                            // E    C

#define g       0x40                            //  DDDD  HH

#define h       0x80        //小数点


/*用宏定义自动生成段码表,很好的写法,值得学习*/

/*更换硬件无需重写段码表*/

const char Tab[] = {

    a + b + c + d + e + f,                  // Displays "0"

    b + c,                                  // Displays "1"

    a + b + d + e + g,                      // Displays "2"

    a + b + c + d + g,                      // Displays "3"

    b + c + f + g,                          // Displays "4"

    a + c + d + f +g,                       // Displays "5"

    a + c + d + e + f + g,                  // Displays "6"

    a + b + c,                              // Displays "7"

    a + b + c + d + e + f + g,              // Displays "8"

    a + b + c + d + f + g,                  // Displays "9"

    a + b + c + e + f + g,                  // Displays "A"

    c + d + e + f + g,                      // Displays "B"  

    a + d + e + f,                          // Displays "C"

    b + c + d + e + g,                      // Displays "D"

    a + d + e + f + g,                      // Displays "E"

    a + e + f + g,                          // Displays "F"

    a + c + d + e + f,                      // Displays "G"

    b + c + e + f + g,                      // Displays "H"  

    e + f,                                  // Displays "I"

    b + c + d + e,                          // Displays "J"

    b + d + e + f + g,                      // Displays "K"

    d + e + f,                              // Displays "L"  

    a + c + e + g,                          // Displays "M" 

    a + b + c + e + f,                      // Displays "N"   

    c + e + g,                              // Displays "n"

    c + d + e + g,                          // Displays "o"

    a + b + c + d + e + f,                  // Displays "O"

    a + b + e + f + g,                      // Displays "P"

    a + b + c + f + g,                      // Displays "Q" 

    e + g,                                  // Displays "r"

    a + c + d + f +g,                       // Displays "S"

    d + e + f + g,                          // Displays "t"

    a + e + f ,                             // Displays "T" 

    b + c + d + e + f,                      // Displays "U"

    c + d + e,                              // Displays "v" 

    b + d + f + g,                          // Displays "W"

    b + c + d + f + g,                      // Displays "Y" 

    a + b + d + e + g,                      // Displays "Z"

    g,                                      // Displays "-"

    h,                                      // Displays "."  

    0                                       // Displays " "

}; 

#undef a

#undef b

#undef c

#undef d

#undef e

#undef f

#undef g 

0-9的位置对应显示0-9,之后的是A开始往后显示,为了方便访问这个表格,定义了AA等一系列的常量,方便访问这个表。


#define AA  10

#define BB  AA+1

#define CC  BB+1

#define DD  CC+1

#define EE  DD+1

#define FF  EE+1

#define GG  FF+1

#define HH  GG+1

#define II  HH+1

#define JJ  II+1

#define KK  JJ+1

#define LL  KK+1

#define mm  LL+1

#define NN  mm+1

#define nn  NN+1

#define oo  nn+1

#define OO  oo+1

#define PP  OO+1

#define QQ  PP+1

#define rr  QQ+1

#define SS  rr+1

#define tt  SS+1

#define TT  tt+1

#define UU  TT+1

#define VV  UU+1

#define WW  VV+1

#define YY  WW+1

#define ZZ  YY+1

#define NEG ZZ+1    /*   -  */  //负号

#d

[1] [2] [3]
关键字:MSP430  程序库  数码管显示 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476682.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430程序库<十>ADC12模块
下一篇:MSP430程序库<八>DAC12的使用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430程序库<十一>定时器TA的PWM输出
;          //TA PWM输出程序库头文件void main(){    // Stop watchdog timer to prevent time out reset    WDTCTL = WDTPW + WDTHOLD;    ClkInit();        TAPwmInit('A',1,'P','P');   //将定时器TA初始化成为PWM发生器   
发表于 2019-10-09
MSP430程序库<十一>定时器TA的PWM输出
MSP430程序库<十二>SVS(电源电压监控器)模块
电源电压监控对于单片机来说,也是经常要用的模块。当需要稳定的工业级产品时,经常要对电源电压监控,以保证单片机系统工作于正常环境或范围中。MSP430F16x提供了一个现成的电源电压监控器模块SVS,方便检测电源电压或者是外部电压,可以设置为电压过低时复位 或置标志位。本程序即完成SVS的设置使用的程序库(msp430f14x没有此模块)。硬件介绍:MSP430单片机含有的SVS模块可以很方便的监控电源电压或外部电压。电源电压监控器(SVS)是用于监控AVCC电源电压或外部电压。 SVS的可配置当电源电压或外部电压下降到低于用户选择的电压级别时设置一个标志,或产生POR复位。SVS模块有以下特点:可以监控AVCC电压;可选择产生
发表于 2019-10-09
MSP430程序库<十二>SVS(电源电压监控器)模块
MSP430程序库<十三>硬件乘法器使用
;/***************************************************************************** 名    称:main主程序* 功    能:硬件乘法器程序库使用演示* 入口参数:无* 出口参数:无****************************************************************************/void main( void ){    // Stop watchdog timer to prevent time out reset    WDTCTL = WDTPW + WDTHOLD; 
发表于 2019-10-09
MSP430程序库<十三>硬件乘法器使用
MSP430程序库<十四>DMA程序库
;     case 2: DMA2CTL |= DMAREQ;  break;      //2通道    }}这个和上个函数类似:仅仅设置一个控制位,函数很简单,不再解释啦。程序实现就这么多了,有关详细内容可以下载附件里的程序库,程序的注释很详细。使用示例:使用这个程序时,步骤和原来的相同:工程中加入DMA.c文件,然后源文件中包含DMA.h头文件即可。示例程序主要如下:#include <msp430x16x.h>#include "DMA.h"unsigned int
发表于 2019-10-09
MSP430程序库<十四>DMA程序库
MSP430程序库<十五>Flash控制器
一般,在单片机中的Flash存储器用于存放程序代码,属于只读型存储器。而在MSP430些列的单片机中,都可以通过内置的Flash控制器擦除或改写任何一段的内容。另外,msp430的单片机内部还专门留有一段Flash区域(information memory),用于存放掉电后需要永久保存的数据。利用430内部的Flash控制器,可以完成较大容量的数据记录、用户设置参数在掉电后的保存等功能。硬件介绍:要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。一般430的单片机都统一编址在0-64k地址范围中,只有少数高端
发表于 2019-10-09
MSP430程序库<十五>Flash控制器
MSP430程序库<十>ADC12模块
;   ADC12CTL0 &=~ ENC;                      //停止转换        i=0;    }}该程序实现的是多次A0-A2 32次转换,把结果存入results数组。单次时,仅仅采样一次(A0-A2)可用自己更改处理函数。程序部分就完成了,调用时注意要自己实现处理逻辑或存储逻辑。使用示例: 本程序使用方式还是加入C文件,包含H文件;不过和之前的程序不同的是要自己实现中断处理逻辑。使用示例参见程序库中
发表于 2019-10-09
MSP430程序库<十>ADC12模块
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved