- 效果图
- 一、BUG说明
- 二、原理图
- 三、代码
- 1.计数函数
- 1.源码
- 总结
效果图 一、BUG说明
函数void display()中Nixie(2,b) 开始,位选2–6出现乱序,按照乱选的逻辑,修改完后,
在普中v5.5开发板实际显示正常 但是代码处逻辑错误,鄙人fish一枚,跪求各路大神帮忙!
COM口与74h138译码器短接 ,这里注意数码管阳极与74hc245连接顺序
void time() //从最内层while循环开始看 即while(k<10)
{
unsigned char a,b,c,i,j,k;
unsigned char t=0;
while(a<3)
{
b=0;
while(b<10)
{ c=0;
while(c<6)
{ i=0;
while(i<10)
{
j=0;
while(j<6) // 循环6次跳出,然后k++,将k重新置0,以此类推,以达到类时钟的目的
{
k=0;
while(k<10) // 循环9次跳出,然后j++
{
display(a,b,c,i,j,k);
k++;
}
j++;
}
i++;
}
c++;
}
b++;
}
a++;
}
}
1.源码
#include总结unsigned char NUM[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40}; void Delay1(unsigned int xms) { unsigned char i,j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } } void Nixie(unsigned char Location,Number) //位选函数 { switch(Location) { case 8:P2_4=1;P2_3=1;P2_2=1;break; case 7:P2_4=1;P2_3=1;P2_2=0;break; case 6:P2_4=1;P2_3=0;P2_2=1;break; case 5:P2_4=1;P2_3=0;P2_2=0;break; case 4:P2_4=0;P2_3=1;P2_2=1;break; case 3:P2_4=0;P2_3=1;P2_2=0;break; case 2:P2_4=0;P2_3=0;P2_2=1;break; case 1:P2_4=0;P2_3=0;P2_2=0;break; } P0=NUM[Number]; //显示数字 段选 Delay1(1); P0=0x00; //消影 } void display(unsigned char a,b,c,i,j,k) //显示函数 { unsigned char x=230; while(x--) { Nixie(1,a); Nixie(2,b); Nixie(3,i); Nixie(4,10); Nixie(5,10); Nixie(6,c); Nixie(7,j); Nixie(8,k); } } void time() { unsigned char a,b,c,i,j,k; unsigned char t=0; while(a<3) //3 { b=0; while(b<10) //10 { c=0; while(c<6) //6 { i=0; while(i<10) //10 { j=0; while(j<6) //6 { k=0; while(k<10) // 10 { display(a,b,c,i,j,k); k++; } j++; } i++; } c++; } b++; } a++; } } void main() { unsigned char t=0; for(t=0;t<10;t++) //循环9次,完成24小时计数一次后,使用静态数码管记录一次,最高九次 { P1=~(NUM[t]); time(); t++; } }
本人目前fish一枚,不过正在学习中,整体代码逻辑很简单,水平定位初级。



