请教我的代码问题出在哪?

2019-03-24 19:27发布

利用寒假学习学习keil c51。在学到动态扫描的时候,有这么一道题:利用实验板的三个数码管显示从000~999,每300ms增加一次,不断周而复始的循环。 可是我编好之后,发现只能点亮一个数码管。。   研究了一天,也没发现问题。。。   求坛友们,放假没事帮俺研究研究呗。。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
辛昕
2019-03-26 14:55
  1. #include<reg52.h>

    #typedef uchar unsigned char;
    #typedef uint unsigned int;

    /*这是共阳管*/
    /*所以,全暗是 0x00*/
    #define DAWN 0

    const uchar num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    sbit le = P3^7;

    void T0_init(void);

    void main(void)
    {
    T0_init();
    while(1);
    }

    //------------------------------------------------------------

    void T0_init(void)
    {
    TMOD = 0x01;
    TH0 = 0xea; //6ms中断一次
    TL0 = 0x66;
    TF0 = 0; //中断标志位清零
    ET0 = 1; //允许定时器0中断
    EA = 1;
    TR0 = 1;
    }

    //--------------------------------------------------------------------------

    /*定时器六毫秒来一次,其实还可以再长一点,10到20毫秒刷新也够了*/
    /*相比于放在主程序里,我想,放在定时器里,更方便,定期刷新*/
    /*假设你使用的3位是0到2位——如果位置任意,可能要采用数组做一个地址掩码*/
    void timer0(void) interrupt 1
    {
    uchar digit = 0;
    TH0 = 0xea;
    TL0 = 0x66;
    static uint count = 0;
    static uint number = 0;
    uint Re_number;

    count++;

    if(count==50)
    {
    count=0;
    number++;
    if(number==1000)
    number=0;
    }

    Re_number = number;

    while(digit)
    {
    //这里应该还要有一个消影动作,但是,你的硬件图里,似乎没有一个地方是用来关闭138输出的。
    //138的几个OE全都接地了,挺浪费的。
    P2=digit;//这个顺序,也或许是 3-1-digit,具体视硬件如何连接了
    P0=num[Re_number % 10];
    Re_number /= 10;
    }
    }
复制代码
[ 本帖最后由 辛昕 于 2012-1-17 12:22 编辑 ]

一周热门 更多>