流水灯控制
2021-01-09,51单片机学习笔记
功能:
8位流水灯 由上至下由下至上来回流动,间隔1s流动,其中每个LED亮500ms,灭500ms,灯亮时蜂鸣器响,灯灭时关闭蜂鸣器,一直循环下去。
代码:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int //宏定义,使用uint代指unsigned int
#define uchar unsigned char
uint ms; //延时子函数参数,用于控制延时时长
uchar temp; //定义无符号字符型变量temp
sbit beep=P2^3; //声明蜂鸣器I/O口
void delayms(uint ms); //声明延时函数
void main()
{
temp=0xfe; //0xfe=1111 1110
while(1)
{
uint i; //计数变量
for(i=0;i<7;i++) //正序流水灯
{
beep=0; //蜂鸣器打开
P1=temp; //将变量temp初始值赋值给8位寄存器P1,点亮led
delayms(502); //延迟500ms
beep=1; //蜂鸣器关闭
P1=0xff; //led全部灭掉
delayms(502);
temp=_crol_(temp,1);//按位循环左移一位,1111 1110-->1111 1101-->1111 1011
P1=temp; //将按位左移一位后的变量赋值给寄存器P1,点亮下一个led
}
for(i=0;i<7;i++) //倒序流水灯
{
beep=0;
P1=temp;
delayms(502);
beep=1;
P1=0xff;
delayms(502);
temp=_cror_(temp,1);
P1=temp; //将按位右移一位后的变量赋值给寄存器P1,点亮下一个led
}
}
}
void delayms(uint ms) //延时函数,参数ms=100时,单次延时约100ms
{
uchar k;
while(ms--)
{
for(k = 0; k < 90; k++);
}
}