1. 用匯編語言讓51單片機八個燈從左到右依次點亮且都不滅,每個燈亮的時
用匯編語言讓51單片機八個燈從左到右依次點亮且都不滅,每個燈亮的時間間隔0.5秒,然後全滅,再循環之前的步驟。
參考如下:
電路
LED_COUNT DATA 30H
T0_COUNT DATA 31H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0030H
MAIN:
ANL TMOD,#0F0H
ORL TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
ORL IE,#82H
SETB TR0
CLR F0
MOV LED_COUNT,#00H
MOV T0_COUNT,#00H
MOV DPTR,#TAB
M1:
JNB F0,M2
CLR F0
MOV A,LED_COUNT
MOVC A,@A+DPTR
MOV P2,A
INC LED_COUNT
MOV A,#9
CJNE A,LED_COUNT,M2
MOV LED_COUNT,#00H
M2:
SJMP M1
T0_INT:
MOV TH0,#3CH
MOV TL0,#0B0H
INC T0_COUNT
MOV A,#10
CJNE A,T0_COUNT,T
MOV T0_COUNT,#00H
SETB F0
T:
RETI
TAB:
DB0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH
END
希望能達到你的要求!!!!!
2. 如何用單片機實現流水燈,從一依次亮到八,再從八依次亮
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件。
#define uchar unsigned char //定義無符號字元。
#define uint unsigned int //定義無符號整數。
void delay(uint); //聲明延時函數。
硬體特徵
1、單片機的體積比較小, 內部晶元作為計算機系統,其結構簡單,但是功能完善,使用起來十分方便,可以模塊化應用。
2、單片機有著較高的集成度,可靠性比較強,即使單片機處於長時間的工作也不會存在故障問題。
3、單片機在應用時低電壓、低能耗,是人們在日常生活中的首要選擇, 為生產與研發提供便利。
3. 求大神編程一個51單片機的8燈點亮程序。
點燈的方法是由硬體連接方式決定的,以P1囗的8條引腳連接8隻LED為例,8隻LED共陽極連至電源,則P1口某位為0時,對應LED點亮,為1時LED熄滅。例如熄滅全部LED操作為
P1=0xFF,
點亮第一隻LED操作為
P1=0xFE,
同時點亮第一,二隻LED操作為
P1=0xFC,
其它可類推。
4. 單片機C語言,將8個燈依次點亮(被點亮的繼續亮),然後再依次熄滅,(在沒有熄滅完時熄滅的保持滅)
其次,我建議還是自己嘗試寫一寫,這個不難,我給你個思路
首先定義變數類似於P1_2 = P1^2這種,先把這八個管腳全部定義好,之後給個for循環,讓P1(假設的你LED燈連接的是P1口)口的P1^0~P1^7相關標志位依次等於0或者1(0還是1需要看你在LED等上給的是高電位亮還是低電位亮),之後再給個for循環,五次的循環,全部P1口置為1(假設高電平LED亮),之後設置P1口全為1,再讓P1口的相關標志位置為0,再置為0的時候可以加個延時
5. c51單片機匯編語言,八個小燈,依次亮燈,間隔0.5s,最後一個點亮後,全部滅掉,請教大神怎麼編程
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#0FEH
MOVR2,#8
LOOP:
MOVP0,A
LCALLDELAY
CLRC
RLCA
DJNZR2,LOOP
MOVP0,#0FFH
SJMP$
DELAY:
MOVR3,#10
DLY1:
MOVR4,#100
DLY2:
MOVR5,#250
DJNZR5,$
DJNZR4,DLY2
DJNZR3,DLY1
RET
END
6. 51單片機8個led向左循環依次點亮,按一下開關後往右循環一次後繼續向左循環
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
uchartime=0,num,led=0xfe;
bitflag=0;
sbitkey=P2^0;
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=10)
{
time=0;
if(flag==0)
{
P0=led;
led=_crol_(led,1);
}
else
{
P0=led;
led=_cror_(led,1);
num++;
if(num>8)flag=0;
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
flag=1;
num=0;
}
}
}
7. 單片機流水燈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++);
}
(7)51單片機八個燈依次亮的編程擴展閱讀
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);
}
}
}
8. 要求用51單片機控制8個LED亮滅的原理圖+程序+解說
本來以為這個程序很簡單的,沒想到寫了快三個小時。哎學藝不精啊。貼出來給你研究吧。我不想做過多的解釋了,我是按我理解的你出的題目做的,可能和你的本意不是很一樣,
1、依次亮,依次滅:從一個燈亮到全亮,再到全滅,每次改變一個燈亮滅
2、奇偶號燈間隔亮滅:隔一個燈亮一個燈亮燈時間為1s,沒有燈全滅的時候
3、依次閃爍、切換時間為3秒,閃爍時間為2秒,我理解的是,沒三秒鍾有一個燈在閃爍,其中有一秒鍾是滅燈狀態
程序中使用了P1口與8個發光二極體相連,具體電路圖你網路一下吧,還有使用了一個按鍵,該按鍵與P3.7相連,低電平為按下狀態。
程序如下:
#include <reg52.h>
#include <intrins.h>
/*變數聲明:
i、j、k都是記錄計時器溢出次數的變數,
stat是記錄當前顯示狀態的變數,由按鍵key控制
temp是狀態2中保護P1口狀態的變數*/
unsigned char i=0,j=0,k=0,stat=0,temp;
bit flag=1; //狀態1處於滅燈還是亮燈狀態的變數,1為依次亮燈,0為依次亮燈
sbit key=P3^7; //按鍵控制
void init(); //初始化函數
void delay(unsigned int N); //延時函數
void keyscan(); //鍵盤掃描函數
void main()
{
init();
while (1)
{
switch (stat)
{
case 0: //0方案
if(i==20&&flag)
{
i=0;
P1=P1<<1; //依次亮燈
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20&&!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P1<<1; //依次滅燈
temp=P1;
P1=temp+1;
}
}
break;
case 1: //2方案
if(i==20)
{
i=0;
P1=~P1; //去反後亮燈狀態為滅燈,P1初值取0x55或0xaa,奇偶交替亮燈
}
break;
case 2: //3方案
if(j==60)
{
P1=temp;
P1=_crol_(P1,1);
temp=P1; //保護P1口亮燈狀態
k=0;
j=0;
}
//閃爍部分,應該可以優化
if(k<5)
{
P1=0xff;
}
else if(k>=5&&k<10)
{
P1=temp;
}
else if(k>=10&&k<15)
{
P1=0xff;
}
else if(k>=15&&k<20)
{
P1=temp;
}
else if(k>=20&&k<25)
{
P1=0xff;
}
else if(k>=30&&k<35)
{
P1=temp;
}
else if(k>=35&&k<40)
{
P1=0xff;
}
//-----------------------------------
break;
}
keyscan();
}
}
void init()
{
TH0=0x3c; //定時器賦初值定時時間50ms
TL0=0xB0;
TMOD=0x01; //設置定時器工作方式為方式1
EA=1; //開總中斷
ET0=1; //開中斷允許位
TR0=1; //定時器計數
P1=0xfe; //這里假設led燈與P1口相連並且
//低電平有效
}
void delay(unsigned int N)
{
int i,j;
for (i=0;i<N;i++);
for (j=0;j<110;j++);
}
void keyscan()
{
if(!key)
{
delay(10); //消抖
if(!key); //確認有鍵按下
stat++;
if(stat==3)
{
stat=0;
}
//右鍵按下復位
i=0;
j=0;
k=0;
TH0=0x3c;
TL0=0xB0;
switch (stat)
{
case 0:
P1=0xfe;
flag=1;
stat=0;
break;
case 1:
P1=0x55;
break;
case 2:
P1=0xfe;
temp=P1;
break;
}
//-----------------------------------
while(!key) //此循環中的函數和主函數中的顯示函數是同一個
//用於長按鍵的顯示,可以去掉,去掉長按鍵不會正常顯示,松開按鍵後正常
{
switch (stat)
{
case 0:
if(i==20&&flag)
{
i=0;
P1=P1<<1;
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20&&!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P1<<1;
temp=P1;
P1=temp+1;
}
}
break;
case 1:
if(i==20)
{
i=0;
P1=~P1;
}
break;
case 2:
if(j==60)
{
P1=temp;
P1=_crol_(P1,1);
temp=P1;
k=0;
j=0;
}
if(k<5)
{
P1=0xff;
}
else if(k>=5&&k<10)
{
P1=temp;
}
else if(k>=10&&k<15)
{
P1=0xff;
}
else if(k>=15&&k<20)
{
P1=temp;
}
else if(k>=20&&k<25)
{
P1=0xff;
}
else if(k>=30&&k<35)
{
P1=temp;
}
else if(k>=35&&k<40)
{
P1=0xff;
}
break;
}
}
}
}
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xB0; //溢出後重新賦初值
//定時器中斷時間為50ms
i++; //20次中斷時間為1s
j++; //40次中斷時間為2s
k++; //60次中斷時間為3s
}
有什麼不懂的可以網路Hi我
9. 單片機控制8個燈依次亮,全亮了,再依次滅的c語言流程圖,順便加上解釋,不然看不懂
1、創建項目,如圖所示。