通过查询原理图 得到
#include "reg52.h"
sbit key1 = P2^1;
sbit led1 = P3^7;
sbit key2 = P2^0;
void main()
{
//查询是否被按下
while(1){
if (key1 == 0){
led1 = 0;//灯亮 给P3.7一个低电平
}
if(key2 == 0){
led1 = 1; // 灯灭 给P3.7一个高电平
}
}
当硬件松动的时候 可能一个不轻易的抖动就会改变单片机的状态,这在实际应用中是非常危险的
因此最好给它加上一个软件消抖
利用软件延迟计算器 得到延时
void Delay50ms() //@11.0592MHz
{
unsigned char i, j;
i = 90;
j = 163;
do
{
while (--j);
} while (--i);
}
#include "reg52.h"
sbit key1 = P2^1;
sbit led1 = P3^7;
sbit key2 = P2^0;
void Delay50ms() //@11.0592MHz
{unsigned char i, j;i = 90;j = 163;do{while (--j);} while (--i);
}void main()
{//查询 是否被按下while(1){if (key1 == 0){ // 感觉被按下Delay50ms(); //软件消抖if(key1 == 0){led1 = 0;// 灯亮 给3.7一个低电平}}if(key2 == 0){ // ¸感觉被按下Delay50ms(); //软件消抖if(key2 == 0){led1 = 1; // 灯灭,给3.7一个高电平}}}
IO口反转 通过一个按键来控制一个LED的亮灭
#include "reg52.h"
sbit key1 = P2^1;
sbit led1 = P3^7;
sbit key2 = P2^0;
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
led1 = 1;
while(1){
if (key1 == 0){ // ¸检测是否按下
Delay500ms(); //延时
if(key1 == 0){
led1 = !led1;// 按下按键后 反转状态
}
}
}
}