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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教一個問題:51單片機用外部中斷通過矩陣按鍵控制led的亮滅

[復制鏈接]
跳轉到指定樓層
樓主
請教一個問題:51單片機用外部中斷通過矩陣按鍵控制led的亮滅。想要達到目的:每一次按鍵被觸發,LED的狀態翻轉一次。
單片機電路圖如下:

我自己寫的程序如下:下載后單片機的效果是按下按鍵led小燈點亮,一直保持著點亮的狀態。請問怎樣修改或者怎樣優化程序?讓它變成每按一次,led的狀態翻轉一次。

#include <reg52.h>
sbit LED = P0^0;
sbit wai = P3^2;
sbit key = P2^7;


void main(void)
{
        int i;
        P2 = 0XF7;        //矩陣按鍵變為獨立按鍵
        P0 = 0x00;        //熄滅led
        IT0 = 1;                //下降沿觸發
        EX0 = 1;                //開啟INT0中斷
        EA = 1;                        //開啟總中斷        
        if(key == 0)
        {
                for(i=0;i<1000;i++);      //按鍵消抖
                if(key==0)
                {
               
                        wai = 0;                //令P3^2引腳電平為0,下降沿出發外部中斷
                        while(1);
                          
                }
          }
         
}


void int0_process() interrupt 0
{        
        unsigned int i;
        if(key == 0)
        {
        for(i=0;i<1000;i++);
        LED = ~LED;                        
        }
        key = 0;
}



%DMS%3`NF_JA[FLQ0JV(`OV.png (64.48 KB, 下載次數: 54)

%DMS%3`NF_JA[FLQ0JV(`OV.png

C5$EXTE~AEARDAK]4BN50PP.png (202.55 KB, 下載次數: 59)

C5$EXTE~AEARDAK]4BN50PP.png

BYN31J)G6$0KQ][RD(0V}4B.png (40.94 KB, 下載次數: 29)

BYN31J)G6$0KQ][RD(0V}4B.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:332444 發表于 2020-6-26 07:49 | 只看該作者
中斷函數內多余代碼去掉,保留LED取反試看,按鍵代碼無限循環去掉。
回復

使用道具 舉報

板凳
ID:332444 發表于 2020-6-26 07:55 | 只看該作者
按鍵代碼要包含在無限循環中,不是無限循環被按鍵代碼包含。
回復

使用道具 舉報

地板
ID:332444 發表于 2020-6-26 09:12 | 只看該作者
  1. #include <reg52.h>
  2. sbit LED = P0^0;
  3. sbit wai = P3^2;
  4. sbit key = P1^7;
  5. void main()
  6. {
  7.         int i;
  8.         P1 = 0XF7;        //矩陣按鍵變為獨立按鍵
  9.         P0 = 0x00;        //熄滅led
  10.         IT0 = 1;                //下降沿觸發
  11.         EX0 = 1;                //開啟INT0中斷
  12.         EA = 1;                        //開啟總中斷  

  13.         while(1)
  14.         {
  15.         if(key == 0)
  16.         {
  17.                 for(i=0;i<1000;i++);      //按鍵消抖
  18.                 if(key==0)wai = 0;                //令P3^2引腳電平為0,下降沿出發外部中斷
  19.                                 }
  20.         wai = 1;
  21.         }
  22. }
  23. void int0_process() interrupt 0
  24. {        
  25.         unsigned int i;
  26.         for(i=0;i<1000;i++);
  27.         LED = ~LED;                        
  28. }
復制代碼
回復

使用道具 舉報

5#
ID:332444 發表于 2020-6-26 09:16 | 只看該作者
代碼按我的電路修改了,僅供參考。
回復

使用道具 舉報

6#
ID:789846 發表于 2020-6-26 12:25 | 只看該作者
xianfajushi 發表于 2020-6-26 09:16
代碼按我的電路修改了,僅供參考。

可以了,現在明白了,謝謝你
回復

使用道具 舉報

7#
ID:789846 發表于 2020-6-26 12:34 | 只看該作者

感謝你了,我一直困在循環這里搞不明白,自己摸索了兩天都搞不明白,現在懂了,看了代碼后恍然大悟
回復

使用道具 舉報

8#
ID:789846 發表于 2020-6-26 12:36 | 只看該作者
void int0_process() interrupt 0
{        
        unsigned int i;
        for(i=0;i<1000;i++);
        LED = ~LED;
                     
}
回復

使用道具 舉報

9#
ID:1064915 發表于 2023-3-9 17:30 | 只看該作者
for(i=0;i<1000;i++);
延時時間怎么計算?
回復

使用道具 舉報

10#
ID:332444 發表于 2023-3-9 21:10 | 只看該作者
15818463972 發表于 2020-6-26 12:34
感謝你了,我一直困在循環這里搞不明白,自己摸索了兩天都搞不明白,現在懂了,看了代碼后恍然大悟

不過不管如何都不建議在中斷里面使用循環,為了說明問題,勉強修改,中斷里面可以使用變量累加判斷。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 狠狠干网 | 精品国产一区二区国模嫣然 | 亚洲精品电影在线观看 | 色综合久久天天综合网 | 久久99精品久久久 | 国产成人麻豆免费观看 | 在线一区二区三区 | 精品久久久久久久久久久久久 | 欧美激情精品久久久久 | 久久专区| 久久久久亚洲精品中文字幕 | 精品免费 | 在线中文视频 | 亚洲视频一区在线播放 | 先锋影音资源网站 | 亚洲一级二级三级 | a免费视频| 欧美一区久久 | 久久国产区| 亚洲成人www| 国产精品视频网 | 91欧美激情一区二区三区成人 | 国产在线一级片 | 欧美一页 | 97日日碰人人模人人澡分享吧 | 欧美最猛性xxxxx亚洲精品 | 久久精品一区二区三区四区 | aaaaaaa片毛片免费观看 | 一级毛片高清 | 午夜影院在线播放 | 国产美女自拍视频 | 一区亚洲| 毛片免费在线观看 | 视频二区| 欧美一区二区在线观看 | 国产精品福利网 | 久久久久久国产精品免费免费 | 日韩一区二区三区在线看 | 水蜜桃亚洲一二三四在线 | 精品欧美一区二区三区久久久 | 日本不卡一区 |