- 打卡等级:以坛为家I
- 打卡总天数:259
- 最近打卡:2025-04-02 20:10:12
金牌会员
- 积分
- 1343
|
发表于 2024-1-5 08:43:17
|
显示全部楼层
第10集 数码管动态显示
1、讲了8位数码管控制原理。写程序时注意要点,数码管刷新8位需要时间不大于20ms,因为人眼的视觉不容易分辨出50HZ以上的动态刷新。
2、在第9集基础上新增调用数组选择位码
数码管从第一位显示1至第8位显示8的动态刷新部分程序
u8 num;u8 num;
u8 SEG_Tab[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码值
u8 COM_Tab[8]={ 0X7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe }; //数码管位码
void main()
{
sys_int();
usb_init();
EA=1;
while(1)
{
if ( DeviceState != DEVSTATE_CONFIGURED )
Continue;
if(bUsboutREADY)
{
usb_out_done();
}
P70=COM_Tab[num];
P6=SEG_Tab[num+1];
delay_ms(1);
num++;
if(num>7)
num=0;
}
}
简易10秒免单计数器
u8 num;u8 num;
u8 SEG_Tab[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码值
u8 COM_Tab[8]={ 0X7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe }; //数码管位码
u8 Show_Tab[8]={ 0,0,0,0,0,0,0,0 };
u32 TimCount=0;//计数单位1ms
bit RUN_State=0;//K
void main()
{
sys_int();
usb_init();
EA=1;
while(1)
{
if ( DeviceState != DEVSTATE_CONFIGURED )
Continue;
if(bUsboutREADY)
{
usb_out_done();
}
Show_Tab[0]=1; //选择1
Show_Tab[1]=10; //选择0.
Show_Tab[2]=0; //选择0
Show_Tab[3]=0;//选择0
P70=COM_Tab[num];
P6=SEG_Tab[Show_Tab[num]];
delay_ms(1);
if( RUN_State ==1 )
{
TimCount++;
Show_Tab[4]=TimCount/10000%10;
Show_Tab[5]=TimCount/1000%10+10;//x显示小数点和千位
Show_Tab[6]=TimCount/100%10;//取百位
Show_Tab[7]=TimCount/10%10;//取十位
}
num++;
if(num>7)
num=0;
if(KEY1==0)
{
delay_ms(10);
if(KEY1==0)
{
BEEP=0;
delay_ms(10);
BEEP=0;
while(kEY1==0)
{
P70=COM_Tab[num];
P6=SEG_Tab[Show_Tab[num]];
delay_ms(1);
num++;
if(num>7)
num=0;
}
if( RUN_State ==0)
TimCount=0;
RUN_State = ! RUN_State;
}
}
}
}
|
|