我想知道这个单片机花样流水灯正确的的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灯交替点亮,松开开关后,跳出外部中断处理,恢复先前的正反向循环流水点亮。
下面是仿真图,求大神帮我
上图有点乱,,不好意思。这个图比较好点 展开
单片机的p2口上接有8只发光LED组成的花样流水灯。输入引脚p3.3接有一只按键开关K。K未按下时,单片机利用p2口的输出,控制花样灯左右循环流水点亮;K按下时,控制发光二极管交替点亮;当K松开时,花样灯恢复至左右循环流水点亮。
二、原理说明
编程考虑:在正常情况下,通过设给寄存器A初值,利用寻移指令和延迟环节,使8个LED灯呈现正反向循环流水点亮。当按下开关,是外部中断请求1引脚呈低电平,触发外部中断1,在中断处理程序中将寄存器A赋值0xaa,再通过环移指令和延时环节,使LED灯交替点亮,松开开关后,跳出外部中断处理,恢复先前的正反向循环流水点亮。
下面是仿真图,求大神帮我
上图有点乱,,不好意思。这个图比较好点 展开
2个回答
展开全部
#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);
}
}
}
#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);
}
}
}
更多追问追答
追答
#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);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询