❶ 用匯編語言讓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
希望能達到你的要求!!!!!
❷ 單片機考試啊 跪求大神單片機練習題 1.用單片機控制8個LED燈,8個LED燈從左到右依次點亮一
while(1)
{recy=0xfe;
for(k=1;k<=8;k++)
{ P1=recy;
Delay(50000);
recy=recy<<1;
}
}
❸ 單片機C語言編程:讓8個LED流水燈以0.2s時間間隔從左到右依次點亮然後重復實現
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int z );
void main()
{
unsigned int a;
unsigned char b=0xfe;
for(a=0;a<8;a++)
{
P1=b;//P1口接8個LED燈
delay(200);
b=_crol_ (b,1);
}
}
void delay(unsigned int z)
{
unsigned int i;
for(;z>0;z--) //延遲時間自己算吧
for(i=110;i>0;i--);
}
用匯編寫這個容易點
main: mov a,#0feh
mov r0,#8
loop: mov p1,a
acall delay
rl a
djnz r0,loop
delay:mov r6,#0ffh
loop1: mov r7,#01h
djnz r7,$
djnz r6,loop1
ret
end
好像是這樣,延遲時間可能不太准,也是P1口接8個LED燈
❹ 單片機用匯編做一個控制8個LED燈泡從左到右依次點亮,最後全部亮,再全部熄滅後重復前面的過程
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//延時
voidDelayMS(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
voidmain()
{
uints;
while(1)
{
P0=0xfe;
DelayMS(150);
for(s=8;s>1;s--)
{
P0=_crol_(P0,1);//P0的值向左循環移動
DelayMS(150);
}
P0=0x00;
DelayMS(150);
p0=0xff;
DelayMS(150);
(4)單片機控制8個燈從左到右擴展閱讀:
常用單片機匯編指令:
1 .MOV A,Rn寄存器內容送入累加器
2 .MOV A,direct 直接地址單元中的數據送入累加器
3 .MOV A,@Ri (i=0,1)間接RAM 中的數據送入累加器
4 .MOV A,#data立即數送入累加器
5 .MOV Rn,A 累加器內容送入寄存器
6 .MOV Rn,direct 直接地址單元中的數據送入寄存器
7 .MOV Rn,#data 立即數送入寄存器
8 .MOV direct,A 累加器內容送入直接地址單元
9 .MOV direct,Rn寄存器內容送入直接地址單元
10. MOV direct,direct 直接地址單元中的數據送入另一個直接地址單元
11 .MOV direct,@Ri (i=0,1)間接RAM 中的數據送入直接地址單元
12 MOV direct,#data立即數送入直接地址單元
13 .MOV @Ri,A (i=0,1)累加器內容送間接RAM 單元
14 .MOV @Ri,direct (i=0,1)直接地址單元數據送入間接RAM 單元
15 .MOV @Ri,#data (i=0,1)立即數送入間接RAM 單元
16 .MOV DPTR,#data16 16 位立即數送入地址寄存器
17 .MOVC A,@A+DPTR 以DPTR為基地址變址定址單元中的數據送入累加器
18 .MOVC A,@A+PC 以PC 為基地址變址定址單元中的數據送入累加器
19 .MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器
20 .MOVX A,@DPTR 外部RAM(16 位地址)送入累加器
21 .MOVX @Ri,A (i=0,1)累計器送外部RAM(8 位地址)
22 .MOVX @DPTR,A 累計器送外部RAM(16 位地址)
23 .PUSH direct 直接地址單元中的數據壓入堆棧
24 .POP direct 彈棧送直接地址單元
25 .XCH A,Rn寄存器與累加器交換
26 .XCH A,direct 直接地址單元與累加器交換
27 .XCH A,@Ri (i=0,1)間接RAM 與累加器交換
28 .XCHD A,@Ri (i=0,1)間接RAM 的低半位元組與累加器交換
❺ 用c語言編寫單片機流水燈程序,(8個發光二極體從左至右循環點亮)
#include<reg51.h>
voiddelay(void)
{
unsignedinti,j;
for(i=0;i<200;i++)
for(j=0;j<1000;j++)
;
}
voidmain(void)
{
while(1)
{
P3=0xfe;//第一個燈亮
delay();//延時
P3=0xfd;//第二個燈亮
delay();
P3=0xfb;//第三個燈亮
delay();
P3=0xf7;//第四個燈亮
delay();
P3=0xef;//第五個燈亮
delay();
P3=0xdf;//第六個燈亮
delay();
P3=0xbf;//第七個燈亮
delay();
P3=0x7f;//第八個燈亮
delay();
}
}
(5)單片機控制8個燈從左到右擴展閱讀
單片機C語言16種方式流水燈
voidmain()
{
while(1)
{
P1=0xfe;//點亮第一個發光管
Delay(5000);
P1=0xfd;//點亮第二個發光管
Delay(5000);
P1=0xfb;
Delay(5000);
P1=0xf7;
Delay(5000);
P1=0xef;
Delay(5000);
P1=0xdf;
Delay(5000);
P1=0xbf;
Delay(5000);
P1=0x7f;//點亮第八個發光管
}
}
❻ 用單片機控制8個LED燈,8個LED燈從左到右依次點亮一次,再從右到左依次點亮一次
假設51單片機,P1口點亮,低電平點亮。
unsigned char x =0xfe,i=0;
for(i=0,i<8;i++)
{
x=_crol_(x,1);
P1=x;
delay500ms();
}
for(i=0,i<8;i++)
{
x=_cror_(x,1);
P1=x;
delay500ms();
}
❼ 單片機八個led 從左到右依次單個點亮,從右到左再依次點亮;然後從左到右每次增加一個led 點亮
#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<8;i++)
{
P1=led;
delay(200);
led=_crol_(led,1);
}
led=0x7f;
for(i=0;i<8;i++)
{
P1=led;
delay(200);
led=_cror_(led,1);
}
led=0xfe;
for(i=0;i<8;i++)
{
P1=led;
led=led<<1;
delay(200);
}
led=0x00;
for(i=0;i<8;i++)
{
P1=led;
led=(led>>1)|0x80;
delay(200);
}
P1=0x7e;delay(200);
P1=0x3c;delay(200);
P1=0x18;delay(200);
P1=0x00;delay(200);
P1=0x18;delay(200);
P1=0x3c;delay(200);
P1=0x7e;delay(200);
P1=0xff;delay(200);
}
}
❽ C語言控制單片機,控制八個流水燈從左到右依次亮,最後又從右到左依次亮回來,一直循環下去,求幫幫忙
假設P1接8 個LED,高電平時LED點亮,主程序如下:
void main(void)
{
uchar i;
while(1)
{
for(i=0;i<7;i++)
{
P1=1<<i;
delay_ms(500);
}
for(i=0;i<7;i++)
{
P1=0x80>>i;
delay_ms(500);
}
}
}
❾ 用51單片機c語言讓八個led亮度自左向右逐漸變亮(pwm)
#include<iom16.h>
#include<avr_macros.h>
voidInit_IO(void)
{
DDRA=0xFF;
PORTA=0x00;
}
/*以上代碼51忽略*/
voidLED1(unsignedcharx,unsignedcharLEDx)
{
unsignedcharCount=0;
Count=LEDx*36;//最小0,最大7*36=252,char型最大不能超過255;
Count=Count+1;//加1的目的是針對LED0不亮
if(x<=Count) //<=是針對LED0不亮
PORTA|=(1<<LEDx);//51怎麼改?。P0|=(1<<LEDx);PWM正占空
else
if(x>Count)
PORTA&=~(1<<LEDx);//51怎麼改?。P0&=~(1<<LEDx);PWM負占空
}
voidmain(void)
{
unsignedchardelay=0;
unsignedcharLEDx=0;
Init_IO();
while(1)
{
delay++;
if(delay==250)
{
delay=0;
LEDx++;
if(LEDx>7)
LEDx=0;
}
LED1(delay,LEDx);
}
}