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();          //处理扫描结果
          }        
    }
  • 相关阅读:
    ajax提交转码解码
    关于idea开发工具常用的快捷键
    oracle 查询某个时间段数据
    hibernate : object references an unsaved transient instance 问题
    log4j日志
    JS关键字 import
    代码正常,junit却报错原因及解决方法
    hdu 5868 Polya计数
    hdu 5893 (树链剖分+合并)
    hdu 5895 广义Fibonacci数列
  • 原文地址:https://www.cnblogs.com/breads/p/12684703.html
Copyright © 2011-2022 走看看