zoukankan      html  css  js  c++  java
  • 二、单片机学习——独立按键实验

    实验目的:掌握 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();          //处理扫描结果
          }        
    }
  • 相关阅读:
    简化窗口的控制和异常处理的复杂性
    集合运算 字典排序 按值 按键
    单条insert
    Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=
    反黑
    curl HTTP_USER_AGENT
    location.replace
    提升600百万数据的处理速度 禁止图片下载
    https://security.stackexchange.com/questions/68405/what-is-tmunblock-cgi-and-can-it-be-exploited-by-shellshock-linux-apache-w
    逻辑分离
  • 原文地址:https://www.cnblogs.com/breads/p/12684703.html
Copyright © 2011-2022 走看看