我想知道这个单片机花样流水灯正确的的C语言程序,你能发给我吗?

一、设计要求单片机的p2口上接有8只发光LED组成的花样流水灯。输入引脚p3.3接有一只按键开关K。K未按下时,单片机利用p2口的输出,控制花样灯左右循环流水点亮;K按下... 一、设计要求
单片机的p2口上接有8只发光LED组成的花样流水灯。输入引脚p3.3接有一只按键开关K。K未按下时,单片机利用p2口的输出,控制花样灯左右循环流水点亮;K按下时,控制发光二极管交替点亮;当K松开时,花样灯恢复至左右循环流水点亮。
二、原理说明
编程考虑:在正常情况下,通过设给寄存器A初值,利用寻移指令和延迟环节,使8个LED灯呈现正反向循环流水点亮。当按下开关,是外部中断请求1引脚呈低电平,触发外部中断1,在中断处理程序中将寄存器A赋值0xaa,再通过环移指令和延时环节,使LED灯交替点亮,松开开关后,跳出外部中断处理,恢复先前的正反向循环流水点亮。
下面是仿真图,求大神帮我
上图有点乱,,不好意思。这个图比较好点
展开
 我来答
zhxiufan
2014-06-09 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg51.h>
#define uchar unsigned char
sbit key=P3^3;
uchar led=0x01;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
while(1)
{
while(key==0)
{
P2=0x55;
delay(100);
P2=0xaa;
delay(100);
}

while(key==1)
{
P2=led;
led=led<<1;
if(led=0x00)led=0x01;
delay(100);
}

}

}
更多追问追答
追问

K键断开的时候led没有任何反应。

该怎么修改一下程序呢?

追答
#include
#define uchar unsigned char
sbit key=P3^3;
uchar led=0x01;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
while(1)
{
while(key==0)
{
P2=0x55;
delay(100);
P2=0xaa;
delay(100);
}
while(key==1)
{
P2=led;
led=led<<1;
if(led==0x00)led=0x01; //这里有点错,改了。
delay(100);
}

}

}
做而论道
高能答主

2014-06-09 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
用低电平来驱动 LED 发光,才合理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式