一直以来就被单片机数码管消影问题困扰,网上查了资料都说是加个P0=00(共阴数码管),加了后没啥变化,还是会有重影,今天突发奇想,P0=0x00后加了dula=1;dula=0;这两句,问题解决了,我想应该是dula=1;dula=0;这两句加了后地址锁存器才会执行,单单加句P0=0x00是没用的。 (附数码管部分代,经常写的人应该看得懂,另附两种效果图)
消影之前的效果:
消影后:
单片机源程序如下:
- uchar code table1[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x00};
- uchar code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
- void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)//显示6位数码管{
- P0=table2[0];
- wela=1;
- wela=0;
- P0=table1[a];
- dula=1;
- dula=0;
- delay(1);
- P0=0x00;dula=1;dula=0;//消影
- P0=table2[1];
- wela=1;
- wela=0;
- P0=table1[b];
- dula=1;
- dula=0;
- delay(1);
- P0=0x00;dula=1;dula=0;//消影
- P0=table2[2];
- wela=1;
- wela=0;
- P0=table1[c];
- dula=1;
- dula=0;
- delay(1);
- P0=0x00;dula=1;dula=0;//消影
- P0=table2[3];
- wela=1;
- wela=0;
- P0=table1[d];
- dula=1;
- dula=0;
- delay(1);
- P0=0x00;dula=1;dula=0;//消影
- P0=table2[4];
- wela=1;
- wela=0;
- P0=table1[e];
- dula=1;
- dula=0;
- delay(1);
- P0=0x00;dula=1;dula=0;//消影
- P0=table2[5];
- wela=1;
- wela=0;
- P0=table1[f];
- dula=1;
- dula=0;
- delay(1);
- P0=0x00;dula=1;dula=0;//消影
- }
复制代码 |