⑴ c51單片機流水燈程序閃3次左移怎麼回事
二極體的陰極接了單片機。c51單片機產品信息顯示,二極體的陰極接了單片機的情況下,流水燈程序會出現故障,具體為閃3次左移,產品出現故障提示。單片機是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU的晶元。
⑵ 關於單片機流水燈左移右移的問題
51單片機
的左移右移,首先在開始要調用"intrins.h"的文件包,這個文件包含_cror_(右移),_crol_(左移);然後通過for語句來控制;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(k=250;k>0;k--);
理解這三句,第一句是指:m=20;m>0然後m--是真就執行:
for(n=20;n>0;n--)
for(k=250;k>0;k--);
這兩句,m--一直減,減一次,裡面就執行一次,這里是20次。
流水燈的左右移,第一用"intrins.h"的文件包,第二要要會定義賦值變數,第三延時,這是關鍵。
⑶ 如何實現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已經算是非常優越的了。
⑷ 單片機右移到左移,左移到右移的花樣流水燈程序問題
LED燈右移到最右邊後向左移時是這樣的:右移一位→第二個延時程序→第一個延時程序→右移右移一位→第二個延時程序→第一個延時程序,這樣不斷循環,循環到最左邊,就開始了右移的程序。
這樣左移的延遲大一點的!
⑸ 請問金沙灘51單片機中,先是左移到頭,然後再右移到頭的花樣流水燈程序該怎麼寫
/*單片機,用定時中斷實現每隔0.2秒讓接在P1口的8個小燈從左往右循環點亮。*/ #include #include #define uchar unsigned char uchar a,b; uchar b=1; uchar a=0xfe; void main() { EA=1;IT1=1;ET0=1; TH0=-5000/256; TL0=-5000%256; TMOD=0x01;...(火星人)2086
⑹ 51單片機按鍵控制流水燈左移
開始學習單片機的同學們寫注意了,在運行程序後,現象不正確的時候,不要首先就找軟體的錯誤,我的經驗是從源頭開始找問題,首先你得確定你的平台是正確的,
你說是按鍵沒效果,先用萬用表測試一下你的引腳的電平,是否被拉低了
如果按鍵沒問題,你就檢查_crol_(P0,1);這句,查一下頭文件是否被包含,我個人建議自己作個移位函數
雖然程序中還有別的問題,但不會造成你一在按鍵沒效果的現象!
如果你是想學硬體的人,你可以這么玩下去,如果你是想編程,建議你先寫段時間(可能是很長時間)的C語言,至少能寫個畫形動畫或是圖書館管理程序出來後再去學單片機吧,不然真心覺得你會學得很慢,而且進步很慢
⑺ 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單片機是基礎入門的一個單片機,還是應用最廣泛的一種。
⑻ 單片機c51流水燈一亮一閃依次左移編程
下面是採用定時器定時1S(時鍾晶振是11.0592MHz)的流水燈程序。採用左移函數_crol_(),此函數包含在intrinsic.h的頭文件內。有不懂得再問,需要匯編的話,留言,再寫給你。
#include<reg52.h>
#include<intrins.h>
unsigned
int
a,temp;
void
main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
temp=0xfe;
while(1)
{
if(a==20)
{
a=0;
P1=temp;
temp=_crol_
(temp,1);
}
}
}
void
T0_time0()interrupt
1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
a++;
}
⑼ 單片機流水燈實驗原理
上一節我們介紹了什麼是匯流排的方法,以及如何通過十六進制來控制IO口。並把我們的之前單點操作的流水燈進行了改進,成為了一個新的更加簡潔的程序。這回,就再用匯流排方法,來實現流水燈的更加多樣化的操作。
這次,我們要實現正向流水結束後再反過來流水,如此循環。然後再間隔閃爍。然後再累積流水,最後結束。
正向流水結束,再反過來。這個如何實現呢,我們需要使用到一些運算方法。
第一個是移位指令<<。
由於數字對比不強,看的不是很清晰,所以把數字給換成紅色了。
<<這個標志符的意思是,向左移動一位,就像下邊這樣:
1111 1111》1111 111_
移動完成後,會發現,最低位空出來了,此時程序會自動去填補一個0。於是就成了:
1111 1111》1111 111_》1111 1110
第一次移位1111 1110,第二次在第一次基礎上移位1111 1100,第三次在第二次基礎上移位1111 1000,如此循環,就可以一直把所有位都變成0。
我們在看下一句"|",這個符號是或的意思,我們知道,邏輯中的或,是說只要有其一為一,結果就是一。所以,我們把1100|0001,結果就是頭兩個一和最後一個一留下來,第三位因為都是0,所以就是0.結果就是1101了。當再次移位後,數據就變成1010了,我們再次跟0001取或,最後一位就再次置1,結果就是1011,從結果上看,1110》1101》1011……就是0在不斷的左移。
通過這個方法,可以讓每一位都會單獨置零。然後再給以一定時間的延時,就會看到流水燈了。
如果我們不賦初值0xfe會出現什麼情況?
就會出現,移位產生一個0,在或運算時就會被重新置1,如此循環,就進入不到第二個LED,也就不會出現流水燈了。可以自己嘗試下。
向右流水,效果是一樣的,需要注意的是初值更改為左側為0,就是0x7f,0111 1111,然後移位符號>>,還有取或的語句需要用0x80,1000 0000.
基本上是在左移位的基礎上稍作修改即可。
接下來是閃爍的。
閃爍,我們用的是間隔LED的方法,就是隔一個亮一個,埠輸出是1010 1010。翻譯成十六進制就是0xaa。這次用到的是一個取反的運算,就是把每一位的0變成1,1變成0,然後延時一段時間,再次取反,循環幾個周期,就看起來像是不斷閃爍。取反的操作相對好理解一些,就是這一位,現在是1,那麼取反後就是0,就是0和1的變換。
最後是一個累積點亮LED。
這個程序就是把第一個我們向左移位的函數,進行了更改,取消了賦初值,不用取或了,這樣就可以對比著理解,各個語句的作用,如果不使用,會產生什麼結果。如果我們的第一個函數不用取或這一步,那最終輸出結果就和這個現象一樣了。
所以,我們在寫程序時,需要認真,仔細分析自己需要的結果,然後對照程序進行簡單的演算。保證每一段都是可以輸出想要的結果,不然累積到最終,幾百行的代碼,看起來就會頭疼的,尤其是在沒有標注釋的情況下,有時就會忘記自己為什麼要寫這一句。
好的,這篇先說到這里,有問題或建議可以留言或私信給我。
想了解更多精彩內容,快來關注小亮談電氣
更多多內容,歡迎關注百家號:小亮談電氣。微信公眾號:電氣學苑。