单片机入门:数码管秒表

2022-07-21 15:51:19 浏览数 (1)

采用8位数码管进行秒表设计。

仿真原理图:

程序设计:

代码语言:javascript复制
/*
数码管秒表设计
*/
#include<reg52.h>

unsigned char LedBuff[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};

unsigned char code LedChar[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};//共阳

/*
unsigned char code LedChar[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};//共阴
*/

void delay_ms(unsigned int ms)                       
{    
  unsigned int a,b; 
  for(a=ms;a>0;a--)
  for(b=123;b>0;b--);
}

void main()
{
  unsigned char cnt=0;
  unsigned long sec=0;
  unsigned char i=0;
  
  TMOD=0X01;
  TH0=0XB8;
  TL0=0X00;
  TR0=1;
  
  while(1)
  {
    if(TF0==1)
    {
      TF0=0;
      TH0=0XB8;
      TL0=0X00;//计时器溢出一次0.002秒
      cnt  ;
      if(cnt>=50)//溢出100次为1秒
      {
        cnt=0;
        sec  ;
        LedBuff[0]= LedChar[sec];
        LedBuff[1]= LedChar[sec/10];
        LedBuff[2]= LedChar[sec/100];
        LedBuff[3]= LedChar[sec/1000];
        LedBuff[4]= LedChar[sec/10000];
        LedBuff[5]= LedChar[sec/100000];
      }
    }

    for(i=0;i<6;i  )
    {
      P0=0xff;
      
      switch(i)   //位选,选择点亮的数码管,
      {
        case(0):
          P1=0x20; break;//显示第0位
        case(1):
          P1=0x10; break;//显示第1位
        case(2):
          P1=0x08; break;//显示第2位
        case(3):  
          P1=0x04; break;//显示第3位
        case(4):
          P1=0x02; break;//显示第4位
        case(5):
          P1=0x01; break;//显示第5位
        default: break;
      }
      P0=LedBuff[i];//发送段码
      delay_ms(1); //间隔一段时间扫描  
      P0=0xFF;
    }
 }
}

为验证仿真设计,仿真视频如下: http://mpvideo.qpic.cn/0bf2aeaa2aaauaaccn4lmzpvaaodbuaqadia.f10002.mp4?

0 人点赞