发 帖  
原厂入驻New
[问答] 数码管动态扫描
145 数码管
分享
#include<reg52.h>
#define uint unsigned int
uchar temp,aa,numdu,numwe;
sbit wela=P2^7;
0x3f,0x06,0x5b,0x4f,
0x7f,0x6f,0x77,0x7c,
uchar code tablewe[]={
void main()
        numdu=0;
        aa=0;
        TH0=(65536-3000)/256;
        EA=1;
        TR0=1;
        {
                        {
                                numdu++;
                                        numdu=1;
                                P0=tabLEDu[numdu];
                                wela=1;
                                wela=0;
                                IF(numwe==6)
                        }
}
{
        TL0=(65536-50000)%256;
}
请问进入if(aa==40)语句中,后面不给aa重新赋值0,数码管闪一下就灭了,接着第四位数码管亮4然后保持这个数据不变。但是,我不明白的是按照程序来说,数码管应该一致执行while循环,6位数码管一直在闪烁才对。

0
奖励5积分
2020-9-2 00:15:58   1 评论 分享淘帖 邀请回答
1 条评论
  • 2020-9-2 11:00

    代码太乱,给你整理一下。适合共阴数码管通过74HC573复用P0口
    #include&lt;reg52.h&gt;
    #define uint unsigned int
    #define uchar unsigned char
    sbit dula=P2^6;
    sbit wela=P2^7;
    uchar code tabLEDu[]={
            0x3f,0x06,0x5b,0x4f,0x66,
            0x6d,0x7d,0x07,0x7f,0x6f};
    uchar numdu;

    void main()
    {
            numdu=0;
            TMOD= 0x01;                //设置定时器模式
            TL0 = 0x18;                //设置定时初值1ms
            TH0 = 0xFC;                //设置定时初值1ms
            TF0 = 0;                //清除TF0标志
            TR0 = 1;                //定时器0开始计时
            while(1)
            {
                    if(TF0==1)//定时器溢出标志=1
                    {
                            TF0=0;//定时器溢出标志清0
                            TL0 = 0x18;                //重装初值
                            TH0 = 0xFC;                //重装初值
                            P0&amp;=0x00;                //数码管消隐
                            dula=1;                        //段码锁存
                            dula=0;
                            P0|=~(0x01&lt;&lt;numdu);//送位码
                            wela=1;                        //位码锁存
                            wela=0;
                            P0=tabLEDu[numdu+1];//送段码
                            dula=1;                        //段码锁存
                            dula=0;
                            numdu++;                        //动态显示计数
                            if(numdu==6)
                                    numdu=0;
                    }
            }
    }

3个回答
你要是能把程序贴全一点儿我们还能看的更清楚些
2020-9-2 09:40:53 评论

举报

在评论里发代码会出现乱码,重发。
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar code tabLEDu[]={
  7.         0x3f,0x06,0x5b,0x4f,0x66,
  8.         0x6d,0x7d,0x07,0x7f,0x6f};
  9. uchar numdu;

  10. void main()
  11. {
  12.         numdu=0;
  13.         TMOD= 0x01;                //设置定时器模式
  14.         TL0 = 0x18;                //设置定时初值1ms
  15.         TH0 = 0xFC;                //设置定时初值1ms
  16.         TF0 = 0;                //清除TF0标志
  17.         TR0 = 1;                //定时器0开始计时
  18.         while(1)
  19.         {
  20.                 if(TF0==1)//定时器溢出标志=1
  21.                 {
  22.                         TF0=0;//定时器溢出标志清0
  23.                         TL0 = 0x18;                //重装初值
  24.                         TH0 = 0xFC;                //重装初值
  25.                         P0=0x00;                //数码管消隐
  26.                         dula=1;                 //段码锁存
  27.                         dula=0;
  28.                         P0|=~(0x01<<numdu);//送位码
  29.                         wela=1;                 //位码锁存
  30.                         wela=0;
  31.                         P0=tabLEDu[numdu+1];//送段码
  32.                         dula=1;                 //段码锁存
  33.                         dula=0;
  34.                         numdu++;               //动态显示计数
  35.                         if(numdu==6)
  36.                                 numdu=0;
  37.                 }
  38.         }
  39. }
复制代码
2020-9-2 11:08:03 评论

举报

应该是在主函数while里一致进行动态刷新,在中断函数进行数字加运算,中断函数应放在主函数外
2020-9-11 11:48:20 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表