恩,不知道你要什么语言的!但是我觉得你提问本身矛盾哈!一只怎么左移?你是亮一只吧!
下面是我一个移位的流水灯程序,你先看看这个程序,延时这里你修改一下就是哈,用定时器来触发移位。提示你,你每秒移动移位,那你每个亮多久呢?要考虑好哦!后面我附加一个1s的定时器,你就自己稍微拼凑哈,挺简单的,希望你能解决!
#include
<reg52h>
#include
<intrinsh>
#define
uint
unsigned
int
#define
uchar
unsigned
char
void
delay(uint);
void
main()
{
uchar
aa;
aa=0xfe;
while(1)
{
P1=aa;
delay(800);
aa=_crol_(aa,1);
}
}
void
delay(uint
z)
{
uint
x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
定时器的
void
T0_time()
interrupt
1
//隔50ms跑过来到中断程序里来,
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)//50ms20为1s
{
num=0;
led1=~led1;//实现灯的闪动
led2=~led2;
}
}
稍微融合一下就OK
循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
a=01111011,循环左移2位 正确结果: 11101101
过程:
b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;
a=a<<2;左移 a=11101100
a=a|b; a=11101101
如果不是用中间变量 a=(a>>(8-2))|(a<<2)
总长度N(8 16 32)
循环左移n: (a>>(N-n))|(a>>n)
循环右移n: (a<<(N-n))|(a>>n)
C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。
扩展资料:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位 *** 作
实现高效的C语言编写的第三招----使用位 *** 作,减少除法和取模的运算。
在计算机程序中,数据的位是可以 *** 作的最小数据单位,理论上可以用“位运算”来完成所有的运算和 *** 作。一般的位 *** 作是用来控制硬件的,或者做数据变换使用,但是,灵活的位 *** 作可以有效提高程序运行的效率。
参考资料来源:百度百科-c语言程序设计
#include<stdioh>
#define N 5
int main(){
int i,j,m,n,a[N][N];
printf("input m n:");
scanf("%d%d",&m,&n);
while(m>0)m-=N;
while(n>0)n-=N;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=iN+j+1;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%-3d",a[(N-m+i)%N][(N-n+j)%N]);
printf("\n");
}
return 0;
}
input m n:1 1
25 21 22 23 24
5 1 2 3 4
10 6 7 8 9
15 11 12 13 14
20 16 17 18 19
以上就是关于控制一只二极管亮,用定时器每隔一秒循环左移位的程序<单片机>急全部的内容,包括:控制一只二极管亮,用定时器每隔一秒循环左移位的程序<单片机>急、如何用c语言实现循环左移、c语言如何将二维数组行列循环移位等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)