❶ 用汇编语言让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);
}
}