关于4位数码管的动态显示问题,新手虚心求教,有空的大兄弟进来看看

2019-03-24 18:06发布

以下是程序,下载到板子上不能实现一秒变化一次,大概8秒才一次
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int  uint16;
typedef unsigned long uint32;

code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
                                                              

                       0x99,0x92,0x82,0xf8,
                                                              

                       0x80,0x90,0x88,0x83,
                                                              

                       0xa7,0xa1,0x86,0x8e}; //【16进制数组】
uint8  i = 0;
uint16 counter = 0;

//sbit ENLED = P1^4;
sbit SMG1 = P3^4;
sbit SMG2 = P3^5;
sbit SMG3 = P3^6;
sbit SMG4 = P3^7;

void timer1_init()                //定时器初始化
{
        TMOD |= 0x01;
        TH1   = 0xfc;
        TL1   = 0x67;                //1ms
        TR1   = 1;
}

void int_init()                        //中断初始化
{
        ET1 = 1;
        EA  = 1;
}

main()
{
        P0 = 0xff;P3 = 0xff;
    timer1_init();
        int_init();
        while(1);
}

void refresh() //数码管动态扫描显示
{
        static uint8 j = 0;

        switch(j)
        {
                case 0: SMG1 = 0;P0 = number[i];break;
                case 1: SMG2 = 0;P0 = number[i];break;
                case 2: SMG3 = 0;P0 = number[i];break;
                case 3: SMG4 = 0;P0 = number[i];break;
                default: break;
        }
        if(3 == j++)
                j = 0;
}

void interrupt_timer1() interrupt 3
{
        TH1 = 0xfc;
        TL1 = 0x67;
        counter++;
        if(1000 == counter)
        {
                i++;
                if(15 == i)
                {
                        i = 0;
                }       
        }
        refresh();
}



附上原理图
在线等  谢谢各位了~~

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
MrKingMCU
2019-03-25 17:32
1.晶振是多少?
2.一般在中断里不会再去处理其他东西,refresh();这个函数可以放到main()里。
3.在refresh();里定义的static uint8 j = 0;感觉总是怪怪的。
4.楼上所说的第一条是对的,你数码管估计重影会特别厉害。
5.有一点没看懂,就是你四位数码管显示的是同一个数字吧?是分四个路口吗?

你试着这样排查,把中断函数里的refresh函数注释掉,在i++后面直接控制LED闪烁,看一下闪烁频率是多少,如果正常的话,就是你refresh函数写的不对。

一周热门 更多>