注册 登录
编程论坛 单片机编程

显示时分秒,最后两个数码管一直显示0,不知道是不是time函数写错了,改了几次了,最后两个一直是0

张珂珂 发布于 2020-04-08 18:49, 2747 次点击
程序代码:
#include<reg51.h>
void display();
void time();



void delay10ms(unsigned char i)             //延迟函数(for循环需要时间) 当第二层for函数为p=100时(经过测量),i为多少,延迟时间就是i*10ms
{                                         //目的是在两次灯亮之间空出时间
    int n,p;
       for(n=0;n<i;n++)
           for(p=0;p<200;p++);
}

unsigned int i;
unsigned int duanma[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xbf};
unsigned int weima[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned int s1=0,s=0,m=0,h=0,number=0;
unsigned int num[8]={0,0,10,0,0,10,0,0};

void main()
{
   
  //以下两行为片选语句,不可以删除。否则无法操作LED
    P2 = 0xa0;P0 = 0x00;P2 = 0;    //选中蜂鸣器,关闭蜂鸣器
    P2 = 0xC0;P0 = 0xFF;P2 = 0; //位选全部选中
    P2 = 0xE0;        //选中数码管              打开Y7
      while(1)
      {      
        time();
        display();      
      }
}
void display()
{
  for(i=0;i<8;i++)
  {
    number=num[i];
    P2=0xC0;P0=weima[i];P2=0;
    P2=0xE0;P0=duanma[number];P2=0;
    delay10ms(1);
    P0=0xFF;   
  }
}

void time()
{
  s1++;
  if(s1>=10)
  {   
    s1=0;
    num[7]=s%10;
    num[6]=s/10;
    ++s;
    if(s==60);
    {
      s=0;
      num[4]=m%10;
      num[3]=m/10;
      ++m;
      if(m==60)
      {
        m=0;
        num[1]=h%10;
        num[0]=h/10;
        ++h;
        if(h==24)
        {
          h=0;
        }
      }
     }
    }
}  

2 回复
#2
张珂珂2020-04-08 19:46
已经好了,谢谢大家


程序代码:
#include<reg51.h>
void display();
void time();



void delay10ms(unsigned char i)             //延迟函数(for循环需要时间) 当第二层for函数为p=100时(经过测量),i为多少,延迟时间就是i*10ms
{                                         //目的是在两次灯亮之间空出时间
    int n,p;
       for(n=0;n<i;n++)
           for(p=0;p<200;p++);
}

unsigned int i;
unsigned int duanma[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xbf};
unsigned int weima[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned int s1=0,s=0,m=0,h=0,number=0;
unsigned int num[8]={0,0,10,0,0,10,0,0};

void main()
{
   
  //以下两行为片选语句,不可以删除。否则无法操作LED
    P2 = 0xa0;P0 = 0x00;P2 = 0;    //选中蜂鸣器,关闭蜂鸣器
    P2 = 0xC0;P0 = 0xFF;P2 = 0; //位选全部选中
    P2 = 0xE0;        //选中数码管              打开Y7
      while(1)
      {      
        time();
        display();      
      }
}
void display()
{
  for(i=0;i<8;i++)
  {
    number=num[i];
    P2=0xC0;P0=weima[i];P2=0;
    P2=0xE0;P0=duanma[number];P2=0;
    delay10ms(1);
    P0=0xFF;   
  }
}

void time()
{
  s1++;
  if(s1>=10)
  {   
    s1=0;
    num[7]=s%10;
    num[6]=s/10;
    ++s;
    if(s==60)
    {
      s=0;
      ++m;
      num[4]=m%10;
      num[3]=m/10;
      
      if(m==60)
      {   
        ++h;
        m=0;
        num[1]=h%10;
        num[0]=h/10;
        
        if(h==24)
        {
          h=0;
        }
      }
     }
    }
}  
#3
xianfajushi2020-04-09 10:43
1