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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2066|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)程序 按下按鍵觸發(fā)變換模式問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
如圖,一個(gè)按鍵接P3.2中斷口,一排LED接P1口
要求每一下按鍵,LED循環(huán)切換流水燈和全閃燈模式
問題來了,我用外部中斷的模式,希望按下按鍵后,馬上就切換模式
實(shí)際上,卻總要執(zhí)行完一個(gè)子程序才會(huì)改變,不知道代碼應(yīng)該改才好


代碼如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit key = P3^2;
  6. uchar count = 0;
  7. uchar LED = 0xff;

  8. void delay10ms(uint n)
  9. {
  10.    uchar i,j;
  11.    for(;n>0;n--)
  12.    {
  13.       for(i=0;i<18;i++)
  14.       {
  15.          for(j=0;j<184;j++){;}
  16.       }
  17.    }
  18. }

  19. void led_turn(void)
  20. {
  21.    uchar i;
  22.    P1 = 0xfe;
  23.    delay10ms(100);
  24.    for(i=0;i<7;i++)
  25.    {
  26.       P1 = _crol_(P1,1);
  27.       delay10ms(100);
  28.    }
  29. }

  30. void led_flick(void)
  31. {
  32.       LED = ~LED;
  33.       P1  = LED;
  34.       delay10ms(100);
  35. }

  36. void main(void)
  37. {
  38.    IT0 = 1;
  39.    EX0 = 1;
  40.    EA  = 1;
  41.    while(1)
  42.    {
  43.       if(count == 1)
  44.       led_turn();
  45.       if(count == 2)
  46.       led_flick();
  47.    }
  48. }

  49. void key_check(void) interrupt 0
  50. {
  51.    if(key == 0)
  52.    {
  53.       delay10ms(1);
  54.       if(key == 0)
  55.       {
  56.          ++count;
  57.          if(count == 3)
  58.          count = 1;
  59.       }
  60.    }  
  61. }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1077017 發(fā)表于 2023-5-29 10:38 | 只看該作者
count放到兩個(gè)函數(shù)體里面檢測,不符合就退出。整體閃爍函數(shù)可以加一個(gè)循環(huán)。兩個(gè)函數(shù)之間再重新給LED賦0,防止從流水燈函數(shù)出來時(shí)LED不為0
回復(fù)

使用道具 舉報(bào)

板凳
ID:161164 發(fā)表于 2023-5-29 11:55 | 只看該作者

回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2023-5-29 13:58 | 只看該作者
把各種花樣流水燈用數(shù)組排列好,按下按鍵立即切換。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit key = P3^2;

  6. unsigned char code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  7. unsigned char code table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  8. unsigned char code table3[]={0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7};
  9. unsigned char code table4[]={0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa};
  10. uchar count = 0;
  11. uchar LED = 0xff;
  12. uchar i;

  13. void delay10ms(uint n)
  14. {
  15.    uchar i,j;
  16.    for(;n>0;n--)
  17.    {
  18.       for(i=0;i<18;i++)
  19.       {
  20.          for(j=0;j<184;j++){;}
  21.       }
  22.    }
  23. }


  24. void main(void)
  25. {
  26.    IT0 = 1;
  27.    EX0 = 1;
  28.    EA  = 1;
  29.    while(1)
  30.    {
  31.                 switch(count)
  32.                 {
  33.                         case 1: P1=table1[i]; break;
  34.                         case 2: P1=table2[i]; break;
  35.                         case 3: P1=table3[i]; break;
  36.                         case 4: P1=table4[i]; break;
  37.                         default:P1=0xff; break;
  38.                 }
  39.                 i=++i%8;
  40.                 delay10ms(50);
  41.    }
  42. }

  43. void key_check(void) interrupt 0
  44. {
  45.    if(key == 0)
  46.    {
  47.       delay10ms(1);
  48.       if(key == 0)
  49.       {
  50.          ++count;
  51.          if(count == 5)
  52.          count = 1;
  53.       }
  54.    }  
  55. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

5#
ID:647261 發(fā)表于 2023-5-29 17:16 | 只看該作者
leave323 發(fā)表于 2023-5-29 10:38
count放到兩個(gè)函數(shù)體里面檢測,不符合就退出。整體閃爍函數(shù)可以加一個(gè)循環(huán)。兩個(gè)函數(shù)之間再重新給LED賦0, ...

謝謝!
這個(gè)實(shí)現(xiàn)起來比較簡單,只要在每個(gè)子程序的循環(huán)中再加上count檢測就行了,反應(yīng)時(shí)間最長的只不過是延時(shí)那點(diǎn)時(shí)間。
回復(fù)

使用道具 舉報(bào)

6#
ID:647261 發(fā)表于 2023-5-29 17:21 | 只看該作者

謝謝,學(xué)到了。
這個(gè)方法很巧妙
縮短子程序的執(zhí)行時(shí)間
在主程序不停地檢測count值,對按鍵反應(yīng)很快
回復(fù)

使用道具 舉報(bào)

7#
ID:647261 發(fā)表于 2023-5-29 17:22 | 只看該作者
wulin 發(fā)表于 2023-5-29 13:58
把各種花樣流水燈用數(shù)組排列好,按下按鍵立即切換。

謝謝,這個(gè)方法對流水燈來說還是挺實(shí)用的
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品夜间视频香蕉 | 国产美女精品视频 | 国产精品久久久久久久久婷婷 | 欧美精品网站 | 亚洲一区在线免费观看 | 99精品欧美一区二区蜜桃免费 | 一级高清 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 手机看黄av免费网址 | 国产精品久久久久久久久久 | 国内毛片毛片毛片毛片 | 婷婷成人在线 | 一区二区三区免费在线观看 | 欧美一区二区视频 | 日韩精品人成在线播放 | 四虎最新视频 | 羞羞网站在线免费观看 | 久草新视频 | 一区二区三区av夏目彩春 | 91精品国产92 | 亚洲国产精品日韩av不卡在线 | 凹凸日日摸日日碰夜夜 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩国产一区二区三区 | 在线色网 | 久久午夜国产精品www忘忧草 | 波多野结衣一区二区三区在线观看 | 99精品网 | 日韩毛片在线观看 | 成人午夜黄色 | 亚洲品质自拍视频网站 | 国产一二三区电影 | 91久久久久久久久 | 久久国产精品久久国产精品 | 久久久久久免费精品一区二区三区 | 国产精品美女久久久久久免费 | 久久久久久久国产精品视频 | 久久精品免费 | 欧美不卡在线 | 中文在线一区 | 日本一区二区不卡 |