欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機動態數碼管顯示數字不正常 [打印本頁]

作者: 憶1709    時間: 2020-12-2 22:19
標題: 單片機動態數碼管顯示數字不正常
如下這段程序是用T0定時器來讓動態數碼管間隔0.5s顯示1到8;程序編譯沒有錯誤,但就是無法運行,數碼管一直不亮燈。
請教下這是哪里的問題?謝謝!
單片機源程序如下:
#include <reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uint tt,a;
sbit LSA=P1^0;
sbit LSB=P1^1;
sbit LSC=P1^2;
uchar code DM[8]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F};  //共陰數碼管

void main()
{

  while(1)   
  {
           TMOD=0x01; //設置定時器0的工作方式
           TH0=(65536-50000)/256;
           TL0=(65536-50000)%256;   
           EA=1;  //開啟總中斷,
           ET0=1; //開啟T0的中斷
           TR0=1; //開啟定時器T0;
           tt=0;
           P0=0x00;
           a=0;
           tt=0;
           if(tt==10)
           {

               switch(a)
                {
                    case 0:LSA=0;LSB=0;LSC=0;break;
                    case 1:LSA=0;LSB=0;LSC=1;break;
                    case 2:LSA=0;LSB=1;LSC=0;break;
                    case 3:LSA=0;LSB=1;LSC=1;break;
                    case 4:LSA=1;LSB=0;LSC=0;break;
                    case 5:LSA=1;LSB=0;LSC=1;break;
                    case 6:LSA=1;LSB=1;LSC=0;break;
                    case 7:LSA=1;LSB=1;LSC=1;break;
                }

               P0=DM[a];
               a++;
               if(a>7) a=0;
               tt=0;
           }

  }
}

void T0l() interrupt 1  
{
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;  //定時器設置50ms
     tt++;   
}



作者: csmyldl    時間: 2020-12-2 23:55
從問的方式看只有1位數碼,但又說成動態不好理解,看了一眼程序,確實是8位數碼管且通過3-8譯碼器來選擇某位點亮,程序錯在定時計數器的方式不應放在循環內,既然是動態顯示,定時時間不應該是0.5s,應該在20ms內循環顯示一次,程序修改如下:
#include <reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uint tt,a;
sbit LSA=P1^0;    //控制譯碼器
sbit LSB=P1^1;
sbit LSC=P1^2;
uchar code DM[8]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F};  //共陰數碼管
bit flag;
void main()
{       uchar tt;
           TMOD=0x01; //設置定時器0的工作方式
           TH0=(65536-2000)/256;
           TL0=(65536-2000)%256;   
           EA=1;  //開啟總中斷,
           ET0=1; //開啟T0的中斷
           TR0=1; //開啟定時器T0;
           tt=0;

  while(1)   
  {
       //主程序檢查時間標志
      if (flag)
       {
           flag=0;
           P0=0;      //消影
           P0=DM【tt];
      
          switch(tt)
           {
                    case 0:LSA=0;LSB=0;LSC=0;break;
                    case 1:LSA=1;LSB=0;LSC=0;break;
                    case 2:LSA=0;LSB=1;LSC=0;break;
                    case 3:LSA=1;LSB=1;LSC=0;break;
                    case 4:LSA=0;LSB=0;LSC=1;break;
                    case 5:LSA=1;LSB=0;LSC=1;break;
                    case 6:LSA=0;LSB=1;LSC=1;break;
                    case 7:LSA=1;LSB=1;LSC=1;break;
                }
               tt++;
               if(tt==8) tt=0;
           }

  }
}

void T0l() interrupt 1  
{
     TH0=(65536-2000)/256;
     TL0=(65536-2000)%256;  //定時器設置2ms
     flag=1;                            //設置時間到標志
}

作者: 回憶不堪回首    時間: 2020-12-7 16:55
初值放大循環?那你每循環一次就清一次還顯示毛線啊。。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1