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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2467|回復: 6
收起左側

各位大佬這單片機電路怎么按鍵了沒反應?麻煩幫我看看程序

[復制鏈接]
ID:1052650 發表于 2022-11-23 20:07 | 顯示全部樓層 |閱讀模式
50黑幣
開始時,第一個燈閃爍,時間間隔為1s。當按下按鍵后,八個燈閃爍,時間間隔為 2s;若在時間間隔為4s時按下按鍵,則進入呼吸燈模式,八個燈從亮到暗,再由暗到亮如此循環;再次按下按鍵,則恢復最初狀態(第一個燈閃爍,間隔1s)。要求是這樣子的,仿真圖在最后,感謝各位
0.png

單片機源程序如下:
  1. #include <REGX51.H>

  2. unsigned char a[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  3. int count0=0,count1=0,count=0,num0=0,num1=0;
  4. int temp=1,temp1=1,temp2=1,n=0,flag=0;

  5. void delay()
  6. {
  7.         unsigned char i,j;
  8.         for(i=0;i<20;i++){
  9.                 for(j=0;j<120;j++);
  10.         }
  11. }
  12. void inittimer0()
  13. {
  14.         TMOD=0x01;
  15.         TH0=(65536-50000)/256;
  16.         TL0=(65536-50000)%256;
  17.         TR0=1;
  18.         EA=1;
  19.         ET0=1;
  20. }
  21. void display(){
  22.         int i;
  23.         for(i=0;i<8;i++){
  24.                 delay();
  25.                 delay();
  26.                 delay();
  27.                 delay();
  28.                 delay();
  29.                 P2=~a[i];
  30.         }
  31.         for(i=7;i>1;i--){
  32.                 delay();
  33.                 delay();
  34.                 delay();
  35.                 delay();
  36.                 delay();
  37.                 P2=~a[i];
  38.         }
  39. }

  40. void button_scan(){
  41.         delay();
  42.         if(P1_0!=1&&n>3) {temp=temp?0:1;}
  43.         else if(P1_0!=1){flag=1;temp2=0;}
  44.         while(P1_0==0);
  45. }

  46. void main(){
  47.         inittimer0();
  48.         while(1){
  49.                 button_scan();
  50.                 if(temp==1){
  51.                         P2=0xff; //±£3ÖLEDè«°μ
  52.                         P2_0=num0;
  53.                 }
  54.                 else if(temp1!=temp ){
  55.                         display();
  56.                 }
  57.                 else if(flag){
  58.                         P2=num1;
  59.                 }
  60.         }
  61. }
  62. void timer0_isr() interrupt 1
  63. {
  64.         TH0=(65536-50000)/256;
  65.         TL0=(65536-50000)%256;
  66.         count0++;
  67.         count1++;
  68.         count++;
  69.         if(count>=20) {
  70.                 n++;
  71.                 count=0;
  72.                 if(n>=4) {n=0;}
  73.         }
  74.         if(count0>=20&&!temp2){
  75.                 num0=num0?0:1;
  76.                 count0=0;
  77.         }
  78.         else if(count1>=40){
  79.                 num1=~num1;
  80.                 count1=0;
  81.         }
  82. }
復制代碼

回復

使用道具 舉報

ID:1034262 發表于 2022-11-24 09:51 | 顯示全部樓層
示波器看看按鍵時IO有變化嗎?有變化就是電路有反應。
回復

使用道具 舉報

ID:1052650 發表于 2022-11-24 16:18 來自觸屏版 | 顯示全部樓層
coody_sz 發表于 2022-11-24 09:51
示波器看看按鍵時IO有變化嗎?有變化就是電路有反應。

按了后p1.0口有反應,但是p2口沒反應。。沒有變化成下面倆種模式,
回復

使用道具 舉報

ID:161164 發表于 2022-11-24 17:58 | 顯示全部樓層
代碼邏輯太混亂了
理一下邏輯,畫一畫流程圖
回復

使用道具 舉報

ID:1052650 發表于 2022-11-24 19:44 來自觸屏版 | 顯示全部樓層
lkc8210 發表于 2022-11-24 17:58
代碼邏輯太混亂了
理一下邏輯,畫一畫流程圖

終于找到哪里邏輯錯了。大佬有沒有優化的方法
回復

使用道具 舉報

ID:1049152 發表于 2023-1-12 14:59 | 顯示全部樓層
把你要實現的狀態分幾個函數寫好,定義一個變量,按一下按鍵變量加1,有幾種狀態就加到幾,大于之后清零如此循環。
回復

使用道具 舉報

ID:1049152 發表于 2023-1-12 15:00 | 顯示全部樓層
變量是幾就執行第幾個函數就行了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产自产 | 羞羞视频网站免费观看 | 中文字幕一区二区三区四区 | 荷兰欧美一级毛片 | 91精品国产综合久久精品 | 亚洲精品免费在线 | 精品中文字幕久久 | 亚洲第一成年免费网站 | 亚洲网站免费看 | 免费视频一区二区 | 欧美aaaa视频 | 羞羞在线观看视频 | 国产三级一区二区三区 | 亚洲成人一二区 | 免费麻豆视频 | 男人天堂av网站 | 日本xx视频免费观看 | 欧美日韩一区二区三区四区五区 | 成人a视频片观看免费 | 精品一区国产 | 久久国产精品一区二区三区 | 欧美一卡二卡在线观看 | 黄色av大片| 黄片毛片免费看 | 国产一区二区三区视频在线观看 | 一本一道久久a久久精品综合蜜臀 | 国产美女精品视频 | 美日韩一区二区 | 中文字幕亚洲欧美日韩在线不卡 | 色播视频在线观看 | 成人免费视频网站在线看 | 欧美自拍另类 | 国产欧美精品在线 | 日韩欧美中文字幕在线观看 | 69亚洲精品 | 伊人网综合在线观看 | 欧洲毛片| a级大片免费观看 | 成人欧美一区二区三区视频xxx | 亚洲欧美日韩系列 | 中文字幕日韩欧美一区二区三区 |