#include <REGX52.h>
#include <INTRINS.H>
typedef unsigned char u8;
typedef unsigned char u16;
typedef unsigned long u32;
// 數字0-9的編碼
static u8 codes[10] = {
0x3f,
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
}
u8 buffer[8];//這里哪錯了?編譯器一直提示
void Delay1ms(u16 count) //@11.0592MHz
{
u8 i, j;
while (count > 0) {
count--;
_nop_();
i = 2;
j = 199;
do {
while (--j);
} while (--i);
}
}
/**
* @brief 內部方法,讓數碼管某一位顯示特定數字
*
* @param position 片選, 從左到右[0-7]
* @param num_code 顯示想要的數字編碼
*/
void DigitalTube_DisplaySingle(u8 position, u8 num_code)
{
P0 = 0x00;
// 位選:P15 P14 P13
position <<= 2;
P2 &= 0xE3;
P2 |= position;
// 段選:P0
P0 = num_code;
}
/**
* @brief 設置顯存數組
*
* @param num 待展示數字
*/
void DigitalTube_DisplayNum(u32 num)
{
u8 i;
for (i = 0; i < 8; i++) {
buffer[i] = 0x00;
}
if (num == 0) {
buffer[7] = codes[0];
return;
}
i = 7;
while (num > 0) {
buffer[i] = codes[num % 10];
num /= 10;
i--;
}
}
/**
* @brief 動態掃描
*
*/
void DigitalTube_Refresh()
{
u8 i;
for (i = 0; i < 8; i++) {
DigitalTube_DisplaySingle(i, buffer[i]);
Delay1ms(1);
}
}
void main()
{
DigitalTube_DisplayNum(1234567);
while (1) {
DigitalTube_Refresh();
}
}
|