开篇先说一句废话····
本旺名字叫萨摩耶,,Please 叫我旺财,,,哈哈,招财进宝嘛!
独立按键
之前是电脑输入,让单片机输出,而这个独立按键则是单片机上输入并作出相应的反应,本旺在学习这一部分内容之前是非常激动的。
那啥是个独立按键呢?轻触开关是一个电子开关,使用的时候轻轻按下按键就会使开关接通,松开手之后开关断开。下面是独立按键的照片。
根据上图,应该有四个管脚,其中一个在后面,前面的左,中,右三个管脚中,左边和中间的管脚(下图中的3和4)相对较近,中间和右边的管脚(下图中的2和4)相对较远。
相对较远的两个管脚(1和3,2和4)初始是导通的,而相对较近的两个管脚(1和2,3和4)初始是断开的。当把按键按下去的时候,原本断开的管脚现在接通。
这四个按键的同一端都接地,当按键按下去后,低电平接入P3口,所以判断按键是否按下就是判断对应端口是否是低电平(0)。
还有一个问题就是按键的抖动。因为按键是人为按下的,会出现暂时的抖动,然后进入稳定状态。
而消抖的方法有两种,一是:硬件消抖,其实就是在接一个电容,前沿抖动和后沿抖动这段时间用电容的充电和放电来消除;二是:软件消抖,因为前沿和后沿抖动这段时间用延时函数来消抖。
独立按键控制LED的亮灭
当按键按下时,LED亮,再次按下时,LED灭。
#include "reg52.h"
sbit k1=P3^1; //k1按键
sbit led=P2^0; //D1
void Delay(u16 n) //@11.0592MHz
{
while(n--){
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main(){
if(k1==0){
Delay(100); //消抖
if(k1==0){
led=~led;
}
while(!k1);
}
}
同理,可以用独立按键控制数码管的显示。
/*
其他同上,只写端口定义和主函数内容
*/
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;
void main()
{
LSA=1;LSB=1;LSC=1; // 第一个数码管
while(1)
{
if(k1==0)
{
Delay(100);
if(k1==0)
P0=0x7f;
else
P0=0x00;
}
}
}