?? 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 + -