单片机一个按键控制一个发光二极管

来源:百度知道 编辑:UC知道 时间:2024/06/22 06:11:35
单片机一个按键控制一个发光二极管,每按一次改变一次状态,用C语言和汇编语言实现。

以下是用C语言实现的:

#include<reg51.h>

sbit KEY=P1^0;
sbit LED=P1^1;

void delay();

void main()
{
while(1) //不断循环
{
if(KEY==0) //判断键盘是否被按下
{
delay(); //调用延时函数,作用消抖
if(KEY==0) //再次读键盘,以判断刚才判断到的是否为抖动
LED=~LED; //取反P1.1电平状态,也就是改变发光管的状态
}
}
}

void delay()
{
unsigned int i=50000;

while(i--); //不断循环的自减,直到i变为0
}

以下是用汇编实现的:

ORG 0000H
AJMP MAIN ;跳转到主程序
ORG 0100H
MAIN:JB P1.0,MAIN ;判断P1.0是否被按下,若不是则再判断,是则向下执行
CALL DELAY ;调用延时子程序,延时一段时间,用于键盘消抖
JB P1.0,MAIN ;再次判断按键状态,用于判断是否为抖动,不是则向下执行
CPL P1.1 ;取反P1.1,也就是改变一次发光二极管的状态
JNB P0.0,$ ;等待按键释放(等待P1.0电平变高)
AJMP MAIN

DELAY:
MOV R0,#200
LOOP: MOV R1,#200
DJNZ R1,$
DJNZ R0,LOOP<