⑴ 單片機右移到左移,左移到右移的花樣流水燈程序問題
LED燈右移到最右邊後向左移時是這樣的:右移一位→第二個延時程序→第一個延時程序→右移右移一位→第二個延時程序→第一個延時程序,這樣不斷循環,循環到最左邊,就開始了右移的程序。
這樣左移的延遲大一點的!
⑵ 單片機中流水燈如何控制
單片機中流水燈控制:
硬體連接很簡單,只要將8個LED指示燈接在P1口上
另一端通過220歐姆的電阻接+5V電源上,就可以了。
主要靠軟體控制,簡單的可以使用左移或右移指令,將低電平0
逐漸移入寄存器中,即控制LED指示燈逐漸一個一個地點亮或一個一個地熄滅。
復雜點:
可以進行花式流水控制。
例如:
可以由兩邊逐漸向內點亮
然後再由內逐漸向外一個一個熄滅。
還可以由由內逐漸向兩邊內點亮
然後再由兩邊漸向內逐一個一個熄滅。
在程序的實現上
可以把各種花式流水的P1口亮滅狀態字
事先定義成數組
然後每隔一定的時間
取出送P1口顯示。
呵呵
俺只提供給你一個號的演算法
程序就自己動手自立更生吧
滿意
就選滿意回答
⑶ 如何用單片機做流水燈
因為電路用單片機控制,所以電路非常簡潔。其電路原理圖見下圖,印製板圖如下圖所示。
電路的核心部分是AT89C2051單片機,前面提到它有Pl和P3兩組I/O口,我們這里只用到Pl口,共8個引腳。圖中Cl、R9組成典型的上電復位(即在加電時單片機復位)電路,XTAL、C2、C3與AT89C2051片內振盪電路組成時鍾振盪器。值得注意的是,C2、C3的容量不能與圖中數值偏差太大,否則可能引起不起振或振盪不穩定。XTAL的頻率可以在4-20MHz之間,不過,頻率的變化會導致程序運行速度的變化,這樣就需要調整延時子函數的參數。事實上,不調整參數亦可,只是此時延遲時間不再是1秒,其延遲時間會隨著XTAL頻率的降低而增加。
二、軟體部分
本程序包含兩個函數,一個是主函數,另一個是延時子函數。源程序如下(為了便於講解,我們為每行程序加上了編號):
程序各行作用如下:
00行:把AT89C2051的頭文件「AT89x051.H」包含進來。
01行:聲明Delay()延時子函數,該函數有一個無符號整型參數k,同時函數前面的void表明函數不返回函數值。
02行:延時子函數的開始,同時聲明兩個無符號整型變數i和j。
不過請注意,這里沒有象上期的程序一樣,把表示函數開始的「{」單獨成行,而是把下一行寫在一起了。事實上,寫C程序的時候,可以把多行寫作一行,C編譯器只要遇到分號就認為是一行語句的結束。
當然,我們不能因為C程序有這個特點,就隨意把多行合作一行書寫,實際書寫C程序的時候,還是要養成良好的程序書寫習慣,按照約定俗成的原則來書寫。
03行:聲明for()循環。這個循環的初始條件是i=0,終止條件是i<k,循環計數是每循環一次,用手計數的變數i加1。因此,這個循環的循環次數就是k次。這樣,只要改變k的值(即改變Delay()延時子函數的參數k的值),就可以很容易地控制循環次數,從而獲得不同的延時時間。
04行:聲明嵌套在03循環中的一個新的for()循環,這個循環與上一個循環相似,其循環次數是120次。本循環與上一個循環嵌套後,使得總的循環次數達120×k次。
05行:第一個分號,表示L條空語句,佔用一個機器時間,以實現延時的目的。後面的兩個「}」中,第一個「}」是04行for()循環的結束標志,程序遇到它時,將自動返回04行,使用於循環計數的變數j加1,同時判斷j是否小於120,如果否,則轉入05行;第二個是03行for()循環的結束標志,程序遇到它則會返回03行
⑷ 單片機流水燈設計,使八個led燈右移
#include <AT89X52.h> //調用51單片機的頭文件
void main(void) //主函數,單片機開機後就是從這個函數開始運行
{
unsigned int a; //定義一個int型變數,做延時用
P0=0;
while(1) //死循環,單片機初始化後,將一直運行這個死循環
{
for(a=0;a<20000;a++); //延時若干時間,具體時長暫不理會
if(P0==0)
P0=0x01;
else
P0=P0<<1; //將PO左移
}
}
⑸ 如何實現51單片機的按鍵k1按下,LED流水燈向右移動,按鍵k2被按下,LED流水燈向左移動
51單片機實現方法:
按鍵控制標志位flag取反。
然後把下面的代碼放到循環里:
U8 temp0 = 1。
U8 temp1 = 0x80。
U8 i = 0。
if(flag == 1)。
{。
for(i=0;i<8;i++)。
{。
P1=temp0<<i。
}。
}。
else。
{。
for(i=0;i<8;i++)。
{。
P1=temp1>>i。
}。
}。
}。
對控制LED口的寄存器進行位操作,按k1左移,按K2就是右移了。
51單片機是對兼容英特爾8051指令系統的單片機的統稱。51單片機廣泛應用於家用電器、汽車、工業測控、通信設備中。因為51單片機的指令系統、內部結構相對簡單,所以國內許多高校用其進行單片機入門教學。
51單片機的特點:
同樣的一段程序,在各個單片機廠家的硬體上運行的結果都是一樣的,如ATMEL的89C51(已經停產)、89S51,PHILIPS,和WINBOND等,我們常說的已經停產的89C51指的是ATMEL公司的AT89C51單片機。
同時是在原基礎上增強了許多特性,如時鍾,更優秀的是由Flash(程序存儲器的內容至少可以改寫1000次)存儲器取代了原來的ROM(一次性寫入),AT89C51的性能相對於8051已經算是非常優越的了。
⑹ 單片機設置流水燈顯示效果,具體流水效果為兩位彩燈右移
咨詢記錄 · 回答於2021-12-10
⑺ 單片機左右循環移動流水燈,求解答每句話含義,謝謝
#include<reg52.h>//頭文件
#defineucharunsignedchar//數據類型
#defineuintunsignedint//數據類型
#defineDataPortP0//數據介面定義P0
sbitP21=P2^0;//維定義
ucharcodeScanCode[]=//1111111011111101
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
voidDelayMs(uintn)//延時不解釋
{
ucharj;
while(n--)
{
for(j=0;j<113;j++);
}
}
voidmain(void)
{
uchari;//變數
P21=1;//片選?
while(1)
{
for(i=0;i<8;i++)//循環8次
{
DataPort=ScanCode[i];//依次顯示
DelayMs(500);//延時視覺效果
}
for(i=0;i<8;i++)//循環8次反著回來回顯流水效果
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}
⑻ 51單片機C語言如何實現8個流水燈左移三次,後右移三次;如此循環
51單片機C語言實現循環8個流水燈左移三次,後右移三次。
常式:
#include<reg51.h>//51單片機頭文件
#include<intrins.h>//包含有左右循環移位子函數的庫
#defineuintunsignedint//宏定義
#defineucharunsignedchar//宏定義
sbitbeep=P2^3;
voiddelay(uintz)//延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{//delay(500);大約延時500ms.
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()//主函數
{
uchara,i,j;
while(1)//大循環
{
a=0xfe;//賦初值
for(j=0;j<3;j++)for(i=0;i<8;i++)//左移三次
{
P1=a;//點亮小燈
beep=0;//開啟蜂鳴器
delay(50);//延時50毫秒
beep=1;//關閉蜂鳴器
delay(50);//再延時50毫秒
a=_crol_(a,1);//將a變數循環左移一位
}
a=0x7f;
for(j=0;j<3;j++)for(i=0;i<8;i++)//右移三次
{
P1=a;//點亮小燈
beep=0;//開啟蜂鳴器
delay(50);//延時50毫秒
beep=1;//關閉蜂鳴器
delay(50);//再延時50毫秒
a=_cror_(a,1);//將a變數循環右移一位
}
}
}
51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。
⑼ 利用單片機、1個開關、8個LED發光二極體(水平排列)和定時器,實現開關控制循環右移流水燈效果
代碼不想寫,說說思路吧:
單片機每秒採集一次開關狀態,斷開設變數F為0,否則為1。用P0口聯8個LED,置P0為11111110,循環每秒檢測"F"的值,如為1,循環左移一位;如為0,置P0為0。
⑽ 51單片機左右循環移動的流水燈功能,求解答每一句具體含義!
#include<reg52.h>//頭文件包含,包括51硬體寄存器的宏定義,延時函數等
#define uchar unsigned char//宏定義,uchar被定義成unsigned char的簡寫
#define uint unsigned int//同上,uint被定義成unsigned int 的簡寫
#define DataPort P0//dataport(數據埠)被定為成P0口
sbit P21=P2^0;sbit是設置埠的某一位為一個變數,這樣就可以直接對變數進行操作(等價於對埠該位的操作),如sbit led1=P1^1;如果P1^1接的是led的話,led1=1;就可以使led燈點亮了!
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code表示讓單片機把這個定義的ScanCode的值存在ROM(程序存儲區)
定義一個無符號的字元型變數數組ScanCode,其值存放在程序存儲區,寫入之後不可更改
void DelayMs(uint n)//毫秒延時函數,通過設置循環次數,來設定時間
{
uchar j;
while(n--)//直到n減為0退出循環
{
for(j=0;j<113;j++);空循環114次,即延時114個指令周期
}
}
void main(void)主函數
{
uchar i;
P21=1;p2口第1位引腳置高電平
while(1)無限循環
{
for(i=0;i<8;i++)以下大括弧中兩句代碼循環8次,即將ScanCode數組中8位元組數據依次送到p0口
{
DataPort=ScanCode[i];向數據口(即p0口)送數據,數據為ScanCode數組中第i個元素
DelayMs(500);延時500毫秒
}
for(i=0;i<8;i++)同上,將scancode數字的8位元組數據按相反順序再送一次
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}