微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问个51单片机数码管显示秒的问题

请问个51单片机数码管显示秒的问题

时间:10-02 整理:3721RD 点击:
我是想让每隔1秒,sec就加,然后在数码管中显示,可是不知道为什么只显示最后一位,从0到9 ,前面4位不会亮,
哪位帮我看看,为什么会这样?怎么改?
/*
功能:利用时钟中断,每隔一秒中断一次,并显示
*/
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar dspsec[5];
uchar num=0;
uint sec=0;
sbit dula=P2^6; //段锁存器
sbit wela=P2^7; //位锁存器
//计数器中断初始化
void init_timer()
{
        EA=1;
        ET0=1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;       
}
void display(uchar temp)
{
    uchar i;
   for(i=0;i<temp;i++)
   {
        P1=table_we[i];
            wela=1;
            wela=0;
            P1=dspsec[i];
        dula=1;
            dula=0;
        }
}

void main()
{
    init_timer();
    while(1)
        {
                if(num==20)  //20*50ms=1s
                {
                   num=0;
                   sec++;
                   //显示时间
                   dspsec[0]=table_du[sec/10000];
                   dspsec[1]=table_du[sec/1000%10];
                   dspsec[2]=table_du[sec/100%10];
                   dspsec[3]=table_du[sec/10%10];
                  dspsec[4]=table_du[sec%10];
                  display(5);
                 }
        }
}
//中断处理程序
void timer() interrupt 1
{
       TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
}

能看一下你电路板的原理图吗

显示函数有问题吧,你再看看

你编程写不完整还是显示不完整啊?

显示不完整,只显示最后一位

单片机新手,猛烈学习中

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top