求教,环形跑马灯的编程(C语言)
30个跑马灯连接在P0.0到P0.29,顺时针环形排列,输出1亮,0灭。(主频20M)(1)开始全灭,顺时针点亮500MS后熄灭,顺序往下,循环3圈。(2)1,30号灯亮...
30个跑马灯连接在P0.0到P0.29,顺时针环形排列,输出1亮,0灭。(主频20M)
(1)开始全灭,顺时针点亮500MS后熄灭,顺序往下,循环3圈。
(2)1,30号灯亮500MS后熄灭,然后1号灯顺时针依次亮,30号灯逆时针依次亮,循环10圈。 展开
(1)开始全灭,顺时针点亮500MS后熄灭,顺序往下,循环3圈。
(2)1,30号灯亮500MS后熄灭,然后1号灯顺时针依次亮,30号灯逆时针依次亮,循环10圈。 展开
3个回答
展开全部
你CPU的种类是什么都不说,编个毛的程序呀
第一个
P0 = 0x00000000;
int t = 3;
while(t--) //3次循环
{
while(1)
{
delay(500); //延时500毫秒
P0 <<= 1; //点亮下一个灯
P0 |= 1;
if(P0==0x7FFFFFFF) //灯全亮后,全部熄灭
{
P0 = 0x00000000;
break; //跳出小循环
}
}
}
第二个
int d1 = 0x20000000; //30号等亮
int d2 = 0x00000001; //1号等亮
P0=d1|d2;
int t = 10;
while(t--) //循环10次
{
while(1);
{
delay(500); //延时500毫秒
d1 >>= 1; //控制逆时针依次亮
d2 <<=1; //控制顺时针依次亮
P0=d1|d2; //合成输出
if(d1==0) //循环一次结束
{
int d1 = 0x20000000;
int d2 = 0x00000001;
P0=d1|d2;
break;
}
}
}
第一个
P0 = 0x00000000;
int t = 3;
while(t--) //3次循环
{
while(1)
{
delay(500); //延时500毫秒
P0 <<= 1; //点亮下一个灯
P0 |= 1;
if(P0==0x7FFFFFFF) //灯全亮后,全部熄灭
{
P0 = 0x00000000;
break; //跳出小循环
}
}
}
第二个
int d1 = 0x20000000; //30号等亮
int d2 = 0x00000001; //1号等亮
P0=d1|d2;
int t = 10;
while(t--) //循环10次
{
while(1);
{
delay(500); //延时500毫秒
d1 >>= 1; //控制逆时针依次亮
d2 <<=1; //控制顺时针依次亮
P0=d1|d2; //合成输出
if(d1==0) //循环一次结束
{
int d1 = 0x20000000;
int d2 = 0x00000001;
P0=d1|d2;
break;
}
}
}
追问
这道题还有最后一小问,老师说很难:1,30号灯一开始亮,然后1号灯300MS后熄灭顺时针依次亮,30号灯500MS熄灭逆时针依次亮。当顺时针的灯和逆时针的灯碰头的时候(亮同一盏的时候)转变方向,延时时间减少20MS,对撞10圈。 完成了就采纳你的答案,谢谢了!
追答
int d1_M = 15; //延时1最大计数
int d2_M = 25; //延时2最大计数
int d1_m = 0, int d2_m = 0; //计数
int flag; //标示,flag=1时表示有灯移位了
int d2 = 0x20000000;
int d1 = 0x00000001;
P0 = d1 | d2;
int t = 10;
while(t--)
{
while(1)
{
flag = 0;
delay(20); //延时20毫秒
d1_m ++;
d2_m ++;
if(d1_m >= d1_M) //顺时针依次亮延时到达
{
flag = 1;
d1_m = 0; //计数置零
P0 &= ~d1; //关闭原来的灯
d1 = d2_M) //逆时针延时到达
{
flag = 1;
d2_m = 0;
P0 &= ~d2;
d2 >>= 1;
if(d2 == 0x00000000) d2 = 0x20000000;
P0 |= d2;
}
if(d1 == d2 && flag == 1) //两灯相碰
{
int tmp = d2_M; //交换计数
d2_M = d1_M;
d1_M = tmp;
tmp = d1_m;
d1_m = d2_m;
d2_m = tmp;
d1_M--; //最大计数减少1,即减少20毫秒
d2_M--;
break;
}
}
}
展开全部
你这要实用的?还是抽象解决就行?
追问
不用使用,是单片机的考试题,能把第二小题解决吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题在哪儿
追问
怎么用C语言实现上面2个小问
追答
原题是这样描述的吗,我有点读不懂:顺时针点亮500MS后熄灭,顺序往下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询