/*数码管刷新用*/
void Timing_count1() interrupt T1_INTNO //引脚P35
{
TH1 =(65535-TH1_NUM)/256;//定时器赋值
TL1 =(65535-TH1_NUM)%256;//
// led_sl(led_keysc[0],led_bf[led_keysc[0]]);//
led_sl(led_keysc[0],~led_bf[led_keysc[0]]); //显示数值 共阴数码管 反取数组内容写入
led_keysc[0]++;
if(led_keysc[0]>=led_num)
{led_keysc[0]=0;}
if(ds_bz==1)
{led_keysc[3]++;}
else
{led_keysc[3]=0;}
}
void led_sl(uchar wn,dn)
{
led_w0=led_wof; //关闭位选1
led_w1=led_wof; //关闭位选2
led_w2=led_wof; //关闭位选3
led_w3=led_wof; //关闭位选4
/*数码管消影处理*/
led_d =led_off; //段码赋值为无效的电平
/*比较结果*/
switch(wn)
{case 0x00:led_w0=led_won;led_d=dn;break; //相同 赋值
case 0x01:led_w1=led_won;led_d=dn;break; //相同 赋值
case 0x02:led_w2=led_won;led_d=dn;break; //相同 赋值
case 0x03:led_w3=led_won;led_d=dn;break; //相同 赋值
default:/*语句*/break; //结果匹配失败执行
}
}
#define led_off 0xff //定义数码管段关闭时的数值
#define led_won 0 //数码管位选有效电平
#define led_wof 1 //数码管位选无效电平
#define led_num 4 //数码管位数
/*引脚定义*/
#define led_d P0 //定义数码管段选GPIO
sbit led_w0=P3^2; //位选1
sbit led_w1=P3^3; //位选2
sbit led_w2=P3^4; //位选3 n
sbit led_w3=P3^5; //位选4
/*段码数组*/
unsigned char code led_dm[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // B
0xC6, // C
0xA1, // D
0x86, // E
0x8E, // F
0xff, //空
0xbf //-
};
动态扫描 留下残影的问题 就是没有在 点亮的时候清屏
比如你在点亮一个数码管的时候 delay 一段时间 比如 255微秒
然后 把数码管全部熄灭。。
就这样 残影就消除了