📄 lednumber.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 + -