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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

實驗例程--獨立按鍵如何增加更多的控制IO口

[復制鏈接]
跳轉到指定樓層
樓主
ID:353 發表于 2017-8-13 15:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
本帖最后由 yaofang1010 于 2017-8-14 10:39 編輯

想在實驗程序--獨立按鍵4路的基礎上增加至14路控制,修改后還是達不要求,求解應當如何修改?謝謝!

原程序如下:
#include<reg51.h>
#include<intrins.h>        

#define GPIO_LED P2                  //宏定義P2口
sbit K1=P1^4;                          //位操作
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;
sbit K5=P3^5;
void Delay10ms( );   //延時10ms

/*******************************************************************************
* 函 數 名         : main
* 函數功能                   : 主函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void main(void)
{

        
        while(1)
        {                 
                if(K1==0)                //檢測按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K1==0)
                        {
                                GPIO_LED = 0xfe;        //1111 1110 第一個燈亮
                        }
                }
               
                if(K2==0)                //檢測按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K2==0)
                        {
                                GPIO_LED = 0xfd;        //1111 1101 第二個燈亮
                        }
                }
               
                if(K3==0)                //檢測按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K3==0)
                        {
                                GPIO_LED = 0xfb;        
                        }
                }
               
                if(K4==0)                //檢測按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K4==0)
                        {
                                GPIO_LED = 0xf7;        
                        }
                }
               
                if(K5==0)                //檢測按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K5==0)
                        {
                                GPIO_LED = 0xef;        
                        }
                }               

        }                                
}
/*******************************************************************************
* 函 數 名         : Delay10ms
* 函數功能                   : 延時函數,延時10ms
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Delay10ms(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}


修改后的:
#include<reg51.h>
#include<intrins.h>        

#define GPIO_LED P0                  //宏定義P2口
#define GPIO_LED P2                  //定義P0口
sbit K1=P1^0;                          //位操作
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit K7=P1^6;
sbit K8=P1^7;
sbit K9=P3^2;
sbit K10=P3^3;
sbit K11=P3^4;
sbit K12=P3^5;
sbit K13=P3^6;
sbit K14=P3^7;
void Delay10ms( );   //延時10ms

/*******************************************************************************
* 函 數 名         : main
* 函數功能                   : 主函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void main(void)
{

        
        while(1)
        {                 
                if(K1==0)                //檢測按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K1==0)
                        {
                                GPIO_LED = 0x3ffe;        // 11111111111110第一個燈亮
                        }
                }
               
                if(K2==0)                //檢測按鍵K2是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K2==0)
                        {
                                GPIO_LED = 0x3ffd;        //11111111111101 第二個燈亮
                        }
                }
               
                if(K3==0)                //檢測按鍵K3是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K3==0)
                        {
                                GPIO_LED = 0x3ffb;        //11111111111011 第三個燈亮
                        }
                }
               
                if(K4==0)                //檢測按鍵K4是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K4==0)
                        {
                                GPIO_LED = 0x3ff7;        //11111111110111 第四個燈亮
                        }
                }

                if(K5==0)                //檢測按鍵K5是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K5==0)
                        {
                                GPIO_LED = 0x3fef;        //11111111101111 第5個燈亮
                        }
                }

                if(K6==0)                //檢測按鍵K6是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K6==0)
                        {
                                GPIO_LED = 0x3fdf;        //11111111011111 第6個燈亮
                        }
                }

                if(K7==0)                //檢測按鍵K7是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K7==0)
                        {
                                GPIO_LED = 0x3fbf;        //11111110111111第7個燈亮
                        }
                }

                   if(K8==0)                //檢測按鍵K8是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K8==0)
                        {
                                GPIO_LED = 0x3f7f;        //11111101111111第8個燈亮
                        }
                }

                   if(K9==0)                //檢測按鍵K9是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K9==0)
                        {
                                GPIO_LED = 0x3eff;        //11111011111111第9個燈亮
                        }
                }

                        if(K10==0)                //檢測按鍵10是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K10==0)
                        {
                                GPIO_LED = 0x3dff;        //11110111111111第10個燈亮
                        }
                }

                         if(K11==0)                //檢測按鍵K11是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K11==0)
                        {
                                GPIO_LED = 0x3bff;        //11101111111111第11個燈亮
                        }
                }

                        if(K12==0)                //檢測按鍵K12是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K12==0)
                        {
                                GPIO_LED = 0x37ff;        //11011111111111第12個燈亮
                        }
                }
                          
                           if(K13==0)                //檢測按鍵K13是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K13==0)
                        {
                                GPIO_LED = 0x2fff;        //10111111111111第13個燈亮
                        }
                }
                        
                if(K14==0)                //檢測按鍵K14是否按下
                {
                        Delay10ms();        //消除抖動
                        if(K14==0)
                        {
                                GPIO_LED = 0x1fff;                //10111111111111第14個燈亮
                        }
                }               

        }                                
}
/*******************************************************************************
* 函 數 名         : Delay10ms
* 函數功能                   : 延時函數,延時10ms
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Delay10ms(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}



使用距陣鍵盤后如下,已達到要求。如何在程序增加一路LED閃爍程序在里面呢?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[4]={0xFE,0xFD,0xFB,0xF7};
uchar scan()
{
uchar Temp=0;
uchar num=0,i=0;
for(i=0;i<4;i++)
{
P1=table;
Temp=P1& 0xF0;
if(Temp!=0xF0)
{
switch(Temp)
{Temp=P1;
case 0xE0: num=0;break;
case 0xD0: num=1;break;
case 0xB0: num=2;break;
case 0x70: num=3;break;
default: num=50;break;
}
break;
}
}
return num+4*i+1;
}
void display(uchar num1)
{switch(num1)
{
case 1:P2=0xfe;P3=0xff;break;   //1
case 2:P2=0xfd;P3=0xff;break;   //2
case 3:P2=0xfb;P3=0xff;break;  // 3
case 4:P2=0xf7;P3=0xff;break;  // 4
case 5:P2=0xef;P3=0xff;break;  // 5
case 6:P2=0xdf;P3=0xff;break;  // 6
case 7:P2=0xbf;P3=0xff;break;  // 7
case 8:P2=0x7f;P3=0xff;break;  // 8  
case 9:P2=0xff;P3=0xfe;break;  // 9
case 10:P2=0xff;P3=0xfd;break;  // 10
case 11:P2=0xff;P3=0xfb;break;  // 11
case 12:P2=0xff;P3=0xf7;break;  // 12
case 13:P2=0xff;P3=0xef;break;  // 13
case 14:P2=0xff;P3=0xdf;break;  // 14
case 15:P2=0xff;P3=0xbf;break;  // 15
case 16:P2=0xff,P3=0x7f;break;  // 16
default:break;  
};   
}
void main()
{char num1;  
while(1)   
{  
num1=scan();
display(num1);  
  }
}


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

使用道具 舉報

沙發
ID:218476 發表于 2017-8-13 23:40 | 只看該作者
矩陣鍵盤不好嗎?
回復

使用道具 舉報

板凳
ID:227474 發表于 2017-8-14 00:28 來自手機 | 只看該作者
用74hc138
回復

使用道具 舉報

地板
ID:353 發表于 2017-8-14 10:35 | 只看該作者

已使用距陣鍵盤解決問題,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩a在线| 国产成人福利 | 久久久久久久久久久久久91 | 91精品国产一区二区三区 | 日韩成人影院在线观看 | 可以在线看的黄色网址 | 成人性视频免费网站 | 美女黄网站视频免费 | 操视频网站 | 一区二区日韩 | 日韩a在线 | 午夜影院在线观看视频 | 亚洲成人一区二区 | 日日操日日干 | 国产一区二区欧美 | 欧美精品一二三区 | 亚洲国产一区在线 | 国产成人av免费看 | cao在线| 视频一区中文字幕 | 精品福利一区二区三区 | 91视频一区二区三区 | 欧美国产日韩在线观看成人 | 97国产成人| 国产精品免费观看 | 国产91久久久久久久免费 | 国产a视频 | 中文字幕日韩在线 | 久久精品久久精品 | 日韩中文字幕在线视频观看 | 亚洲精品免费在线 | www.亚洲精品 | 国产视频2021| 激情一区二区三区 | 亚洲欧美综合精品另类天天更新 | 美女激情av | 国产毛片av | 成人黄视频在线观看 | 久久影音先锋 | 久久精品视频一区二区 | 亚洲一区二区三区免费在线观看 |