二、單片機學習——獨立按鍵實驗


實驗目的:掌握 led 燈的點亮原理;
     理解並掌握獨立按鍵的操作原理及操作方法;
實驗模塊:核心板+8 位流水燈與獨立按鍵模塊
實驗內容:用按鍵控制對應的 led 燈點亮,即第一個按鍵按下點亮第一個 led
     燈,點亮后不熄滅;第二個按鍵按下點亮第二個 led 燈,第三個按鍵按下點亮第
       三個 led 燈,第四個按鍵按下熄滅所有的 led 燈。

模塊連接圖:

 

 

電路原理圖:

 

功能描述: 當按下S17~S21中的任一個按鍵,有對應的LED被點亮
硬件連接:  用8位杜邦線將J8與J13連接,
            用5位杜邦線將J9_7與J7_s17、J9_6與J7_s18、J9_5與J7_s19、J9_4與J7_s20、J9_3與J7_s21

實驗源碼:

#include "reg51.h"       //包含頭文件
sbit s17=P3^7;           //定義S17按鍵控制IO
sbit s18=P3^6;           //定義S18按鍵控制IO
sbit s19=P3^5;           //定義S19按鍵控制IO
sbit s20=P3^4;           //定義S20按鍵控制IO
sbit s21=P3^3;           //定義S21按鍵控制IO
#define uchar unsigned char
#define uint  unsigned int
uchar keyValue;          //定義掃描結果參數
//**************************************************************************************************
//延時函數
//**************************************************************************************************
delay(uint time)              //int型數據為16位,所以最大值為65535           
 {
  uint  i,j;                  //定義變量i,j,用於循環語句
  for(i=0;i<time;i++)         //for循環,循環50*time次
     for(j=0;j<50;j++);       //for循環,循環50次
 }
//**************************************************************************************************
//1*5按鍵掃描函數
//**************************************************************************************************
keyScan()                            
 {
   P3=P3|0xf8;                //P3高5位置1,設置為輸入
   if((P3&0xf8)!=0xf8)        //判斷是否有按鍵按下
    {
     delay(20);               //延時肖抖
     if((P3&0xf8)!=0xf8)      //再次判斷是否有按鍵按下
       keyValue=(P3&0xf8);    //讀取掃描結果
    }
 }
//**************************************************************************************************
//1*5按鍵掃描結果處理函數
//**************************************************************************************************
keyHandle()                    
 {     
        switch(keyValue)        
          {
            case 0x78:           //如果S17按鍵按下 
    {
                 P1=~0x01;       //點亮一個發光二極管 
                 break;         
                }
            case 0xb8:           //如果S18按鍵按下
    {
                 P1=~0x02;       //點亮一個發光二極管 
                 break;
                }
            case 0xd8:           //如果S19按鍵按下
    {
                 P1=~0x04;       //點亮一個發光二極管 
                 break;
                }
            case 0xe8:           //如果S20按鍵按下
    {
                 P1=~0x08;       //點亮一個發光二極管 
                 break;
                }
            case 0xf0:           //如果S21按鍵按下
    {
                 P1=~0x10;       //點亮一個發光二極管 
                 break;
                }
            default:
     break;
          }
 }
//**************************************************************************************************
//主函數
//**************************************************************************************************
void main()                   //主函數
{
   
     while(1)                 //進入while死循環
      {
        keyScan();            //按鍵掃描
        keyHandle();          //處理掃描結果
      }        
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM