① 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 口,显示
}
可以参考一下啊