『壹』 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(1)單片機延時程序500ms擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
『貳』 時鍾頻率為12MHZ, 如何利用51單片機定時/計數器定時500ms
我說一下原理
12MHZ的51單片機,定時器最大隻能定時65.535ms,所以要定時500ms的時間,
需要產生10次50ms的定時。
步驟如下:
1、每隔50ms定時器中斷溢出,計數+1。
2、當計數達到10次時,便產生了500ms的定時啦,然後,你自己根據你的設計,需要讓單片機做什麼就自己寫些什麼(比如讓某個io口取反)
3、計數達到10次後,不要忘了初始化計數。
最後給點建議:1、要讓定時器計數50ms,只能在定時器的工作方式1下進行;
2、定時器初值: TH0 = 0x3C; TL0 = 0x0B0;(我使用的是定時器0)
思路和原理都給你了,只要你看懂了,想讓計時器計時多少s都如魚得水。
『叄』 單片機c語言的延時程序500ms
一般單片機在c語言中很難得到精確的延時,所以一般對時間要求高的都用計時器中斷來做了。如果時間要求不嚴格可以用for循環來做,你可以實際測試一下,把時間延時到大概一秒左右,然後燒進單片機里運行,比如一個燈亮燈滅的程序,看著燈計數,同時用秒錶計時,幾個幾十次後取平均值就能知道大概時間了。
『肆』 單片機實驗p1.0燈亮500ms滅500ms使用定時器怎麼編程
很簡單,大致思路如下:
1、在初始化程序中設置定時器初值為50ms,同時定義一個計數變數,P1.0置1(假定低電平點亮LED)。
2、在定時器中斷服務程序中,重裝定時器初值,計數變數加1,判斷計數變數是否等於10,如果等於10則取反P1.0,同時計數變數清零,否則,中斷返回。
『伍』 求單片機高手幫我算下這個延時程序的500ms是怎麼算出來的
設51系列單片機晶振頻率Fosc為12MHz
則第個機器周期 =12/Fosc =1μs
.
每條MOV Rn,#data指令耗用1個機器周期
6條NOP指令執行耗用6個機器周期
每條DJNZ Rn,rel指令耗用2個機器周期,
D2內循環耗用機器周期數N2=1+(6+2)250 =2001
D1外循環耗用機器周期數N1=1+(N2+2)250=500751
運行整段程序耗用機器周期數N=1+N1=500752
.
運行整段程序延時時間 =500752x1μs ≈500ms
『陸』 單片機匯編語言流水燈,定時器中斷控制,(500ms)延時
單片機匯編語言流水燈,用定時器中斷控制,可以初始化設置定時器時間(如50mS註定時器最大定時時間到不了500mS,需要加計數存儲,中斷10就是500mS),有多種方式實現如作一個流水狀態表,定時讀取寫入IO埠 表加一,,或者用左移太移等方式都可以實現在,網上有很多這種實例。
『柒』 單片機延遲500ms試寫出延遲程序
根據外部晶振的不同,延時1毫秒的循環次數也不一樣,一般12m晶振的話用
for(j=time;j>0;j--);延時時,1毫秒time大概為125左右,這里用110,大概晶振為11.0592m,所以這段程序,內部循環完成1毫秒延時,外部循環完成500毫秒延時。