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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

關(guān)于單片機(jī)通過中斷切換led模式的問題?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:687423 發(fā)表于 2020-2-17 09:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這個(gè)程序現(xiàn)在可以通過按鍵k3切換led模式,但是只能在上一個(gè)模式程序執(zhí)行完之后才可以通過按鍵K3切換到下一個(gè)模式,我想知道如才可在上一個(gè)led模式執(zhí)行的時(shí)候,按下按鍵k3就可以切換到下一個(gè)模式,希望大家?guī)臀腋囊幌鲁绦颍疫想知道為什么按鍵的延時(shí)不能再中斷中使用,我中斷的程序關(guān)于對(duì)按鍵的處理對(duì)嗎,謝謝。
#include<reg52.h>
sbit beep=P1^5;
sbit k1=P3^1;
sbit k3=P3^2;
sbit led=P2^0;
#define N P2
typedef unsigned int ui;
typedef unsigned char uc;
uc num;
void delay(ui i)
{
while(i--);
}
void fmq()//蜂鳴器
{
beep=~beep;
delay(100);
}
void led0()//流水燈
{
N=0xff;
N=0xfe;
fmq();
delay(50000);
N=0xfd;
fmq();
delay(50000);
N=0xfb;
fmq();
delay(50000);
N=0xf7;
fmq();
delay(50000);
N=0xef;
fmq();
delay(50000);
N=0xdf;
fmq();
delay(50000);

N=0xbf;
fmq();
delay(50000);

N=0x7f;
fmq();
delay(50000);
  
}
void led1()//led對(duì)稱亮
{
N=0x7e;
fmq();
delay(35000);
delay(35000);
N=0xbd;
fmq();
delay(35000);
delay(35000);
N=0xdb;
fmq();
delay(35000);
delay(35000);
N=0xe7;
fmq();
delay(35000);
delay(35000);
N=0xe7;
fmq();
delay(35000);
delay(35000);
N=0xdb;
fmq();
delay(35000);
delay(35000);
N=0xbd;
fmq();
delay(35000);
delay(35000);
N=0x7e;
fmq();
delay(35000);
delay(35000);
}
void led2()//led分別單雙數(shù)亮
{
N=0xaa;
fmq();
delay(50000);
delay(50000);
N=0x55;
fmq();
delay(50000);
delay(50000);
}
void led3()//通過按鍵k1使led一個(gè)一個(gè)亮
{
ui i;
N=0xfe;
while(1)
{
  if(k1==0)
  {  
   delay(1000);
   if(k1==0)
   {
    switch(i)
    {
     case(0):N=0xfd;fmq();i++;break;
     case(1):N=0xfb;fmq();i++;break;
     case(2):N=0xf7;fmq();i++;break;
     case(3):N=0xef;fmq();i++;break;
     case(4):N=0xdf;fmq();i++;break;
     case(5):N=0xbf;fmq();i++;break;
     case(6):N=0x7f;fmq();i++;break;
     case(7):N=0xff;fmq();i++;break;
    }
   while(!k1);
   }
  }
  if(i==8)
  {
   i=0;
   break;
  }
}
}
void init()//中斷初始化
{
IT0=1;
EX0=1;
EA=1;
}
void main()
{
init();
while(1);
}
void init0() interrupt 0//中斷程序
{
EX0=0;
delay(1000);
{
  while(1)
  {
   if(k3==0)
   {
    EX1=0;
    switch(num)
    {
     case(0):led0();num++;break;
     case(1):led1();num++;break;
     case(2):led2();num++;break;
     case(3):led3();num++;break;
     case(4):num=0;N=0x00;break;
    }
   }
   while(!k3);
  }  
}
}

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

使用道具 舉報(bào)

沙發(fā)
ID:584814 發(fā)表于 2020-2-17 10:40 | 只看該作者
把中斷里的那個(gè)延時(shí)設(shè)短或去掉。
回復(fù)

使用道具 舉報(bào)

板凳
ID:94031 發(fā)表于 2020-2-17 10:59 | 只看該作者
中斷程序里只設(shè)置標(biāo)志,執(zhí)行放在main while循環(huán)里。
回復(fù)

使用道具 舉報(bào)

地板
ID:462827 發(fā)表于 2020-2-17 11:10 | 只看該作者
按鍵可以在主循環(huán)中輪詢置標(biāo)志位,比如流動(dòng)方向、速度呀等等,在定時(shí)器中斷中完成led的控制,不要在一次中斷中做完成所有動(dòng)作,而是每一次中斷只執(zhí)行該動(dòng)作的一個(gè)子狀態(tài)。
回復(fù)

使用道具 舉報(bào)

5#
ID:159575 發(fā)表于 2020-2-17 12:05 來自手機(jī) | 只看該作者
我當(dāng)年直接用了goto語(yǔ)句解決,方便快捷。
回復(fù)

使用道具 舉報(bào)

6#
ID:687423 發(fā)表于 2020-2-17 14:10 | 只看該作者
xuyaqi 發(fā)表于 2020-2-17 10:59
中斷程序里只設(shè)置標(biāo)志,執(zhí)行放在main while循環(huán)里。

我沒看懂你說的意思,能寫一下程序嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:687423 發(fā)表于 2020-2-17 14:12 | 只看該作者
hantu 發(fā)表于 2020-2-17 11:10
按鍵可以在主循環(huán)中輪詢置標(biāo)志位,比如流動(dòng)方向、速度呀等等,在定時(shí)器中斷中完成led的控制,不要在一次中 ...

什么意思,沒看懂。
回復(fù)

使用道具 舉報(bào)

8#
ID:687423 發(fā)表于 2020-2-17 15:20 | 只看該作者
我把程序改了一下,但還是不行,我想知道應(yīng)該怎么寫。
void init()
{
        IT0=1;
        EX0=1;
        EA=1;
}
void main()
{
        init();
        while(1)
        {
                if(num==1)
                        led0();
                if(num==2)
                        led1();
                if(num==3)
                        led2();
                if(num==4)
                        led3();
                if(num==5)
                        num=0;
        }       
}
void init0() interrupt 0
{
        delay(100);
        {       
                if(k3==0)
                        num++;
                while(!k3);
        }
}
回復(fù)

使用道具 舉報(bào)

9#
ID:94031 發(fā)表于 2020-2-17 22:45 | 只看該作者
。。jj 發(fā)表于 2020-2-17 14:10
我沒看懂你說的意思,能寫一下程序嗎

按你的要求編了一個(gè)程序。 通過中斷切換led模式.rar (39.37 KB, 下載次數(shù): 15)
回復(fù)

使用道具 舉報(bào)

10#
ID:688355 發(fā)表于 2020-2-19 08:34 | 只看該作者
。。jj 發(fā)表于 2020-2-17 15:20
我把程序改了一下,但還是不行,我想知道應(yīng)該怎么寫。
void init()
{

中斷里面的括號(hào)不對(duì)吧?你這樣試試
void init0() interrupt 0
{
        delay(100);
               
                if(k3==0)
                {        num++;
                while(!k3);
                 }
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色成人免费看 | 欧美成人精品欧美一级 | 狠狠躁夜夜躁人人爽天天高潮 | 国产视频久久久 | 99热在线免费 | 最新国产在线 | 精品国产一区二区三区在线观看 | 亚洲欧美一区二区三区情侣bbw | 亚洲精品久 | 欧美日韩福利视频 | 国产精品成人在线 | 中文字幕一区二区三区四区不卡 | 羞羞视频网 | 久久久久国产精品一区 | 日韩国产在线 | 亚洲视频中文 | a级黄色网| 国产精品精品视频一区二区三区 | 亚洲视频国产 | 国产1区2区3区 | 欧美日韩在线观看一区 | 久久国产精品精品国产色婷婷 | 操人视频在线观看 | 黄色精品 | 91嫩草精品 | 一区二区三区免费观看 | 成年人的视频免费观看 | 成年视频在线观看 | 欧美在线不卡 | 国产精品免费一区二区三区 | 巨大荫蒂视频欧美另类大 | 欧美日韩中文字幕在线 | 干干干操操操 | 中文日韩在线视频 | 99综合 | 日韩欧美一区二区三区免费观看 | 日本a∨视频 | 国产精品久久久久aaaa九色 | 日韩精品一区二区三区中文在线 | 美女在线视频一区二区三区 | 国产日韩一区二区三免费高清 |