久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3203|回復: 9
打印 上一主題 下一主題
收起左側

為什么單片機數碼管只在第7個上面亮,流水燈也只在一個上亮

[復制鏈接]
跳轉到指定樓層
樓主
http://www.iqiyi.com/w_19say7ygl1.html
目的是通過定時器中斷來讓流水燈和數碼管做出相應的動作;
流水燈每隔時間在第一個p10和第二個p11流水
數碼管從左邊到右邊分別顯示,并且由0-7變化,即第一個數碼管顯示0,第二個顯示1,第三個顯示2.。。。依次循環

單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
int num=0;
int p=0;
int q=0;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
char code table1[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void init()
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;//打開總中斷
TMOD=0x01;
ET0=1;//打開定時器中斷
TR0=1;//定時器中斷開始
}
void delay0(int i)
{
while(i--);
}

void main()
{
init();

while(1)
{
  if(p==40)
  {
   if(num<8)
   {
       switch(num)
    {
        case 0:p20=0;p21=0;p22=0;P0=table1[num];P1=0xfe;
     case 1:p20=0;p21=0;p22=1;P0=table1[num];P1=0xfd;
     case 2:p20=0;p21=1;p22=0;P0=table1[num];P1=0xfe;
     case 3:p20=0;p21=1;p22=1;P0=table1[num];P1=0xfd;
     case 4:p20=1;p21=0;p22=0;P0=table1[num];P1=0xfe;
     case 5:p20=1;p21=0;p22=1;P0=table1[num];P1=0xfd;
     case 6:p20=1;p21=1;p22=0;P0=table1[num];P1=0xfe;
     case 7:p20=1;p21=1;p22=1;P0=table1[num];P1=0xfd;
    }
    num++;
   }
   else
   {
    num=0;
   }
      p=0;
  }
}
}
void delay1() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
p++;
q++;
}


51hei圖片_20191118232916.png (54.17 KB, 下載次數: 68)

51hei圖片_20191118232916.png

51hei圖片_20191118232919.png (22.65 KB, 下載次數: 68)

51hei圖片_20191118232919.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:25310 發表于 2019-11-19 08:18 | 只看該作者
LED 亮后沒加延時就滅了。
回復

使用道具 舉報

板凳
ID:277550 發表于 2019-11-19 09:04 | 只看該作者
void main(){
        init();

        while(1){
                if(p==40){
                        if(num<8){
                                switch(num){
                                case 0:p20=0;p21=0;p22=0;P0=table1[num];P1=0xfe;
                                case 1:p20=0;p21=0;p22=1;P0=table1[num];P1=0xfd;
                                case 2:p20=0;p21=1;p22=0;P0=table1[num];P1=0xfe;
                                case 3:p20=0;p21=1;p22=1;P0=table1[num];P1=0xfd;
                                case 4:p20=1;p21=0;p22=0;P0=table1[num];P1=0xfe;
                                case 5:p20=1;p21=0;p22=1;P0=table1[num];P1=0xfd;
                                case 6:p20=1;p21=1;p22=0;P0=table1[num];P1=0xfe;
                                case 7:p20=1;p21=1;p22=1;P0=table1[num];P1=0xfd;
                                }
                                num++;
                                delay(15);////////////////////////這一行,放在兩個if里面。
                        }else{
                                num=0;
                        }
                        p=0;
                }
        }
}
回復

使用道具 舉報

地板
ID:277550 發表于 2019-11-19 09:13 | 只看該作者
函數改成這樣

delay0(100);////////////////////////這一行,放在兩個if里面。
回復

使用道具 舉報

5#
ID:95352 發表于 2019-11-19 09:30 | 只看該作者
devcang 發表于 2019-11-19 09:04
void main(){
        init();

為啥加了還是只是p1.1這個燈在亮
  1.         if(num<8)
  2.                         {
  3.                             switch(num)
  4.                                 {
  5.                                     case 0:P1=0xfe;p20=0;p21=0;p22=0;P0=table1[num];
  6.                                         case 1:P1=0xfd;p20=0;p21=0;p22=1;P0=table1[num];
  7.                                         case 2:P1=0xfe;p20=0;p21=1;p22=0;P0=table1[num];
  8.                                         case 3:P1=0xfd;p20=0;p21=1;p22=1;P0=table1[num];
  9.                                         case 4:P1=0xfe;p20=1;p21=0;p22=0;P0=table1[num];
  10.                                         case 5:P1=0xfd;p20=1;p21=0;p22=1;P0=table1[num];
  11.                                         case 6:P1=0xfe;p20=1;p21=1;p22=0;P0=table1[num];
  12.                                         case 7:P1=0xfd;p20=1;p21=1;p22=1;P0=table1[num];
  13.                                 }
  14.                                
  15.                                 delay0(50000);
  16.                                 num++;
  17.                         }
復制代碼
回復

使用道具 舉報

6#
ID:95352 發表于 2019-11-19 09:38 | 只看該作者
  1. void main()
  2. {
  3.         init();

  4.         while(1)
  5.         {
  6.                 if(p==40)
  7.                 {
  8.                         if(num<8)
  9.                         {
  10.                             switch(num)
  11.                                 {
  12.                                     case 0:P1=0xfe;p20=0;p21=0;p22=0;P0=table1[num];
  13.                                         case 1:P1=0xfd;p20=0;p21=0;p22=1;P0=table1[num];
  14.                                         case 2:P1=0xfe;p20=0;p21=1;p22=0;P0=table1[num];
  15.                                         case 3:P1=0xfd;p20=0;p21=1;p22=1;P0=table1[num];
  16.                                         case 4:P1=0xfe;p20=1;p21=0;p22=0;P0=table1[num];
  17.                                         case 5:P1=0xfd;p20=1;p21=0;p22=1;P0=table1[num];
  18.                                         case 6:P1=0xfe;p20=1;p21=1;p22=0;P0=table1[num];
  19.                                         case 7:P1=0xfd;p20=1;p21=1;p22=1;P0=table1[num];
  20.                                 }
  21.                                
  22.                                 delay0(50000);
  23.                                 num++;
  24.                         }
  25.                         else
  26.                         {
  27.                                 num=0;
  28.                         }
  29.                     p=0;
  30.                 }
  31.         }

  32. }
復制代碼



為啥加了延時之后還是一樣?
回復

使用道具 舉報

7#
ID:277550 發表于 2019-11-19 09:57 | 只看該作者
圖和程序,不對應的。 。。。。。。
回復

使用道具 舉報

8#
ID:277550 發表于 2019-11-19 14:27 | 只看該作者
switch
每個 case 后邊,加break   


。。。。。。。。。邏輯也要調整一下的,自己慢慢 調整 試試
回復

使用道具 舉報

9#
ID:277550 發表于 2019-11-19 14:39 | 只看該作者
罷了,不賣關子了,貼


        while(1){
                switch(num){
                case 0:p20=0;p21=0;p22=0;P0=table1[q];P1=0xfe; break;
                case 1:p20=0;p21=0;p22=1;P0=table1[q];P1=0xfd; break;
                case 2:p20=0;p21=1;p22=0;P0=table1[q];P1=0xfb; break;
                case 3:p20=0;p21=1;p22=1;P0=table1[q];P1=0xf7; break;
                case 4:p20=1;p21=0;p22=0;P0=table1[q];P1=0xef; break;
                case 5:p20=1;p21=0;p22=1;P0=table1[q];P1=0xdf; break;
                case 6:p20=1;p21=1;p22=0;P0=table1[q];P1=0xbf; break;
                case 7:p20=1;p21=1;p22=1;P0=table1[q];P1=0x7f; break;
                }
                delay0(30);
               
                num++;
                if(num==8){
                        num=0;
                }
               
                if(p==20){
                        p=0;
                        q++;
                        if(q>9) q=0;
                }
        }
回復

使用道具 舉報

10#
ID:213173 發表于 2019-11-19 15:23 | 只看該作者
switch-case-break語句和位碼都錯了,給你改成數碼管動態顯示0~7+流水燈


  1. #include<reg52.h>
  2. #include<intrins.h>
  3. sbit p20=P2^0;
  4. sbit p21=P2^1;
  5. sbit p22=P2^2;
  6. char num=0;
  7. int  q=0;
  8. bit  p=0;
  9. char code table1[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};

  10. void init()
  11. {
  12.         TMOD=0x01;
  13.         TH0=(65535-1000)/256;//1ms
  14.         TL0=(65535-1000)%256;
  15.         TR0=1;//定時器中斷開始
  16.         EA=1;//打開總中斷
  17.         ET0=1;//打開定時器中斷
  18. }
  19. /*
  20. void delay0(int i)
  21. {
  22.         while(i--);
  23. }
  24. */
  25. void main()
  26. {
  27.         init();
  28.         P1=0xfe;//初始化
  29.         while(1)
  30.         {
  31.                 if(p==1)
  32.                 {
  33.                         p=0;
  34.                         P0=0x00;//消隱
  35.                         switch(num)//送位碼
  36.                         {
  37.                                 case 0:p20=0;p21=0;p22=0;break;
  38.                                 case 1:p20=1;p21=0;p22=0;break;
  39.                                 case 2:p20=0;p21=1;p22=0;break;
  40.                                 case 3:p20=1;p21=1;p22=0;break;
  41.                                 case 4:p20=0;p21=0;p22=1;break;
  42.                                 case 5:p20=1;p21=0;p22=1;break;
  43.                                 case 6:p20=0;p21=1;p22=1;break;
  44.                                 case 7:p20=1;p21=1;p22=1;break;
  45.                         }
  46.                         P0=table1[num];//送段碼
  47.                         num++;
  48.                         num%=8;//0~7
  49.                         q++;
  50.                         if(q>=500)//0.5秒
  51.                         {
  52.                                 q=0;
  53.                                 P1=(P1<<1)+1;//左移1位補1
  54.                                 if(P1==0xff)
  55.                                         P1=0xfe;       
  56.                         }
  57.                 }
  58.         }
  59. }
  60. void delay1() interrupt 1
  61. {
  62.         TH0=(65535-1000)/256;
  63.         TL0=(65535-1000)%256;
  64.         p=1;
  65. }
復制代碼




回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 欧美日韩亚洲系列 | 欧美一区二区三区视频在线播放 | 婷婷色国产偷v国产偷v小说 | 99色在线 | 天天干免费视频 | 亚洲国产欧美日韩 | 欧美激情在线精品一区二区三区 | 日日操夜夜操视频 | 欧美亚洲日本 | 男人天堂网址 | 国产一区二区电影 | 国产乱码精品一区二区三区忘忧草 | 天天干视频在线 | 激情网站在线观看 | 亚洲成网站 | 欧美精品乱码99久久影院 | 欧美精品被 | 久久久噜噜噜久久中文字幕色伊伊 | 日韩二三区 | 亚洲成人毛片 | www久| 日日爽| www中文字幕 | 成人精品视频在线观看 | 一区二区视频在线观看 | 久久久久久亚洲精品 | 视频第一区 | 一区二区免费 | 黑人一级片视频 | 国产伦一区二区三区视频 | 91国产精品在线 | 成人在线视频一区 | a毛片视频网站 | 九色91视频 | 精品国模一区二区三区欧美 | 久久99精品久久久久久琪琪 | 国产精品视频二区三区 | 这里精品 | 毛片免费观看 | 国产亚洲一区二区在线观看 |