#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)
{
{
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--)
}
可下载到单片机验证。
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。
程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下按键时,通过判断状态值来切换不同的灯亮灭模式。定时器中断函数用来实现灯的闪烁,可根据需求自行调整闪烁频率。
编程不易,忘采纳
#include<reg52.h>unsigned char ID
sbit k1 = P3 ^ 7 // 定义按键端口
void delay()
{
TMOD = 0x10 // 定时器的工作方式
TH1=0xd8
TL1=0xf0
TR1=1
while(!TF1) // 这里错了,是定时器1
TF1=0
}
void main()
{
while(1)
{
if(k1==0)
{
delay() //去抖动
if(k1==0) //检测按键确实按下,进行按键处理
{
ID++
if(ID==0)
{
ID=0
}
while(!k1) //这里错了,多余的加了==0
}
}
switch(ID)
{
case 0:P1=0x3fbreak
case 1:P1=0x06break
case 2:P1=0x5bbreak
case 3:P1=0x4fbreak
case 4:P1=0x66break
case 5:P1=0x6dbreak
case 6:P1=0x7dbreak
case 7:P1=0x07break
case 8:P1=0x7fbreak
case 9:P1=0x6fbreak
default:break
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)