8盏流水灯反向闪烁c语言,求教两个按钮,一个控制暂停一个运行用CROR控制8盏流水灯轮闪...

本文介绍了一段单片机程序,用于LED显示和按键控制。程序中定义了16位和8位数值类型,设置了LED和按键的宏定义,并实现了延时函数、中断初始化和按键检测功能。在主函数中,通过外部中断0进行按键检测,根据按键状态实现LED的左右移位显示。程序还包括消抖处理和显示字符的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include//头文件

typedef unsigned int u16;//定义16位数值

typedef unsigned char u8;//定义8位数值

#define led P2//宏定义P1为led

#define KEY P3//宏定义P1为led

u16 a,b,c;

sbit k0=P3^0;

sbit k1=P3^1 ;

sbit k2=P3^2 ;

sbit k3=P3^3 ;

u8 Keydata;

u8 code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

void delay(u16 ms)//延时函数

{

u16 i,k;

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

for(k=110;k>0;k--);

}

void Int0Init()

{

TMOD=0x01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0xD8; //给定时器赋初值,定时1ms

TL0=0xF0;

ET0=1;//打开定时器0中断允许

EA=1;//打开总中断

TR0=1;//打开定时器

b=0;

c=0;

}

void Int0() interrupt 1 //外部中断0的中断函数

{

TH0=0xD8; //给定时器赋初值,定时1ms

TL0=0xF0;

//void KeyDown(void)

{

char a=0;

KEY=0x0f;

if(KEY!=0x0f)//读取按键是否按下

{

delay(10);//延时10ms进行消抖

if(KEY!=0x0f)//再次检测键盘是否按下

{

//测试列

KEY=0X0F;

switch(KEY)

{

case(0X07): Keydata=1;break;

case(0X0b): Keydata=2;break;

case(0X0d): Keydata=3;b=~b;break;

case(0X0e): Keydata=4;c=~c;break;

}

while((a<50)&&(KEY!=0xf0)) //检测按键松手检测

{

delay(1000);

a++;

}

}

}

}

}

void main()

{

u16 j;

led=0xfe;

Int0Init();

while(1)

{

a=Keydata;

if(b==~0)

{

for(j=7;j>0;j--)//led右移

{

led=led<<1|0x01;

delay(5000);

if(c==~0)

while(c==~0)

P0=smg[Keydata];

}

for(j=7;j>0;j--)//led左移

{

led=led>>1|0x80;

delay(5000);

if(c==~0)

while(c==~0)

P0=smg[Keydata];

}

}

}

}

我都编晕了,你试试行不行,比较乱慢慢看!~ 应该行

为了在8051单片机上编写一个控制8只LED灯进行循环移位的流水灯程序,你需要理解如何通过程序控制I/O端口的位操作以及如何实现延时函数。在编写代码之前,推荐参阅《8051单片机C语言实训:LED控制经典实例》文档,该资源详细介绍了LED闪烁流水灯以及循环移位控制LED灯的基本编程技巧。 参考资源链接:[8051单片机C语言实训:LED控制经典实例](https://wenku.csdn.net/doc/3pkozstmgw?spm=1055.2569.3001.10343) 下面是控制8只LED灯进行循环移位的流水灯程序示例代码: (示例代码略) 在上述代码中,我们使用了循环移位操作来实现LED灯的流水效果。`_crol_()`函数用于实现循环左移操作,而`_cror_()`函数则用于循环右移操作。为了在PROTEUS仿真工具中测试这段代码,你需要先设计一个包含8个LED灯的电路图,并将8051单片机的相应引脚连接到这些LED灯上。接着,在PROTEUS中加载你的单片机程序,并执行仿真来观察LED灯的流水效果。 在掌握如何编写循环移位流水灯程序之后,你可以尝试创建更复杂的LED显示模式,或者将所学应用到其他嵌入式系统项目中。为了进一步提升你的技能,继续参考《8051单片机C语言实训:LED控制经典实例》中的其他实例,并通过实际操作来巩固和扩展你的知识。 参考资源链接:[8051单片机C语言实训:LED控制经典实例](https://wenku.csdn.net/doc/3pkozstmgw?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值