当前位置:首页 » 编程语言 » 跑马灯从两边移动到中间c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

跑马灯从两边移动到中间c语言

发布时间: 2022-07-10 13:35:43

c语言 跑马灯 左移 程序设计 左移位运算不完整 请高手 补充下 谢谢

你的灯接在哪个I/O口 这里我就当你接在P1口给你补充一下吧 I/O你根据自己的修改
首先你要把这个头文件加进去 #include "intrins.h"
for(i=1;i<=8;i++)
{
P1 = temp; //这里根据你实际的I/o口位置修改
temp = _crol_(temp,1); //循环左移这个数据就行了
delay();
}

② C语言移位问题,跑马灯效果

a=010101110,b=010101110;
int i=0;//a变量恢复时需要的循环次数变量
while(1)
{
if(a!=000000000)
{
a=a<<1; //一个移位清零的过程;
}
else //一个还原的过程;
{
i=8;
while(a!=b)//这是一个逐步恢复的过程,一位一位出。从b的高位开始,当跳出循环时,a被恢复。
{
a=((b>>i)||a);
i--;
}
}//当被恢复时,有判断a!=000000000;所以又开始移位清零。这样构成死循环
}

楼主,这就是基本完整的答案,由于不知道你是在什么平台下做的,所以a,b的数据类型不确定。不过可以采用位操作来定义。如果是做题,这答案肯定够用了。
中间最关键的一步:恢复((b>>i)||a) 就是先将b右移你的数据(宽度-1)bit,咱们这里是9-1;然后和a做或运算的到高一位的值,这样下去依次得到a的高9位值,而这时a就和b相等了,跳出循环,进行下一次a!=000000000所依赖的循环清零。

写的挺多了 ,楼主给分吧!!!

③ 单片机C语言编程跑马灯问题

这大概是你用到了LED>>1这样的右移指令,这条指令有点缺陷,最高位是填0的,所以达不到循环右移的效果,LED=LED | 0x80 就是为了实现循环右移的目的而增加的一条指令。右移一位后将最高位置1.

④ 求高手解 有8个灯的led跑马灯 要控制灯同时从中间向两边跑的代码

跑马灯说白了就是让灯按照一定顺序亮起来,你可以采用最笨的方法,从中间往两边跑,假设0代表低点平,1代表高电平,那么就得出以下几个状态,
0b11111111
0b11100111
0b11011011
0b10111101
0b01111110
看0是不是从中间往两边跑
当然你也可以用算法实现,你可以将这个八位的数据看做两个4位的,然后将高四位左移,低四位右移
写个大概程序为:
unsigned char a ,b,c,,i;
for(i=0;i<5;i++)//总共移动5次
{
a=(~(1<<i))&0x0f;//将1左移i位后取反与a相与,得出结果为高四位
b=(~(0x80>>i))&0x0f;//将1右移i位后取反与a相与,得出结果为低四位
c=a<<4+b;// 复原8位值
}
我没有具体编译执行你可以编译执行验证下算法。
希望能帮到你

⑤ 单片机跑马灯C语言程序,只要实现跑马灯功能,要简单点

#include<stdio.h>
#include<reg51.h>
void main()
{
int a;
unsigned char tmp=0;
while(1)
{
if(tmp==0) tmp=0x80;
else tmp = (tmp>>1);
P1 = tmp; //P1.0到P1.7控制8个灯
for(a=50000;a;a--); //延时一下
}
}
//只是示例,凑和一下

⑥ 51单片机设计跑马灯的程序用(c语言)编写

|P1口接8个发光二极管共阳

#include <AT89X51.H>

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

{

unsigned char m,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

void main(void)

{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i<8;i++)

{

a=temp<<i;

b=temp>>(8-i);

P1=a|b;

delay();

}

for(i=1;i<8;i++)

{

a=temp>>i;

b=temp<<(8-i);

P1=a|b;

delay();

}

}

}

(6)跑马灯从两边移动到中间c语言扩展阅读:

Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。

⑦ 8个跑马灯从中间向两边跑的C程序,库函数的形式!要C语言,不要汇编语言!

这样的程序太简单了
你只需要把值一个一个给IO口,没给一次延时一段时间,就可以看到效果!
你可以把这个程序写成一个子函数
然后把程序名放到XXX.H文件中就可以了
以后你要调用这个程序就先 #include “XXX.H”
在调用函数就OK了

⑧ C语言设计跑马灯程序

#include<reg51.h> //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
}

void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
跑马灯程序最基本的,c语言还未入门啊!!!

⑨ 两边往中间的跑马灯汇编语言程序

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV DPTR,#TAB

MOV R2,#4

LOOP:
CLR A

MOV A,@A+DPTR

MOV P0,A

INC DPTR

LCALL DELAY

DJNZ R2,LOOP

SJMP MAIN

DELAY:
MOV R3,#200

DELAY1:
MOV R4,#250

DJNZ R4,$

DJNZ R3,DELAY1

RET

TAB:
DB 7EH,0BDH,0DBH,0E7H

END

⑩ 环形跑马灯的编程,用C语言实现

#include <MSP430G2553.h>
#include <intrinsics.h>

#define myMCLK 8000000
#define uint unsigned int
#define uchar unsigned char

unsigned long led_left =0;
unsigned long led_right =0;
unsigned long led;

unsigned char Ok();
void Dis_Led();

void Init_clk()
{
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
}
void main(void)
{
uchar i;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
Init_clk();
while(1)
{
led_left = 0x80000000; //点亮第一个灯
led_right = 0x00000004; //点亮最后一个灯
Dis_Led();
__delay_cycles(4000000);//500MS延时
if( Ok() )
{
for(i=0;i<30;i++)
{
led_left <<=1;
Dis_Led();
__delay_cycles(4000000);//500MS延时
if( led_left==0 && led_right==0)
;
led_right >>=1;
Dis_Led();
__delay_cycles(4000000);//500MS延时
if( led_left==0 && led_right==0)
;
}
}
}
}
unsigned char Ok()
{
uchar i;
for(i=0;i<30;i++)
{
led_left &=~0x00000003;// 总是把最后两位置0
led_right &=~0x00000003;// 总是把最后两位置0

led_left >>=1;
led_left = led_left | 0x80000000;
Dis_Led();
__delay_cycles(4000000);//500MS延时
if(led_left & led_right)
return 1;

led_right <<=1;
led_right = led_right | 0x00000004;
Dis_Led();
__delay_cycles(4000000);//500MS延时
if(led_left & led_right)
return 1;
}
return 0;
}
void Dis_Led()
{
led = led_left | led_right;
;// 把led中的相应位送给 IO 口,显示
}

可以参考一下啊