(三)开关检测来控制LED灯的亮灭

开关检测案例一:

具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭

 

产生的问题:  

1、关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话,  比如10K 不管开关断开还是闭合,好像都没什么用,电阻上部分电流被拉低,一直为低电平,虽然仿真对,但终究有问题

倘若选择一般大,则为灰色,表示电平不确定,最后不得已选择 20Ω 电阻,电平可以确定,开关闭合,电平拉低,那么实际电路中, 电阻的取值究竟怎样呢????

2、需要掌握 按位与 的用法

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

       即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

————————————————————————————————————————————————————————————————————————————————————————————

参考程序如下以及电路图:

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 

/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            *******************/
void DelayMs(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{
    

  while(1)
  {
     uchar8 temp;   
     LED=0xff;      //  P1.1—P1.3 置1 高电平 ,LED熄灭  ,高四位默认高电平,作为输入

     temp=P1&0xf0;     // 读 P1口 ,并且屏蔽其低四位,送入temp
     temp=temp>>4;     // temp内容 右移四位,也就是说 P1口高4位状态移动至低四位 ,两者状态一样
     LED=temp;         // temp 的数据送 P1口输出
     DelayMs(1000);
     
    
  }

}

 

 

 

开关检测案例二:

 

参考程序代码:(目的: 通过 K1 K2 按键的组合00 01 10 11 来控制 LED 的灯的亮灭)

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 

void main()
{
    

   uchar8  state;
   
   do
   {
      
      P2=0xff;      // 设置 P2口输入
      state=P2;      // 读 P2口的状态,送入 state
      state=state&0x03;     // 屏蔽 高6位

      switch(state)
      {
         case 0 :  LED=0xFE;break;          // 14   0x0e     1110
         case 1:  LED=0xFD;break;          //  13 0x0d     1101
         case 2:  LED=0xFB;break;          //  11  0x0b     1011
         case 3:  LED=0xF7;break;          //  7   0x07     0111
       
      }
    
    }while(1);   


}

 

 

 

 

 

 

 

 

posted on 2015-12-23 15:52  无悔这一生。  阅读(1243)  评论(0编辑  收藏  举报

导航