单片机STC89C52,P0.1口作为按钮,P1.0连接灯,要求按钮控制灯的亮灭。请设计硬件连接方式和C程序 20
图我就随便画了,暂时没有专业工具。
#include <reg52.h>
sbit KEY = P0^1; //定义按键 按键按下时引脚为低
sbit LED = P1^0; //定义LED脚, 当P1^0为低时 灯亮
void delayms(unsigned int times ) //毫秒延时
{
unsigned int i,j;
for(j=0;j<times;j++)
{
for(i=0;i<400;i++)
;
}
}
void main()
{
KEY=1;
LED=1; //初始化按键和灯
while(1)
{
if(KEY==0)
{
delayms(15); //延时15-20MS去抖动
if(KEY==0) LED=0; //此时按键还是低电平表示被按下,灯亮
}
else LED=1; //否则灯不亮
}
}
程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint x)
{
uchar a,b;
for(a=100;a>0;a--)
for(b=x;b>0;b--);
}
void main()
{
while(1)
{
if(P0=0xfe)
{
P1=0x00;
}
else P1=0xff;
}
}
#include "reg52.h"
#include <intrins.h>
#define uchar unsigned char // 为后面编写方便,将 unsigned char 定义为 uchar
sbit KEY = P0^1; // P0.1按钮
sbit LED = P1^0; // P1.0灯
/*******按键消抖延时程序20ms(晶振=12MHz)******************/
void delay()
{
uchar i,j;
for(i=0; i<20; i++)
for(j=0; j<249; j++)_nop_();
}
/**************************主程序***************************/
void main()
{
LED = 1; //初始化灯灭
while(1)
{
if(KEY==0) //判断按键是否按下
{
delay();
if(KEY==0)
{
while(~KEY); //等待按键释放
LED=~LED; //P1.0电平取反
}
}
}
}