C语言怎么用16进制数控制8位二进制数去产生灯光跑马灯效果二进制位控制LED灯开关。假定有8盏LED灯的开关由状态字psw控制。psw的8个二进制位分别控制1个LED灯,将位清0则对应的灯关闭,置1则打开。编一个程序,功能是模拟LED灯光跑马灯闪...C语言怎么用16进制数控制8位二进制数去产生灯光跑马灯效果二进制位控制LED灯开关。假定有8盏LED灯的开关由状态字psw控制。psw的
8个二进制位分别控制1个LED灯,将位清0则对应的灯关闭,置1则打开。编一个程序,
功能是模拟LED灯光跑马灯闪烁效果。即第1盏灯亮1秒后关闭,切换到第2盏灯再亮1
秒,一直循环下去。设置按任意键控制跑马灯效果的启停,输出psw的十六进制数形式来模
拟循环一个完整周期的灯光控制效果。
提示:通过观察状态字psw值的变化来模拟控制效果。其设计基本思路是:
①使用getch()函数控制启停,延时调用库函数Sleep(1000),参数为毫秒数,其头文件
在windows.h中。
②状态字psw为1字节无符号字符(unsignedchar),从第0位到第7位共8个二进制位
分别控制8个LED灯。每位单独是1其他位是0时的十六进制值依次是:0x1(0位)、0x2(1
位)、0x4(2位)、0x8(3位)、0x10(4位)、0x20(5位)、0x40(6位)、0x80(7位)。
③灯全灭psw=0,开关掩码mask依据上列十六进制值来设定。
④由于异或运算同一个数2次,又恢复了原来的值,也就是psw^=mask,灯开,再次
做同样运算灯灭。也可以考虑用位左移运算实现开关控制。psw=1,打开0位对应的灯,
psw<<=1每次左移1位可切换开关的状态。
程序的基本框架如下:
#include//Sleep()
#include
#include//getch()
voidmain()
{unsignedcharpsw=0x0;
unsignedcharmask=0x1;//控制第0位的灯光
……
}
初学者入门,指针啥的都还没能够看得懂!谢谢大神来解答问题!
阅读全文
收起全文