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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13566|回復: 3
收起左側

多個按鍵控制流水燈切換程序

[復制鏈接]
ID:262 發表于 2016-3-11 23:22 | 顯示全部樓層 |閱讀模式
本帖最后由 heicad 于 2016-3-11 23:25 編輯

有四種流水模式,想通過四個按鈕分別控制,并使用外部打斷來立即切換程序,怎么都寫不了,每次都是要通過按復位再安按鈕來切換程序,用了switch語句還是不行,求大神解答,電路圖的按鍵位置錯了,本來想法是用外部打斷k1切換程序,按一下是流水燈加數碼管閃動,再按一次立即切換呼吸燈,在按一下立即切換拖尾燈,現在就想換個立即切換的,分別定義k1,k2,k3按一下就立即切換,我寫的程序不能立即切換,求大神解答一下,謝謝啦



  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define led P1

  6. uchar abit=16;
  7. uchar atimer0_n;
  8. uchar code abit8[9]={1,2,4,8,16,32,64,128,0};
  9. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
  10. uchar nn;
  11. char a,b,c,d,e,f,g,h;  


  12. sbit k1=P2^3;
  13. sbit k2=P2^2;
  14. sbit k3=P2^1;

  15. void led1();        
  16. void led2();
  17. void led3();
  18. void Delay10ms(unsigned int);
  19. void delay(int x)  
  20. {  int i;
  21.          for(i=x;i>0;i--);
  22.         }
  23.         
  24. void Delay10ms(unsigned int c)   //誤差 0us
  25. {
  26.     unsigned char a,b;
  27.     for(;c>0;c--)
  28.         for(b=38;b>0;b--)
  29.             for(a=130;a>0;a--);
  30. }

  31. void main()
  32. {while(1)
  33.         {        
  34.         if(k1==0)led1();
  35.         if(k2==0)led2();
  36.         if(k3==0)led3();
  37.         }
  38. }
  39. void led1()                  
  40. {
  41.         unsigned int i;
  42.         led=0xfe;
  43.         P0=table[i];
  44.         Delay10ms(50);
  45.         while(1)
  46.         {
  47.                 for(i=0;i<7;i++)                                                
  48.                 {
  49.                         led=_crol_(led,1);
  50.                         P0=table[i+1];
  51.                         Delay10ms(50);                                                         
  52.                 }
  53.                 for(i=7;i>0;i--)                                                        
  54.                 {
  55.                         led=_cror_(led,1);
  56.                         P0=table[i-1];
  57.                         Delay10ms(50);                                                        
  58.                 }                  
  59.         }        
  60. }
  61. void led2()
  62. {        
  63.         int x,cycle=370;
  64.         while(1)
  65.         {
  66.           for(x=0x00;x<cycle;x++)
  67.           {
  68.                   P1=0;
  69.                 delay(x-50);        
  70.                 P1=0xff;
  71.                 delay(cycle-x);        
  72.           }

  73.           for(x=cycle;x>0;x--)
  74.           {
  75.                   P1=0;
  76.                 delay(x-50);  
  77.                 P1=0xff;
  78.                 delay(cycle-x);
  79.           }

  80.         }        
  81. }

  82. void led3()
  83. {        TMOD = 0x11;        
  84.         TL0 = 0x00;                //2.5ms
  85.         TH0 = 0xF7;        
  86.         TF0 = 0;               
  87.         TR0 = 1;        
  88.         EA=1;ET0=1;
  89.         while(1)
  90.         {
  91.          a=abit;
  92.          if(a>7||a<0)
  93.                 a=8;
  94.          b=abit-1;
  95.          if(b>7||b<0)
  96.                  b=8;
  97.          c=abit-2;
  98.          if(c>7||c<0)
  99.                  c=8;
  100.                  d=abit-3;
  101.          if(d>7||d<0)
  102.                  d=8;
  103.                          e=abit-4;
  104.          if(e>7||e<0)
  105.                  e=8;
  106.                          f=abit-5;
  107.          if(f>7||f<0)
  108.                  f=8;
  109.                          g=abit-6;
  110.          if(g>7||g<0)
  111.                  g=8;
  112.                          h=abit-7;
  113.          if(h>7||h<0)
  114.                  h=8;
  115.         
  116.                
  117.         atimer0_n++;
  118.         if(atimer0_n==520)
  119.         atimer0_n=0;
  120.         if(atimer0_n<5)
  121.                 P1=0xff-abit8[a];
  122.         if(atimer0_n<40)
  123.                 P1=0xff-abit8[b];
  124.         if(atimer0_n<150)
  125.                 P1=0xff-abit8[c];        
  126.         if(atimer0_n<255)
  127.                 P1=0xff-abit8[d];
  128.         if(atimer0_n<300)
  129.                 P1=0xff-abit8[e];
  130.         if(atimer0_n<380)
  131.                 P1=0xff-abit8[f];
  132.         if(atimer0_n<460)
  133.                 P1=0xff-abit8[g];
  134.         if(atimer0_n<520)
  135.                 P1=0xff-abit8[h];
  136.                
  137.         }
  138. }

  139. atimer0 () interrupt 1
  140. {        
  141.         TL0 = 0x00;                //50ms
  142.         TH0 = 0x4C;
  143.         nn++;
  144.         if(nn==1)
  145.         {
  146.                 nn=0;abit--;
  147.                  if(abit==0)
  148.                  abit=32;
  149.         }

  150.                
  151. }   
復制代碼


就是這幾個程序,現在先把第一個流水燈的延時換成定時器延時,怎么改想立即切換

回復

使用道具 舉報

ID:262 發表于 2016-3-11 23:22 | 顯示全部樓層
子函數void led1();        
void led2();
void led3();里有while(1)語句出不來---死循環。
要想用中斷的話只有兩個外部中斷,不用中斷也可以實現的。設置四個標記變量代表四個按鍵的情況,再掃描顯示OK!
回復

使用道具 舉報

ID:262 發表于 2016-3-11 23:22 | 顯示全部樓層
樓上教你了,每一個子程序的while(1)出不來,你的主函數只執行了void led1();。后面的都執行不到
回復

使用道具 舉報

ID:262 發表于 2016-3-11 23:23 | 顯示全部樓層

在循環體里加如按鍵條件   先back  在執行
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品国产三级国产aⅴ原创 | 国产一区黄色 | 羞羞在线观看视频 | 精品国产乱码久久久久久蜜臀 | 免费国产一区二区 | 天天影视亚洲综合网 | 国产乱码精品一区二区三区中文 | 日韩视频在线免费观看 | 日本一本在线 | 成人午夜精品一区二区三区 | 精品国产视频 | 青青草视频免费观看 | 国产精品久久影院 | 中文字幕一区二区三区精彩视频 | 亚洲视频在线看 | 激情五月婷婷 | 色婷婷av一区二区三区软件 | 好姑娘高清在线观看电影 | 天天av天天好逼 | 亚洲狠狠 | 欧日韩在线观看 | 波多野结衣中文视频 | 精品中文字幕视频 | 91精品一区二区三区久久久久 | 蜜臀网| 黄色毛片免费视频 | 一级二级三级在线观看 | 丝袜美腿一区二区三区动态图 | 欧美日韩国产精品一区 | 欧美男人天堂 | 羞羞的视频免费观看 | 中文字幕av网址 | 一区二区三区在线免费观看 | 久久不卡 | 国产99热在线 | 亚洲免费视频一区二区 | wwwxxx国产 | 91婷婷韩国欧美一区二区 | 韩国精品一区二区三区 | 天堂视频免费 | 午夜黄色影院 |