一、跑馬燈和流水燈的區(qū)別
好多人分不清跑馬燈和流水燈,還以為是同一種狀態(tài),雖然難度等級是一樣的,但是燈的亮滅顯示方式是不一樣的。請看下圖
弄清楚跑馬燈的顯示狀態(tài)后可以開始進(jìn)行設(shè)計(jì)了, 在日常的跑馬燈設(shè)計(jì)電路中LED燈一般接為這兩種形式,共電源或共地,也就是通常說的灌電流式和拉電流式
大家可以根據(jù)自己實(shí)際的電路需要選擇其中一種接法,由于AT89S52單片機(jī)IO端口不操作時(shí)是高電平所以下面我選擇的是共電源接法。
電路分析:當(dāng)電路輸出高電平[端口為1]LED燈滅,當(dāng)電路輸出低電平[端口為0]LED燈亮
大家可以按照自己的思路編程,方法不唯一,下面我將介紹3種方法
方法一:不利用算法,直接使用IO控制[可以說是最蠢的方法,但是一樣能實(shí)現(xiàn)效果,并且容易理解]
#include 《reg52.h》
//LED輸出端口位定義
sbit led0=P0^0;
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;
sbit led4=P0^4;
sbit led5=P0^5;
sbit led6=P0^6;
sbit led7=P0^7;
//延時(shí)函數(shù)
void delay(void)
{
unsigned char a,b;
for(a=0;a《200;a++)
for(b=0;b《200;b++);
}
void main()
{
led0=1; //端口初始化
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
led6=1;
led7=1;
while(1)
{
led0=0; //點(diǎn)亮LED0
delay(); //延時(shí)
led0=1; //熄滅LED0
delay(); //延時(shí),為下一個(gè)燈準(zhǔn)備
led1=0;
delay();
led1=1;
delay();
led2=0;
delay();
led2=1;
delay();
led3=0;
delay();
led3=1;
delay();
led4=0;
delay();
led4=1;
delay();
led5=0;
delay();
led5=1;
delay();
led6=0;
delay();
led6=1;
delay();
led7=0;
delay();
led7=1;
delay();
}
}
方法二:借助數(shù)組對上面程序進(jìn)行改進(jìn),使端口一次性賦值定義
#include 《reg52.h》
#define uchar unsigned char
#define uint unsigned int
//定義一個(gè)一維數(shù)組
unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//延時(shí)函數(shù)
void delay(void)
{
uchar a,b;
for(a=0;a《200;a++)
for(b=0;b《200;b++);
}
void main()
{
uchar i;
while(1)
{
for(i=0;i《8;i++)
{
P0=table[i];//11111110
delay();
}
}
}
方法三:利用函數(shù)封裝庫
#include 《reg52.h》
#include 《intrins.h》 //此為調(diào)用函數(shù)的頭文件必須添加
#define uchar unsigned char
#define uint unsigned int
//延時(shí)函數(shù)
void delay(void)
{
uchar a,b;
for(a=0;a《200;a++)
for(b=0;b《200;b++);
}
void main()
{
uchar k;
k=0xfe; //定義初值
while(1)
{
P0=k;
delay();
k=_crol_(k,1); //調(diào)用頭文件封裝庫函數(shù)
}
}
還有移位運(yùn)算等其他的方法在這里就不一一列出,大家可以自己嘗試!
-
單片機(jī)
+關(guān)注
關(guān)注
6050文章
44687瀏覽量
641172 -
跑馬燈
+關(guān)注
關(guān)注
5文章
117瀏覽量
34953
原文標(biāo)題:回答讀者提問(2018-7-6)
文章出處:【微信號:digital_signals,微信公眾號:數(shù)字信號處理輔導(dǎo)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
AT89C2051跑馬燈/流水燈
如何利用51單片機(jī)點(diǎn)亮LED燈實(shí)現(xiàn)跑馬燈效果?
如何用51單片機(jī)數(shù)碼管實(shí)現(xiàn)跑馬燈功能?

交替閃爍8個(gè)LED燈和LED二進(jìn)制加法顯示與流水燈跑馬燈的設(shè)計(jì)程序

使用51單片機(jī)控制器LED燈的四個(gè)實(shí)驗(yàn)程序免費(fèi)下載

使用51單片機(jī)實(shí)現(xiàn)愛心跑馬燈的程序免費(fèi)下載

使用單片機(jī)實(shí)現(xiàn)跑馬燈的程序免費(fèi)下載

51單片機(jī)實(shí)驗(yàn)——跑馬燈實(shí)驗(yàn)

ZigBee-CC2530單片機(jī) - 按鍵控制跑馬燈的啟停

單片機(jī)控制輪流交替閃爍跑馬燈設(shè)計(jì)
基于51單片機(jī)的多模式音樂跑馬燈

評論