...当P1.0按键按下时,P1.6和P1.7两个管脚所接的LED灯轮流发光,要求延时1...
发布网友
发布时间:2024-03-27 02:16
我来回答
共3个回答
热心网友
时间:2024-04-15 19:29
请给邮箱~
求一个C程序,当P1.0按键按下时,P1.6和P1.7两个管脚所接的LED灯轮流发光,要求延时10秒,再按下按键全灭
------》此程序流程
---->首先判断按键是否按下,即主函数循环while(1)判断是否按键按下
------>按下,则进入防抖动判断,如符合,则开始进入轮流切换状态
---->状态,初始,其中一个亮另一个灯灭。10秒过后再切换状态,其中,加入一个指令
既,判断按键是否再次按下,若按下则给两个灯低电平,退出本次轮流切换状态
------》退出后,再次进入主函数,,即主函数循环while(1)判断是否按键按下
#include<reg51.h>
unsigned char counter;
sbit control_s=P1^0;
sbit Led1=P1^6;
sbit Led1=P1^7;
//**** ********* *****
//**** 中断服务 ******
//**** ********* *****
void set_state()
{
TMOD=0x01; //选择工作方式1
TH0=0x3c;
TL0=0xb0;
ET0=1; //打开定时器0
TR0=1; //定时器0中断模式
EA=1; //中断总控制
}
void switch_led();//换灯函数声明;
//**** ********* *****
//**** 主函数 ******
//**** ********* *****
void main()
{
void set_state(); //打开中断服务
while(1); //开始循环1,等待按键
{
if(control_s== 0) //当按键按下,防抖动
{
delay_time(10); //延迟
if( control_s==0) switch_led(); //再次判断,符合则进入轮流发光
}
}
}
//**** ********* *****
//**** 定时器0中断服务 ******
//**** ********* *****
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
counter++;
if(counter>19) {counter= 0; s++;}
}
//**** ********* *****
//**** 轮流发光函数 ******
//**** 切换间隔10s *****
void switch_led()
{
Led1=0; //让Led1暗
Led2=1; //让Led2亮
while(1) //开始循环
if(s>9) //s从0-9,10次,一次1s
{
s= 0;
Led1=~Led1; //取反状态,当Led1=1时,则~Led1=0;
Led2=~Led2; //同上
if( control_s==0){Led1= 0; Led2= 0;break; } //按键再次按下,灯熄灭,退出此函数回到主函数循环1。
}
}
因为没有说明问题的过程,可以简单些,用楼上的,只不过,楼上的估计和我一样吧,弄不清这延时10秒在哪体现,干脆省了这10秒,嘿。
化雨眠 | 三级
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit a=P1^0;
void delay(uint x)
{
uint i , j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
if(a==0)
{
delay(10);
if(a==0)
{
P1^6=0;
delay(50);
P1^6=1;
delay(50);
P1^7=0;
delay(50);
P1^7=1;
delay(50);
}
}
}
}
热心网友
时间:2024-04-15 19:29
你把延时说清楚点,是每一个灯亮十秒,还是两个灯各亮一次后延时,还是一共就闪十秒?
热心网友
时间:2024-04-15 19:31
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit a=P1^0;
void delay(uint x)
{
uint i , j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
if(a==0)
{
delay(10);
if(a==0)
{
P1^6=0;
delay(50);
P1^6=1;
delay(50);
P1^7=0;
delay(50);
P1^7=1;
delay(50);
}
}
}
}
求一个C程序,当P1.0按键按下时,P1.6和P1.7两个管脚所接的LED灯轮流发光...
求一个C程序,当P1.0按键按下时,P1.6和P1.7两个管脚所接的LED灯轮流发光,要求延时10秒,再按下按键全灭 ---》此程序流程 --->首先判断按键是否按下,即主函数循环while(1)判断是否按键按下 --->按下,则进入防抖动判断,如符合,则开始进入轮流切换状态 --->状态,初始,其中一个亮...
51单片机:用P1.0~P1.6 口控制LED,P1.7 控制LED 的亮和灭(P1.7 接按键...
include<reg51.h> sbit key=P1^7;main(){ while(1){ while(key==0) P1=P1&0x80;P1=P1|0x7f;} }
求汇编语言程序:8个开关p0.0——p0.7分别控制8个灯p1.0——p1.7,
JB P0.0,LOOP1 ;第一个键没按转下一个 JNB P0.0,$ ;第一键按下则等抬起 CPL P1.0 ;第一个灯如果开始灭则点亮,开始亮则灭 LOOP1: ;以下与此类似,不做注释。JB P0.1,LOOP2 JNB P0.1,CPL P1.1 LOOP2:JB P0.2,LOOP3 JNB P0.2,CPL P1.2 LOOP3:JB P0....
单片机流水灯程序设计,p1.0和p1.7一起点亮,然后是p1.1和p1.6...要...
START:clr P1.0 CLR P1.7 ACALL DELAY SETB P1.0 SETB 1.7 clr P1.1 CLR P1.6 ACALL DELAY SETB P1.1 SETB 1.6 clr P1.2 CLR P1.5 ACALL DELAY SETB P1.2 SETB 1.5 clr P1.3 CLR P1.4 ACALL DELAY SETB P1.3 SETB 1.4 SJMP START DELAY:MOV R3,#0FFH DE...
用单片机P1.0和P1.7作输出,分别接小喇叭和发光二极管
所以,我们就设计了我们的第一个作品,基于单片机的液体点滴监控系统。做这个系统时,就将以前单片机所学的知识,做了一个综合的应用,包括有LCD1602控制,串口的控制等。经过以上三个步骤的学习之后,对于51单片机的开发基本上就算入门了。而对于其他类型的单片机,如飞思卡尔单片机,LPC2148 ARM7单片机,...
51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频 ...
LED BIT P1.7 ORG 0000H LJMP MAIN ORG 0100H MAIN: SETB LED ;LED 灭 LL1: JB KEY , LL1 ;等待按键第一次按下 LCALL YS ;延时去抖 JB KEY,LL1 ;按键第一次按下 则往下执行 LL12: MOV TMOD,#10H MOV TH1, ...
单片机按钮按一下灯从下面亮起
若同时按下两个以上的按钮,则对应的发光二极管发亮。例如按下SB1和SB3,则对应的输出端口P1.4和P1.6输出为低电平,对应的发光二极管LED1、LED3发亮。(1)按钮控制灯亮硬件电路(见图11)。图11 按钮控制灯亮接线原理图 (2)按钮控制灯亮硬件电路元器件(见表3)。表3 按钮控制灯亮硬件电路元器件表...
用单片机P1.0和P1.7作输出,分别接小喇叭和发光二极管。P3.0和P3.1作输...
1 2个按键的判别顺序是先判断K1再判断K2,即当K1接低电平时,小喇叭发声报警 (报警优先)2 只有当没有预警时,才能去查询K0的状态,当K0为高电平,表示系统没工作(不显示)当K0为低电平,表示系统工作了(发光二极管交替亮、灭 即闪亮)3 不断地重复执行1和2的步骤,就可以实现你的...
发光二极管L0-L7分别连接在单片机的输出口P1.0-P1.7,一个按钮开关连接在...
假设使用51系列单片机 简单程序如下:DAT1 equ 02eH ORG 0000 JMP SHART ...START: MOV P1,#00H(CLR P1.0-1.7)MOV DAT1,#00h ...START1: MOVE A,P2 JNB ACC.0,STP1 INC DAT1 STP1: MOV A,DAT1 MOV P1,A JMP START1 ...END ...
1、用Proteus软件画出电路原理图。要求在P1.0至P1.7口 线上分别接LED...
v cv gv