C语言中实现循环移位操作的方法
的有关信息介绍如下:许多嵌入式系统软硬件开发或者是C语言学习者,是否在刚开始入门时会遇到流水灯或者是跑马灯等类似的小实验呢?作为初学者,是否会觉得毫无头绪,略感郁闷?下面,小编教大家如何实现,请看下文。
作为计算机系统开发的主流编程语言之一,C语言以其简洁紧凑、灵活方便、运算符丰富、数据类型丰富等诸多优点,而作为了高校理工科教育基础课程。
首先简单分析流水灯工作原理:
只需要控制每个时间间隔内只有一盏灯亮即可,其余灯均处于灭状态。学习过汇编语言的,是否联想起寄存器循环移位操作符。如下所示即为LED灯电路原理图,分为共阴极与共阳极接法:
我们知道,在ASM(汇编语言)中,有循环左移、循环右移指令,但是在ANSI C标准中并没有循环移位操作运算符,所以接下来将介绍如何在C语言中实现循环移位操作运算。
功能: 循环移位 1111 1110 b(二进制),点亮LED灯实现流水灯效果。
思路: 循环左移时,将移出的位填在右端
示例: 实现循环左移1位
uint8 a,b;
uint8 counter = 0;
while(1)
{
a = status>>7;
b = status<<1;
status = a|b;
P1OUT = status; //MSP430G2553单片机输出引脚,外接共阳极的LED 0 - 7
for(i=0;i<40000;i++)
{
;//delay function
}
counter ++ ;
if(counter == 7)
{
status = 0xfe;
}
}
如下所示,为简易的LED阵列,只需要按顺序点亮LED即可实现流水灯控制,需要注意的是,要控制好灯亮持续时间。