51单片机1按键切换4种不同状态的灯的c程序??可以是正闪,反闪,多种间隔闪。

51单片机1按键切换4种不同状态的灯的c程序??可以是正闪,反闪,多种间隔闪。,第1张

以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。

程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下按键时,通过判断状态值来切换不同的灯亮灭模式。定时器中断函数用来实现灯的闪烁,可根据需求自行调整闪烁频率。

编程不易,忘采纳

#include

#define uint unsigned int

sbit LED = P1^0

sbit KEY1 = P1^2

void delay(uint)

void main(void)

{

LED = 1 //初始化LED熄灭

KEY1 = 1 //赋值KEY1高电平

while(1)

{

if(!KEY1) //检测到按键按下

{

LED = ~LED/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不

进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循

环,LED取反得到LED = 0,灯亮。*/

delay(500) /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/

}

}

}

void delay(uint z) //延时函数

{

uint x, y

for(x=85x>0x--)

for(y=zy>0y--)

}

可下载到单片机验证。

这个程序是AVR单片机的,看下可能对你有用

#include

<ioavr.h>

#include

<intrinsics.h>

#define

duanseg

PORTC

#define

uchar

unsigned

char

#define

uint

unsigned

int

uchar

table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0}

uchar

table1[]={0x08,0xce,0x12,0x82,0xc4,0x81,0x01,0xca,0x00,0x80}

void

display(uint

num)

//数码管显示

{

PORTA=0x7f

duanseg=table1[num/1000]

delay_nms(2)

PORTA=0xf0

PORTA=0xbf

duanseg=table[num%1000/100]

delay_nms(2)

PORTA=0xf0

PORTA=0xdf

duanseg=table[num%100/10]

delay_nms(2)

PORTA=0xf0

PORTA=0xef

duanseg=table[num%10]

delay_nms(2)

PORTA=0xf0

}

void

keyscan()//键盘扫描

{

if((PINB&0x40)==0)

{

delay_nms(5)

if((PINB&0x40)==0)

{

while((PINB&0x40)==0)

//按键释放

flag++

}

}

if(flag==6)

flag=0

if(flag==3)

{

if((PINB&0x80)==0)

//切换通道

{

delay_nms(5)

if((PINB&0x80)==0)

{

while((PINB&0x80)==0)

//按键释放

flag1++

}

}

if(flag1==4)

flag1=0

}

}

void

set()

//设置上下限

{

if(flag==0)

display(ADHandler())

if(flag==1)

//设置上限

只能加

没有设置减

{

display(high)

if((PINB&0x20)==0)

{

delay_nms(5)

if((PINB&0x20)==0)

{

while((PINB&0x20)==0)

{

display(high)

}

high=high+100

if(high>4900)

high=2000

display(high)

}

EEPROM_write(1,

high/100)

}

}

if(flag==2)

//设置下限

只能加

没有设置减

{

display(low)

if((PINB&0x20)==0)

{

delay_nms(5)

if((PINB&0x20)==0)

{

while((PINB&0x20)==0)

{

display(low)

}

low=low+10

if(low>1000)

low=50

display(low)

}

EEPROM_write(2,

low/10)

}

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存