写的数码管滚动显示1-9,但是显示过程中这个5和6总是出现两次,
调试发现是数组下标在改变过程中出现运算错误,但是实在想不通这是为什么
单片机源代码和仿真图在压缩包里,请高手指点指点,多谢了.
- #include <reg51.h>
- #include "delay.h"
- #include "display.h"
- void main()
- {
- uint i;
- uchar num = 0;
-
- while(1){
- for( num = 0; num <11; num++){
- dBuf[0] = dBuf[num+0];
- dBuf[1] = dBuf[num+1];
- dBuf[2] = dBuf[num+2];
- dBuf[3] = dBuf[num+3];
- Delay(1);
- for( i = 0; i < 2000; i++){
- display();
- }
-
- }
- }
- }
复制代码- #include <reg51.h>
- #include "delay.h"
- #include "display.h"
- unsigned char code table[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x40,0x00 };
- unsigned char dBuf[] = { 1,2,3,4,5,6,7,8,9,10,1,2,3,4 }; //显示数据缓冲区
- unsigned char code wCode[] = { 0xfe, 0xfd, 0xfb, 0xf7 }; //位选信号
- unsigned char num ;
- void display(){
-
- uchar i; //不要符初值,keil会自动初始化为0,且只做一次初始化
- //static uchar i = 0;
- //4 消隐
- DPORT = 0;
- //1 送段码
- DPORT = table[dBuf[i]];
- //2 送位选
- WPORT = wCode[i];
- //3 延时 (所有数码管一轮的时间合不要大于10ms
- Delay(1);
- DPORT = 0;
- i++;
- if( 4 == i ){
- i = 0;
- }
-
- }
复制代码 |