- 打卡等级:以坛为家II
- 打卡总天数:450
- 最近打卡:2025-05-09 09:31:28
金牌会员
- 积分
- 1674
|
发表于 2024-1-27 17:42:58
|
显示全部楼层
#include <STC32G.H>
// '段码'数组,以P2.7~P2.0表示A/B/C/D/E/F/G/D/P 8段LED,0~9不带小数点和0~9带小数点字符,
unsigned char segCode[21] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,0xFF,0xF7,0x02,};
// '位码‘数组,以P0.7~P2.0表示第1位~第8位数码管,这里使用共阴极3461AS数码管,位码低电平有效,段码高电平有效。
unsigned char digCode[4] = {0x7F,0xBF,0xDF,0xEF,};
unsigned char displayDigital[4] = {2,0,0,5,}; // 数码管显示的4位字符数组
unsigned char numDigital = 0 ; // 控制数码管位数移动变量
unsigned int countTime = 10 ; // 时间计数变量
void Delay1ms() //@11.0592MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 2763UL;
while (i) i--;
}
void Delay2270us() //@11.0592MHz 约2270us,这个延时刚好间隔1s更新计时显示
{
unsigned long edata i;
_nop_();
_nop_();
i = 6279UL;
while (i) i--;
}
void main()
{
P0M1= 0x00; P0M0 = 0x00;
P1M1= 0x00; P1M0 = 0x00;
P2M1= 0x00; P2M0 = 0x00;
while(1)
{
displayDigital[0] = (countTime/10000%10);
displayDigital[1] = (countTime/1000%10) ;
displayDigital[2] = (countTime/100)%10 ;
displayDigital[3] = (countTime/10)%10 ;
while(numDigital <4)
{
P0 = digCode[numDigital] ;
P2 = segCode[ displayDigital[numDigital] ] ;
Delay1ms();
numDigital++;
}
if(numDigital >3)
{
numDigital = 0;
}
Delay2270us();
countTime++;
if(countTime == 9999) countTime = 0;
}
}
|
|