51单片机使灯闪烁,我写的程序按一下开始闪烁,在按一下为什么不能熄灭呢???

51单片机使灯闪烁,我写的程序按一下开始闪烁,在按一下为什么不能熄灭呢???,第1张

void main()

{

L1=0

if(K1==0) //1 按键按下

{

Delay10ms() //2 延时去抖动

if(K1==0) //3 确认按下

{

L1=0 //4 以下4句闪烁一次

Delay(1000)

L1=1

Delay(1000)

}

while(1) //5 这里死循环,不能再执行上面的语句了。

{

while(!K1) //6 判断按键是否按下,如果按下,则延时10ms,再判断是否按下,一致循环,知道你松开手。

{

Delay10ms()

}

while(!K1) //7 按键按下话,一致死等,直到你松开手

{ //8 下面闪烁一次。

L1=0

Delay(1000)

L1=1 // 9

Delay(1000)

}

}

}

}

你的程序来看,工作流程是这样的,开机后,按下按键不放,只闪烁一次。如果你放开你的手,释放按键,则LED一致闪烁。

你说再按一下为什么灶李不熄灭,因为 标示9句型前那里置隐租迟1了,你的硬件应该是L1置1亮吧?

因为L1=1,是你灯闪烁的最后一个状态,而后又会从5再次执行,如果你按下了按键,程序停在了6那里死循环,

则后面7,8都不会执行了。灯则保留了上一个循环最后的状态,也就是9的状态,所以就一致亮了。

你如果又松开按键,灯又会闪烁,你再按下按键,灯又一直亮了。如此循环。

你的程序的就是一个字概括,乱,你的思路很混乱,条理不清晰,建议先在纸上写下流程,再来写代码。想清楚了再下手。

你会学的很快的。

你的main函数有个性,呵呵,没有人会这么写main函数的,去看看单片机C语言的书吧!

#include<reg51.h>

sfr p2=0xa0

sfr p1=0x90

sbit p1_0=0x90

sbit p1_1=0x91

int kk[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}DELAY()

int a,b

int main()

{

if(p1_0==0)

{

while(1)

{

b=1

for(a=0a<磨模慎瞎敬10a++)

{p2=kk[a]

DELAY()

}

if(p1_1==0)

{b=0break}

if(p1_1==0)

{

while(1)

{b=0

for(a=9a>=0a--)

{p2=kk[a]

DELAY()

} } }

if(p1_0==0)

{b=1break}

}

}

}

DELAY()

{

unsigned char i,j,p

for(i=10i>0i--)

for(j=100j>0j--)

{if(p1_1==0)

{b=0a=10break}

if(p1_0==0)

{b=1a=-1break}

for(p=200p>0p--)

}

}

你看这样对码迹么。

用C语言编程,求程序的方法:

#include//包含单片机寄存器的头文件

/****************************************函数功能:延迟一段时间

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

Voiddelay(Void)蚂肢//Void表示没有返回值,也没有传递参数。

Unsignedint我;定义一个最大值为65535的无符号整数。

For (I = 0我<20000i++) //执行20000个空循环。

;//什么也不做,等待一个机器周期。

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

函数函数:主函数(C语言规则必须有且只能有一个主函数)。

********************************************************/空白主要(空白)

而(1)//无限循环。

P0=0xfe;//P1=11111110B,P0.0输出低电平。

延迟();//推迟一段时间。

P0=0XFF;//P1=11111111B,P0.0输出高电平。

延迟();//推迟一段时间。

单片机驱动LED光源程序:

#include//头文件。

定义uint无符号int

#定义uchar无符号字符

SbitLED1=P1^7;//定义。

空白delay_ms(单位);//带参数的ms级延时函数。

Voidmain()

而(1)

LED1=0;

Delay_ms(1000);

LED1=1;

Delay_ms(1000);

Voiddelay_ms(uintz)//delay子例程

使用Uintx,y;

For (x = zX >0X -)

For (y = 110Y >0Y -)

扩展资料:

单片态盯机应用分类:

一般类型:

这是关于微控制器的。例如80C51通用型单片闷闭世机,它并不是为特定的目的而设计的;专用单片机是为某一类产品甚至某一种产品而设计生产的。例如,为了满足电子体温计的要求,芯片中集成了具有ADC接口的温度测量控制电路等功能。

主线:

这是由微控制器是否提供并行总线来区分的。总线微控制器一般安装有并行地址总线、数据总线、控制总线,这些引脚扩展并行外围设备可以通过串口与单片机连接。

另外,很多单片机都需要将外围设备和外围设备的接口集成在一块,所以在很多情况下不能并行扩展总线,大大降低了封装成本和芯片体积,这种单片机被称为非总线单片机。

控制类型:

这是关于微控制器的一般应用。一般来说,工业控制寻址范围大,计算能力强。家用电器的单片机大多是专用的。

它通常是小包装、低价格、高集成的外围设备和外围接口。显然,上述分类并不独特和严格。例如,80C51类单片机既是通用的,又是总线的,还可以用于工业控制。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12313025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存