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

本文介绍了如何在MSP430单片机上实现数码管显示,包括硬件资源、数码管显示的段码表、动态扫描原理,以及如何移植printf函数以支持格式化输出。程序通过位选和段选控制8个共阴数码管,使用看门狗中断进行1.9ms的动态扫描。数码管显示函数、插入字符函数和清除函数也一并给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  1. 硬件介绍:

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

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

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

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

  2. 程序实现:

    数码管显示首先要有一个数码管显示的断码表(完成数字和字符到数码管段值的表),程序中采用了《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,                   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值