51单片机不用定时器的数码管倒计时

简介: 51单片机不用定时器的数码管倒计时

由于还没有学习定时器计数器的内容,又想实现数码管动态变化的程序算法。

51开发板电路原理图如下:

Proteus 仿真如下

开发板实际照片如下:

#include <REGX51.H>
#include <intrins.h>
/*位选*/
void weixvan(unsigned int position){
 
  switch (position){
    case 1:P2_4=0;P2_3=0;P2_2=0;break;
    case 2:P2_4=0;P2_3=0;P2_2=1;break;
    case 3:P2_4=0;P2_3=1;P2_2=0;break;
    case 4:P2_4=0;P2_3=1;P2_2=1;break;
    case 5:P2_4=1;P2_3=0;P2_2=0;break;
    case 6:P2_4=1;P2_3=0;P2_2=1;break;
    case 7:P2_4=1;P2_3=1;P2_2=0;break;
    case 8:P2_4=1;P2_3=1;P2_2=1;break;
  }
}
/*段选*/
void duanxvan(char value){
 
  switch(value){
    case '0': P0=0x3F; break; //数值0
    case '1': P0=0x06; break; //数值1
    case '2': P0=0x5B; break; //数值2
    case '3': P0=0x4F; break; //数值3
    case '4': P0=0x66; break; //数值4
    case '5': P0=0x6D; break; //数值5
    case '6': P0=0x7D; break; //数值6
    case '7': P0=0x07; break; //数值7
    case '8': P0=0x7F; break; //数值8
    case '9': P0=0x6F; break; //数值9
    case'a': case 'A': P0=0x77; break;  //数值a  两个case兼容大小写
    case'b': case 'B': P0=0x7C; break;  //数值b
    case'c': case 'C': P0=0x39; break;  //数值c
    case'd': case 'D': P0=0x5E; break;  //数值d
    case'e': case 'E': P0=0x79; break;  //数值e
    case'f': case 'F': P0=0x71; break;  //数值f
    case '-': P0=0x40; break; //数值- 
    case '.': P0=0x80; break; //数值. 
    case ' ': P0=0x00; break; //无显示 
  }
}
/*延时函数, 用于暂停扫描*/
void Delay(unsigned int ms)   
{ 
  while(ms--){
    unsigned char i, j;
    _nop_();
    i = 2;
    j = 199;
    do
    {
      while (--j);
    } while (--i);
  }
  
}
/*把位选和段选封装在一个函数中,并且完成消影*/
void Display(char *d){
    int i;
    for(i=0;i<8;i++){
      weixvan(1+i);duanxvan(*d++);Delay(1);P0=0x00;
    }
}
void main (){
         char display[8]="99999999";
        char *p=&display[7];
    int i,j;
  while(1){    
 
        for(i=0;i<10;i++){
            for(j=0;j<80;j++){
                Display(display);
            }
            *p=*p-1;  
            if(*p=='0')
                break;
        }
        p--;
  } 
}
相关文章
|
4月前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
339 1
|
7月前
|
存储
【期末不挂科-单片机考前速过系列P3】(第三章:13题MOV&MOVX&MOVC&数码管速过)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P3】(第三章:13题MOV&MOVX&MOVC&数码管速过)经典例题盘点(带图解析)
|
4月前
【51单片机】通过定时器中断 在8位数码管显示时间
【51单片机】通过定时器中断 在8位数码管显示时间
|
4月前
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
209 0
|
4月前
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
148 0
|
7月前
5-1 51单片机数码管
5-1 51单片机数码管
25 1
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)