求用C语言编程实现51单片机的LED灯移动

使用C语言编写程序,通过51单片机上的四个开关(c10~c13)控制LED灯(7颗)的左移右移。要求:开关c10控制一颗LED灯向左移,开关c11控制一颗LED灯向右移;... 使用C语言编写程序,通过51单片机上的四个开关(c10~c13)控制LED灯(7颗)的左移右移。
要求:开关c10控制一颗LED灯向左移,开关c11控制一颗LED灯向右移;开关c12控制三颗LED灯同时向左移,开关C13控制三颗LED灯同时向右移
灯是8颗,说错了
展开
 我来答
zhxiufan
2014-05-06 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg51.h>
#define uchar unsigned char
sbit c10=P1^0;
sbit c11=P1^1;
sbit c12=P1^2;
sbit c13=P1^3;
uchar led1,led3;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar keyval=0xff;
led1=0xfe;
led3=0xf8;
while(1)
{
if(c10==0)
{
delay(10);
if(c10==0)
{
while(c10==0);
keyval=0;
}
}
if(c11==0)
{
delay(10);
if(c11==0)
{
while(c11==0);
keyval=1;
}
}
if(c12==0)
{
delay(10);
if(c12==0)
{
while(c12==0);
keyval=2;
}
}
if(c13==0)
{
delay(10);
if(c13==0)
{
while(c13==0);
keyval=3;
}
}
switch(keyval)
{
case 0:
P0=led1;
led1=(led1<<1)|0x01;
if(led1==0xff)led1=0xfe;
delay(100);
case 1:
P0=led1;
led1=(led1>>1)|0x80;
if(led1==0xff)led1=0x7f;
delay(100);
case 2:
P0=led3;
led3=(led3<<1)|0x01;
if((led3&0xf0)==0x30)led3=0x3e;
if((led3&0xf0)==0x70)led3=0x7c;
if((led3&0xf0)==0xf0)led3=0xf8;
break;
case 3:
P0=led3;
led3=(led3>>1)|0x80;
if((led3&0x0f)==0x0c)led3=0x7c;
if((led3&0x0f)==0x0e)led3=0x3e;
if((led3&0x0f)==0x0f)led3=0x1f;
break;
default:break;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伊莹玉y1
2014-05-06 · 超过34用户采纳过TA的回答
知道答主
回答量:254
采纳率:0%
帮助的人:56.9万
展开全部
#include"reg52.h"
#include <intrins.h>
#define uchar unsigned char
sbit c10=P1^0;
sbit c11=P1^1;
sbit c12=P1^2;
sbit c13=P1^3;
uchar state;
uchar cur;
uchar de;
void select_mode()
{
if(state==0)
{
de=0;
}
else if(state==1)
{
de=1;
}
else if(state==2)
{
de=0;
}
else if(state==3)
{
de=1;
}
}
void init_pro()
{
P0=0xff;
P1=0xff;
state=0;
cur=0xff;
de=0;//left
}
void delay_ms()
{
unsigned char i,j,k;
for(i=78;i>0;i--)
for(j=58;j>0;j--)
for(k=4;k>0;k--);
}
void delay(void)
{
unsigned char i,j,k;

for(i=31;i>0;i--)
for(j=205;j>0;j--)
for(k=4;k>0;k--);
}
void key_scan()
{
if(c10==0)
{
delay_ms();
if(c10==0)
{
state=0;
cur=0xfe;
}
}
else if(c11==0)
{
delay_ms();
if(c11==0)
{
state=1;
cur=0xfe;
}
}
else if(c12==0)
{
delay_ms();
if(c12==0)
{
state=2;
cur=0xf8;
}
}
else if(c13==0)
{
delay_ms();
if(c13==0)
{
state=3;
cur=0xf8;
}
}
}

void main()
{
init_pro();
while(1)
{
key_scan();
select_mode();
if(de==0)
{
cur=_crol_(cur,1);
P0=cur;
delay();
}
if(de==1)
{
cur=_cror_(cur,1);
P0=cur;
delay();
}
}
}
仿真可用。现敲的,不明白的地方加我,392135579
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
回卜去的2009
2014-05-06 · 超过23用户采纳过TA的回答
知道答主
回答量:52
采纳率:100%
帮助的人:45万
展开全部
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,b,c,d;
void delay()
{
uint i;
for(i=0;i<200;i++)

}
void anjian()
{
if(P1^0==0)

{
delay();
if(P1^0==0)
a=1;

}
if(P1^1==0)

{
delay();
if(P1^1==0)
b=1;

}
if(P1^2==0)

{
delay();
if(P1^2==0)
c=1;

}
if(P1^3==0)

{
delay();
if(P1^3==0)
d=1;

}
}

void main()
{
while(1)

{
anjian();
if(a==1)

....... //io口做相应的处理,这里你具体没说明,我都不知道怎么写了

if(b==1)
.......
if(c==1)
.......

if(d==1)
.......

}
}
更多追问追答
追问
我是用汇编写的,最终目的就是:安逸下开关1,一颗灯循环箱左移,按开关2一颗灯循环箱右移,按开关3三颗等循环箱左移,开关4就是三颗等循环箱右移
追答
你连led连着哪组io口都没说,怎么给你编?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-05-06 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
移动,不循环?

没有时间要求?
更多追问追答
追问

循环移动,时间好像是200MS

这是我用汇编写的,你看看

追答
控制,到底是用开关,还是按键?

LED灯(7颗),一定要求是7颗吗?

一个8位的接口,第几位,不用?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式