Ⅰ 51單片機流水燈執行10次 全部閃爍一次 一直循環十次閃爍一次 c語言怎麼寫
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
main()
{
uchari,led;
while(1)
{
led=0xfe;
for(i=0;i<80;i++)
{
P0=led;
led=_crol_(led,1);
delay(200);
}
P0=0x00;
delay(200);
P0=0xff;
delay(200);
}
}
Ⅱ 51單片機做計數顯示時,數字不連續,一閃一閃的。
當然會閃啦,你在每次中斷時掃描LED,間隔太長啦!請用以下改過的程序:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,shi,ge;
uchar code table[]={ 0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};
void delay(uint z);
sbit com0=P2^7;
sbit com1=P2^6;
bit flag;
void main()
{
aa=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1){
if(aa==20)
{
aa=0;
temp++;
if(temp==60)temp=0;
shi=temp/10;
ge=temp%10;
}
P1=table[ge] ;
com1=0;
delay(10);
com1=1 ;
P1=table[shi];
com0=0;
delay(10) ;
com0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
Ⅲ 51單片機上電時閃一下怎麼解決
這是8051單片機的一個弱點。因為8051單片機不像AVR,PIC等單片機上電時I/O全部設為浮空的高阻態。然後由軟體定義它是輸入態還是輸出態。8051上電復位時定義成「1」。即8051上電時,所有的I/O口輸出高電平。這種解決方法只有:
一. 你想辦法把你的負載,(比如說LED)用灌電流驅動(即輸出為0來驅動它)
二. 如果非要用高電平驅動,你先接一個反相器。(比如74HC04)把上電時的1變成0.然後程序里輸出0的話,反相器輸出1。這樣變相的達到高電平控制
三. 根本方法是你不用51單片機,改用其他單片機。比如PIC,AVR等單片機。
註: 8051它的I/O口是准雙向口。不能用軟體定義它是輸入還是輸出口。如果要輸出某個值。直接寫「1」或者「0」就行了。如果是輸入先寫「1」,然後再讀I/O口的狀態。
Ⅳ 51單片機按鍵時,數碼管會閃爍一下.原因是什麼
原因很簡單,這是代碼和數碼管驅動的問題
按鍵會影響數碼管顯示,這是單片機直接驅動數碼管會出現的問題,而數碼管則是工作在動態掃描方式的,若是採用帶有鎖存器件的數碼管驅動,則不會出現此類現象,因為單片機是周期性的掃描工作方式,單片機直接驅動數碼管的電路,當單片機掃描到按鍵的時候,數碼管部分就停止了(一般的代碼都這樣,除非數碼管是工作在靜態掃描方式)
直接驅動數碼管,按鍵的代碼一般都會寫一些延時,用來軟體消除按鍵的抖動,若延時的時間太長,就會影響數碼管的顯示效果,另外有些還會增加等待按鍵松開的語句,這種語句一般都是一個死循環,除非按鍵被松開
解決辦法是,減少按鍵消抖動延時的時間,在等待按鍵松開的死循環語句中調用數碼管顯示函數,這樣基本上就可以解決此類問題
Ⅳ 對於下面的51單片機LED閃爍實驗C程序,為什麼LED會一直不停地閃爍,而不是閃爍一次呢
因為你的代碼後面的「空白」處都是復位命令,所以你的代碼執行完了就復位了,就閃啦。。
Ⅵ 51單片機數碼管顯示不停閃爍
動態顯示,顯示程序的調用,不能有條件。
必須不停的調用。
你的顯示程序,是滿足了什麼什麼條件,才調用一次?
這就耽誤事了。
你顯示的時候,先顯示分,僅僅顯示幾個毫秒,之後,就顯示秒。
秒,顯示幾個毫秒,之後,沒有消隱,一直顯示到下次調用顯示程序。
所以,秒,顯示穩定,分,一閃就沒了。
Ⅶ 51單片機按鍵按下的瞬間,數碼管會閃一下
標志位都是單片機系統自動置位或復位,如標志位溢出,需要在寫程序時清0或者置位。用的時候檢測標志位,如中斷while(!TI)TI=0;,一旦TI置1,說明數據發送完畢。
Ⅷ 51單片機使燈閃爍,我寫的程序按一下開始閃爍,在按一下為什麼不能熄滅呢
void main()
{
L1=0;
if(K1==0) //1 按鍵按下後
{
Delay10ms(); //2 延時去抖動
if(K1==0) //3 確認按下
{
L1=0; //4 以下4句閃爍一次
Delay(1000);
L1=1;
Delay(1000);
}
while(1) //5 這里死循環,不能再執行上面的語句了。
{
while(!K1) //6 判斷按鍵是否按下,如果按下,則延時10ms,再判斷是否按下,一致循環,知道你松開手。
{
Delay10ms();
}
while(!K1); //7 按鍵按下話,一致死等,直到你松開手
{ //8 下面閃爍一次。
L1=0;
Delay(1000);
L1=1; // 9
Delay(1000);
}
}
}
}
你的程序來看,工作流程是這樣的,開機後,按下按鍵不放,只閃爍一次。如果你放開你的手,釋放按鍵,則LED一致閃爍。
你說再按一下為什麼不熄滅,因為 標示9句那裡置1了,你的硬體應該是L1置1亮吧?
因為L1=1,是你燈閃爍的最後一個狀態,而後又會從5再次執行,如果你按下了按鍵,程序停在了6那裡死循環,
則後面7,8都不會執行了。燈則保留了上一個循環最後的狀態,也就是9的狀態,所以就一致亮了。
你如果又松開按鍵,燈又會閃爍,你再按下按鍵,燈又一直亮了。如此循環。
你的程序的就是一個字概括,亂,你的思路很混亂,條理不清晰,建議先在紙上寫下流程,再來寫代碼。想清楚了再下手。
你會學的很快的。
你的main函數有個性,呵呵,沒有人會這么寫main函數的,去看看單片機C語言的書吧!
Ⅸ 51單片機按鍵時,數碼管會閃爍一下.原因是什麼
原因很簡單,這是代碼和數碼管驅動的問題
按鍵會影響數碼管顯示,這是單片機直接驅動數碼管會出現的問題,而數碼管則是工作在動態掃描方式的,若是採用帶有鎖存器件的數碼管驅動,則不會出現此類現象,因為單片機是周期性的掃描工作方式,單片機直接驅動數碼管的電路,當單片機掃描到按鍵的時候,數碼管部分就停止了(一般的代碼都這樣,除非數碼管是工作在靜態掃描方式)
直接驅動數碼管,按鍵的代碼一般都會寫一些延時,用來軟體消除按鍵的抖動,若延時的時間太長,就會影響數碼管的顯示效果,另外有些還會增加等待按鍵松開的語句,這種語句一般都是一個死循環,除非按鍵被松開
解決辦法是,減少按鍵消抖動延時的時間,在等待按鍵松開的死循環語句中調用數碼管顯示函數,這樣基本上就可以解決此類問題
Ⅹ 51單片機流水燈執行10次 全部閃爍一次 一直循環十次閃爍一次 c語言怎麼寫
#include<reg51.h>
#defineucharunsignedchar
voiddelay(uchara)
{
uchari;
whilie(a--)for(i=0;i<110;i++);
}
main()
{
uchari,j;
for(i=0;i<10;i++)
P0=0xfe;
for(j=0;j<8;j++)
{
P0=_crol_(P0,1);
delay(200);
}
}
P0=0x00;
delay(200);
P0=0xff;
delay(200);
while(1);
}