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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1789|回復: 5
收起左側

學習單片機按鍵中斷功能切換看了一段代碼有地方無法理解

[復制鏈接]
ID:960619 發表于 2021-8-19 18:08 | 顯示全部樓層 |閱讀模式
請教下,這單片機代碼中的P0起到什么作用?


#include<reg52.h>//#include "stc8.h"//

sbit beep=P1^5;
sbit k1=P3^1;
sbit k3=P3^2;//外部中斷0 p32
sbit led=P2^0;
#define N P2

unsigned char num;
unsigned char aa;

void delay(unsigned int i)
{
        while(i--);
}
void fmq()//蜂鳴器
{
        beep=~beep;
        delay(100);
}
void led0()//流水燈
{
        N=0xff;
        N=0xfe;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;
        
        N=0xfd;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;
        
        N=0xfb;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;
        
        N=0xf7;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;
        
        N=0xef;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;
        
        N=0xdf;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;

        N=0xbf;
        fmq();
        delay(50000);
        if(num!=0){return;}
        P0=0xfe;

        N=0x7f;
        fmq();
        delay(50000);
        
        
  if(num!=0){return;}
        P0=0xfe;
}

void led1()//led對稱亮
{
        while(1)
        {
                N=0x7e;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0xbd;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0xdb;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0xe7;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0xe7;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0xdb;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0xbd;
                fmq();
                delay(35000);
                //delay(35000);
                if(num!=1){break;}
                P0=0xfc;
               
                N=0x7e;
                fmq();
                delay(35000);
                //delay(35000);
               
                if(num!=1){break;}
                P0=0xfc;
  }
}
void led2()//led分別單雙數亮
{
        while(1)
        {
                N=0xaa;
                fmq();
                delay(50000);
                delay(50000);
                if(num!=2){break;}
                P0=0xf8;
               
                N=0x55;
                fmq();
                delay(50000);
                delay(50000);
                P0=0xf8;
                if(num!=2){break;}
                P0=0xf8;
}
        
}
void led3()//通過按鍵k1使led一個一個亮
{
        unsigned int i;
        N=0xfe;
        while(1)
        {
                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;}
                P0=0xf0;
                if(num!=3){break;}
        }
}

void init()//中斷初始化
{
        IT0=1;//外部中斷0 跳變觸發
        EX0=1;//外部中斷0 p32
        EA=1;
}
void main()
{
               
        init();
        
        while(1)
        {
               
                        switch(num)
                        {
                         case(0):led0();
                                       P0=0xfe;
                                      break;
                         case(1):led1();
               P0=0xfc;                                
                                      break;
                         case(2):led2();
                                       P0=0xf8;
                                       break;//num++;
                         case(3):led3();
                                       P0=0xf0;
                                        break;
                        
                        }
                        
        }
        
}
               
void init0() interrupt 0//中斷程序 k3
{
        //EX0=0;
        
        if(num==0){P0=0xfe;}
        num=num+1;
        
        if(num==1){P0=0xfc;}
        if(num==2){P0=0xf8;}
        if(num==3){P0=0xf0;}
        
  if(num>3){num=0;}
        
        //EX0=1;
}

回復

使用道具 舉報

ID:235200 發表于 2021-8-19 18:58 | 顯示全部樓層
P0接有8個發光二極管,通過按鍵的次數(中斷)改變P0口所接發光二極管的顯示狀態
回復

使用道具 舉報

ID:960619 發表于 2021-8-19 19:45 | 顯示全部樓層
csmyldl 發表于 2021-8-19 18:58
P0接有8個發光二極管,通過按鍵的次數(中斷)改變P0口所接發光二極管的顯示狀態

噢,懂了。他這個是按鍵一次點亮一個PO口,就是模式切換的指示燈
回復

使用道具 舉報

ID:303735 發表于 2021-8-20 08:32 | 顯示全部樓層
感覺有點復雜
回復

使用道具 舉報

ID:584195 發表于 2021-8-20 09:33 | 顯示全部樓層
你這個delay全是阻塞式的,會不會效果不好呀!
回復

使用道具 舉報

ID:960619 發表于 2021-8-20 19:57 | 顯示全部樓層
zyluglugl 發表于 2021-8-20 09:33
你這個delay全是阻塞式的,會不會效果不好呀!

啥是阻塞式?這不是我寫的,論壇上看到的,我拿來學習的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产农村妇女精品一区 | 免费观看av| 91精品久久久久久久久久 | 精品国产乱码久久久久久老虎 | 国产欧美一区二区三区久久 | 欧美在线 | 免费观看黄色一级片 | 精品国产一区二区三区在线观看 | 一呦二呦三呦国产精品 | 久久精品国产久精国产 | 久久久91 | 特一级毛片 | 国产精品久久久久久久久久久久久久 | 国产亚洲精品精品国产亚洲综合 | 91视频久久 | 日韩视频在线免费观看 | 日韩av在线一区二区 | 日批免费看 | 亚洲综合在线一区 | 亚洲乱码一区二区三区在线观看 | 国产在线精品一区二区 | 麻豆一区一区三区四区 | 久久精品亚洲欧美日韩精品中文字幕 | 久久精品伊人 | 国产精品免费一区二区三区四区 | 全免费a级毛片免费看视频免费下 | 欧美日韩精品久久久免费观看 | 福利视频三区 | 日本三级全黄三级a | 久久久久国产精品一区二区 | 国产日韩视频 | 欧美精品电影一区 | 日韩av在线免费 | 最新日韩在线 | 久久精品亚洲欧美日韩精品中文字幕 | 能免费看的av | 成人网在线看 | 天天操网 | 久久免费精品 | 国产成人精品免费 | 欧美一区二区三区四区五区无卡码 |