流水燈控制
2021-01-09,51單片機學習筆記
功能:
8位流水燈 由上至下由下至上來回流動,間隔1s流動,其中每個LED亮500ms,滅500ms,燈亮時蜂鳴器響,燈滅時關閉蜂鳴器,一直回圈下去,
代碼:
/*****************************************************************
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++);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246918.html
標籤:其他
上一篇:廣和通榮獲5G最優解決方案獎
