⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lednumber.c

📁 51实战工程级源码
💻 C
字号:
/*
*************************************************************************************************************
*                                                Kingst-51
*                                        Development board samples
*
*                                 (c) Copyright 2009-2012, Kingst Studio
*                                           All Rights Reserved
*
*                                          http://www.kingst.org
* 文件名:LedNumber.c
* 描  述:LED数码管显示模块
* 版本号:1.0.0
*************************************************************************************************************
*/

#define _LED_NUMBER_C
#include "config.h"
#include "LedNumber.h"


/*
********************************************************************************
* ----------------------- Local defines  ---------------------------------------
********************************************************************************
*/
const uint8 code LedChar[] = { //数码管显示的字符转化表
    LED_CHAR_0, LED_CHAR_1, LED_CHAR_2, LED_CHAR_3, LED_CHAR_4, 
    LED_CHAR_5, LED_CHAR_6, LED_CHAR_7, LED_CHAR_8, LED_CHAR_9, 
    LED_CHAR_A, LED_CHAR_b, LED_CHAR_C, LED_CHAR_d, LED_CHAR_E, LED_CHAR_F, 
};


/*
********************************************************************************
* ----------------------- Local variables  -------------------------------------
********************************************************************************
*/
static uint8 ledBuff[6];  //数码管显示缓冲区


/*
***************************************************************************************************
* ---------------------------------- Source codes  ------------------------------------------------
***************************************************************************************************
*/


/*
* 函数名:LedNumberInit
* 描  述:LED数码管显示模块初始化
*/
void LedNumberInit(void)
{
	uint8 i;
	
    DBUS = 0xFF;
    ADDR0 = 0;
    ADDR1 = 0;
    ADDR2 = 0;
    ADDR3 = 1;
    ENLED = 0;
	
	for (i=0; i<6; i++) {
		ledBuff[i] = 0xFF;
	}
}

/*
* 函数名:LedNumberScan
* 描  述:LED数码管的动态扫描显示函数,可在定时中断中调用
* 备  注:本函数需在定时中断中调用,其定时时间和数码管数量共同决定一次显示扫描的总时间;
*         如调用本函数的中断函数用using指定了寄存器组,则本函数也需用using指定相同的寄存器组。
*/
void LedNumberScan(void)
{
    static uint8 cyc = 0xFF;

    cyc++;
    if (cyc >= 6) {
        cyc = 0;
    }
    DBUS  = 0xFF;
    ADDR0 = (bit)(cyc & 0x1);
    ADDR1 = (bit)((cyc>>1) & 0x1);
    ADDR2 = (bit)((cyc>>2) & 0x1);
    DBUS  = ledBuff[cyc];
}

/*
* 函数名:LedNumberShow
* 描  述:LED数码管显示数字的函数
* 输  入:dat - 需显示的32位整形数
*         dot - 小数点位置
* 输  出:无
*/
void LedNumberShow(uint32 dat, uint8 dot)
{
    uint8 i, j;
    uint8 buf[6];
    
    /* 整形数转换为BCD码 */
    i = 0;
    do {
        buf[i] = dat%10;
        dat /= 10;
        i++;
        if (i >= 6) {
            break;
        }
    } while (dat>0);
    
    /* 显示在数码管上 */
    for (j=0; j<i; j++) {
        ledBuff[j] = LedChar[buf[j]];
    }
    for (; j<6; j++) {
        if (j <= dot) {
            ledBuff[j] = LedChar[0];
        }
        else {
            ledBuff[j] = 0xFF;
        }
    }
    ledBuff[dot] &= (~LED_SEG_dp);  //点亮小数点
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -