⑴ 51單片機 8盞花樣流水燈
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV R1,#7 ;
MOV A,#0FCH
LOOP1: MOV P1,A
RL A
CALL DELAY
DJNZ R1,LOOP1
MOV P1,00H
CALL DELAY
CALL DELAY
MOV R1,#7 ;
MOV A,#3FH
LOOP2: MOV P1,A
CALL DELAY
RR A
DJNZ R1,LOOP2
MOV P1,#00H
CALL DELAY
SJMP MAIN
DELAY: MOV R4,#4
MOV R5,#200
MOV R6,#248
DJNZ R6,$
DJNZ R5,$-2
DJNZ R4,$-4
RET
END
註:LED共陽接法
⑵ 單片機流水燈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++);
}
(2)單片機8個流水燈實驗報告擴展閱讀
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);
}
}
}
⑶ 51單片機匯編控制8個流水燈
思路:
循環控制常亮狀態的值,將其從最高位循環到最低位。這個用於最後狀態的常亮
在常亮循環中,控制不是常亮的其它所有位進行再次循環,逐漸從最低位亮滅循環到最高位
代碼如下:
#include<reg51.h>
unsignedcharPData;//整體結果
unsignedcharCurrData;//變化的最高位
//延時,本函數是非精確延時,若需要精確延遲則需要根據本函數的匯編語句進行精確計算後調整循環體次數
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全滅狀態
for(i=8;i>0;i--){//控制常亮的位置,先從最高位開始,依次循環到最低位
for(j=0;j<i-1;j++){//從最低位循環到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位滅
delay(500);
}
PData=PData+(1<<(i-1));//置最高位為常亮狀態
P1=~PData;
delay(500);
}
//停機
while(1){
;
}
}
⑷ 單片機led左右燈實驗:要求: 八個LED燈依次向左再向右,循環點亮,間隔閃爍
你現在的程序就有問題啊。我給你改改吧。一會兒給你發程序附件。你要的就是流水燈程序唄,就是先從左向右依次點亮led燈然後在從右向左依次點亮對吧。
程序已經給你傳到附件裡面了,用電腦下載吧,傳的c程序你可以直接用。有什麼不懂的再問我吧。(你的編程風格很有問題啊,程序寫的一坨,層次不清晰沒有標注,我初學的時候也犯了這樣的錯誤,將來你寫大篇幅的程序的時候會出現一堆問題的,清晰地編程風格非常重要,僅僅是建議。)
⑸ 單片機原理流水燈實驗報告
單片機原理流水燈實驗報告:
本實驗的目的是通過使用單片機,來實現流水燈的功能。實驗中,使用了AT89C51單片機,通過設置定時器,實現了不同的流水燈燈序,並使用外部中斷按鍵,來控制流水燈的開關。實驗的結果表明,單片機通過定時器和外部中斷按鍵,可以實現流水燈的功能。
拓展:本實驗的
拓展可以包括,使用其他單片機,如STC89C52、STM8S103等,來實現流水燈的功能;另外,可以在實驗中增加按鍵,實現不同的燈序變化;可以添加LCD顯示屏,顯示當前燈序;還可以通過設置定時器,實現時間控制,實現定時開啟和關閉流水燈。
⑹ 用51單片機編寫8盞流水燈程序,
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#0FEH
MOVR2,#8
LOOP:
MOVP0,A
LCALLDELAY
RLA
DJNZR2,LOOP
CPLA
LCALLDELAY
CPLA
LCALLDELAY
RLA
LCALLDELAY
CPLA
LCALLDELAY
MOVR2,#7
SJMPMAIN
END
⑺ 單片機8個流水燈的作業 幫忙看看
voidmain(void)
{
charj,k;
P0=0x00;
while(1)
{
for(j=0;j<8;j++)
{
P0=P0+pow(2,j);//0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff
delay();
}
for(k=7;k>=0;k--)
{
P0=P0-pow(2,k);//0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00
delay();
}
}
}
如果你是亮1個,2個,3個。。。8個,7個,6個。。。1個,0個,1個。。。就是這樣
如果你是每次都亮一個,只是每次亮的都不同,就應該按下面來寫
voidmain(void)
{
charj,k;
while(1)
{
P0=0x00;
for(j=0;j<8;j++)
{
P0=pow(2,j);//0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
delay();
}
for(k=6;k>=0;k--)
{
P0=pow(2,k);//0x40,0x20,0x10,0x08,0x04,0x02,0x01
delay();
}
}
}
⑻ 單片機實驗點亮流水燈程序從第三個燈開始循環點亮 一個共有8個燈哦
led是哪個口控制的?假設是p1吧,那P1的初值就是11011111(0xdf),這表示剛開始是第三個燈亮。
之後就用左移或者右移的函數就行了,挺簡單的
⑼ 單片機8個流水燈程序 要求:間隔0.5秒流水燈一次(01234567) 兩盞流水一次(01,23,45,67) 閃亮一次(8盞燈亮滅
#include<reg51>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar t)
{
uchar x;
for(x=0;x<t;x++)
{
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=0;
}
}
uchar code display[]={0x03,0x06,0x60};
uchar k,m;
void main()
{
while(1)
{
TMOD=0x01;
for(m=0;m<3;m++)
{ P1= display[k];
delay(10);
}
}
順手寫的覺得好就採納吧