📄 循环移位流水灯.c
字号:
/*
循环移位流水灯
功能: P1口外接的八个LED按照程序预定的组合,有选择、有节奏的点亮或
者熄灭,从而可以使LED发出的灯光达到像水流一样“流动”的效果。
说明: 运用C语言中简单的“移位”及“位或”操作,组合出一系列所需的8位
二进制数,并给P1口赋值,P1口对应的各LED就会按照要求被点亮或熄灭。
调试:1、通过对换程序中移位符号(">>"、"<<")的位置,可以方便地改变流水灯流动的方向。
2、通过修改变量“LED”的初值,可以方便地实现N(1至7)个LED作为一组流动的效果。
(C)西安电子科技大学 测控技术与仪器 编写:郭世忠 日期:2008/02/15
*/
#include<reg52.h> //51寄存器头文件
void Delayms(int ms); //函数声明
void main(void) //主函数
{
unsigned char LED; //定义变量
LED=0xf8; //LED赋初值 可根据需要在“LED初值列表”中选择对应初值
//这里以点亮3个LED为例,因此选择初值为 0xf8
while(1) //死循环,单片机程序必须是一个死循环
{
P1=LED; //I/O口赋值,将变量“LED”此刻的值传给P1口。这一句写在这里是为了
//保证P1口能够从LED的初值开始显示,大家不信可以改一下位置看效果。
LED=(LED>>7)|(LED<<1);//移位运算,向左或向右移1位,并更新LED的值,下一周期更新到P1口
//此处对换移位符号(">>"、"<<")的位置,可改变流水灯流动的方向。
Delayms(5000); //延时,保持当前发光状态片刻。
}
}
/***************************** LED初值列表 *******************************
*
*流动LED的个数 对应二进制 对应十六进制
* 1 1111 1110 0xfe
* 2 1111 1100 0xfc
* 3 1111 1000 0xf8
* 4 1111 0000 0xf0
* 5 1110 0000 0xe0
* 6 1100 0000 0xc0
* 7 1000 0000 0x80
*说明:P1口对应的LED是低电平有效,因此,0代表点亮LED,1代表熄灭LED.
****************************************************************************/
/****************************************************************************
* 名 称:Delayms()
* 功 能:延迟1ms
* 入口参数:ms: 延迟毫秒数
* 出口参数:无
* 说 明: 11.0592MHz条件下
****************************************************************************/
void Delayms(int ms)
{
unsigned int i;
for(;ms>0;ms--) //循环ms次
{
for(i=0;i<113;i++); //每次1ms延迟@ 11.0592MHz
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -