用单片机仿真软件Proteus实现按钮控制LED亮灭

编程实现用LED指示单个按钮的状态

步骤:

(1)编程实现:按下按钮S1 发光二极管发光,放开按钮发光二极管熄灭;

(2)保存到“单片机练习三”文件夹中,命名为“LED指示按钮状态”;

(3)用仿真软件设计原理图,并进行仿真;

(4)把仿真结果保存到“单片机练习三”文件夹中,命名为“LED指示按钮状态”。

参考程序一:

ORG 0000H

START: JB P1.0, LOOP ;P1.0 口为低电平时,执行下一条指令,即执行CLR P0.0

CLR P0.0 ;P1.0 口为高电平时,跳转到LOOP 开头的指令,即执行

SETB P0.0

LJMP START

LOOP: SETB P0.0 ;P0.0 口输出高电平,即二极管熄灭

LJMP START

END

程序参考二:

/***********************************************************************************************************************************************

按一下灯亮,按一下灯灭

***********************************************************************************************************************************************/

#include<reg52.h>

sbit S1=P1^0; //将S1位定义为P1^0,检测独立按键

sbit led0=P0^0; //将led0定义为P0.0口的LED

/***********************************************************************************************************************************************

延时函数

***********************************************************************************************************************************************/

void delay(void)

{

unsigned int i;

for(i=5000;i>0;i–)

;

}

/***********************************************************************************************************************************************

主函数

***********************************************************************************************************************************************/

void main(void)

{

while(1)

{

if(S1==0) //判断是否有键按下

{

delay(); //有键按下,延时去抖,真正应用时要少用这种延时,占用时间,用定时器延时或一个寄存器循环检测10多次按键

if(F0==0) //用F0标志位判断键按下是否已经处理,因刚学C语言没多久,

//不知道怎么定义RAM能位寻址的寄存器,先用F0,按键多的话,一个F0不够用

{

F0=1; //F0置1,表示这次按键按下已处理

led0=~led0; //将LED亮灭状态取反

}

}

else //S1=1说明按键释放

{

F0=0; //F0清零,清按键已处理标志

}

}

}

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年10月3日
下一篇 2017年10月3日

相关推荐