用C语言编写按键控制流水灯的程序

用C语言编写按键控制流水灯的程序,第1张

1灭)。编译器keil

c代码如下:

#include<reg51h>

#include<intrinsh>

//包含循环左移函数

_cro_l头文件

unsigned

char

tmp;

//中间变量

//////////////////////////////////////////////////////////////////////////////////////////////////

//

延时子程序

////////////////////////////////////////////////////////////////////////////////////////////////

void

delay(unsigned

int

cnt)

{

while(--cnt);

}

//////////////////////////////////////////////////////////////////////////////////////////////////

//

主函数

////////////////////////////////////////////////////////////////////////////////////////////////

main()

{

while(1)

//外层循环

{

tmp

=

0xfe;

p1

=

tmp;

while(1)

//内层循环,执行1、3、5、7亮灯循环

{

delay(30000);

//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定

tmp

=

_crol_(tmp,2);

p1

=

tmp;

if(tmp

==

0xbf)

//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环

{

break;

}

}

tmp

=

0xfd;

p1

=

tmp;

while(1)

//内层循环,执行2、4、6、8亮灯循环

{

delay(30000);

//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定

tmp

=

_crol_(tmp,2);

p1

=

tmp;

if(tmp

==

0x7f)

//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环

{

break;

}

}

}

}

1、自动归零,就是让灯全部不亮回到全灭的状态;

2、手动增加----每按一下亮一个灯,你要几个亮就按几下;

3、满足你的条件后(比如你说的,先亮3个然后自动累加)------先讲拨码开关切换到“手动”,是按钮生效,用归零按钮归零,然后用手动按钮3次亮3个灯!然后将拨码开关切换到“自动”,灯就会根据时钟间隔自动累加亮起来!

#include "REG52H"

//控制引脚定义

sbit LED1 = PXX; //P00-P37任意引脚

sbit LED12 = PXX;

//宏定义灯亮灯灭

#define LED1_ON( ) LED1 =0 //阳极接电源

#define LED1_OFF( ) LED1 =1 //阳极接电源

#define LED12_ON( ) LED12 =0 //阳极接电源

#define LED12_OFF( ) LED12 =1 //阳极接电源

void Init_GPIO( )//端口引脚初始化,关闭所有指示灯

{

LED1_OFF( ) ;

LED12_OFF( ) ;

}

void Delay_ms( u16 dat ) //延时函数

{

u16 i, j;

for(i = dat; i>0; i--)

{

for (j=300; j>0; j--);

}

}

int main( ) //主函数

{

Init_GPIO( );//引脚初始化

while(1) //大循环

{

LED1_ON( );//点亮第一个LED

LED2_OFF( );

LED12_OFF( );

Delay_ms(1000);//延时 参数自己可以根据晶振频率自己调节

LED1_OFF( ); //点亮第二个LED

LED2_ON( );

LED3_OFF( );

LED12_OFF( );

Delay_ms(1000);

//按照上面修改;

LED1_OFF( );//点亮第十二个LED

LED2_OFF );

LED3_OFF( );

LED12_ON( );

Delay_ms(1000);

}

}

我写的这个程序应该可以,按一下灯亮,再按一下灯灭

#include

"REG52H"

sbit

LED1_01

=

P1^1;

//LED灯

sbit

KEY0_01

=

P1^2;

//按键

void

Delay_1ms(unsigned

int

Time)

{

unsigned

int

x,

y;

for(x

=

Time;

x

>

0;

x--)

for(y

=

120;

y

>

0;

y--);

}

int

main(void)

{

LED1_01

=

1;

//打开LED灯点亮

while(1)

{

if(KEY0_01

==

0)

//检测按键是否按下

{

Delay_1ms(10);

//延时去抖动

if(KEY0_01

==

0)

//确定按键按下

{

LED1_01

=

~

LED1_01;

//取反LED灯

[

]

}

while(KEY0_01

==

0);

//检测松手

}

}

}

你的图里有A/D转换器

AD转换函数ADC_DISC

#include

<REGX51H>

#include"defh"

#include"libh"

sbit

adc_cs=P1^0;

sbit

adc_rd=P1^1;

sbit

adc_wr=P1^2;

/ADC0804启动转换函数/

INT8U

start_ad()

{

INT8U

temp;

adc_cs=0;

adc_wr=1;

delay(1);

adc_wr=0;

delay(1);

adc_wr=1;

delay(1);

//启动AD

adc_rd=1;

delay(1);

adc_rd=0;

delay(1);

temp=P2;

delay(1);

adc_rd=1;

delay(1);

//读取数据

return

temp;

}

用这个程序。

#include<reg51h>

sbit s1=P1^0;

sbit s2=P1^1;

sbit led1=P0^0;

sbit led2=P0^1;

void delay(int a)

{

unsigned char i;

while(a--)for(i=0;i<120;i++);

}

main()

{

while(1)

{

while(s1==0)

{

led1=0;led2=1;delay(100);

led1=1;led2=0;delay(100);

}

while(s2==0)

{

led1=0;led2=0;delay(50);

led1=1;led2=1;delay(50);

}

}

}

我给你写个参考程序,看看程序符不符合你的要求,程序如下:

#include "REG52H"

// LED灯端口定义

sbit GPIO_Exio1 = P0^0;

sbit GPIO_Exio2 = P0^1;

sbit GPIO_Exio3 = P0^2;

sbit GPIO_Exio4 = P0^3;

// 按键输入端口

sbit KEY1_Exitm = P1^0;

sbit KEY2_Exitm = P1^1;

sbit KEY3_Exitm = P1^2;

sbit KEY4_Exitm = P1^3;

/

延时1ms

/

void Delay_1ms(unsigned int Cnt)

{

unsigned int x, y;

for(x = Cnt; x > 0; x--)

for(y = 120; y > 0; y--);

}

/

按键扫描子函数

/

void KEY_ScanExtio(void)

{

// 判断K1 、K2其中一个按键按下

if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))

{

Delay_1ms(5);

if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))

{

// 按键按下点亮LED

GPIO_Exio1 = 0;

GPIO_Exio2 = 0;

GPIO_Exio3 = 0;

GPIO_Exio4 = 0;

}

while((KEY1_Exitm == 0) || (KEY2_Exitm == 0)); // 按键松手检测

// 按键松手后LED灭

GPIO_Exio1 = 1;

GPIO_Exio2 = 1;

GPIO_Exio3 = 1;

GPIO_Exio4 = 1;

}

// 判断K3 、K4其中一个按键按下

if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))

{

Delay_1ms(5);

if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))

{

}

while((KEY3_Exitm == 0) || (KEY4_Exitm == 0)); // 按键松手检测

// 按键松手后取反LED

GPIO_Exio1 = ~GPIO_Exio1;

GPIO_Exio2 = ~GPIO_Exio2;

GPIO_Exio3 = ~GPIO_Exio3;

GPIO_Exio4 = ~GPIO_Exio4;

}

}

/

主函数

/

int main(void)

{

// 初始化IO

P0 = 0xFF;

P1 = 0xFF;

P2 = 0xFF;

P3 = 0xFF;

while(1)

{

KEY_ScanExtio();

}

}

以上就是关于用C语言编写按键控制流水灯的程序全部的内容,包括:用C语言编写按键控制流水灯的程序、让24个led灯依次点亮的程序,有大神会写吗、用C51单片机控制12个LED流水灯的C语言程序怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9417785.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存