在能够正常显示的条件下,只要在特定的时间段关闭显示就能达到某一位闪烁的目的。简单示例如下:
- #include <reg51.H>
- unsigned char code table[]={//共阴数码管段码"0~f"
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- unsigned char i;
- unsigned int j,k;
- bit b;
- void main()
- {
- unsigned char x=2;//闪烁位范围0~3
- while(1)
- {
- P2&=0xe3; //清138位码
- P2|=(i<<2); //送138位码
- if(i==x && b==1)
- P0=0x00;//段码关闭显示
- else
- P0=table[i+1];//段码正常显示
- i=++i%4;//数码管动态扫描计数
- k=250;
- while(--k);//延时约1ms
- j++;
- if(j==500)
- {
- j=0;
- b=~b;//约500ms闪烁标志取反
- }
- }
- }
复制代码
|