导航:首页 > 操作系统 > 51单片机汇编控制二极管

51单片机汇编控制二极管

发布时间:2022-06-20 04:31:46

⑴ 用51单片机控制8个发光二极管从左往右循环流水发光,用汇编语言编程,管脚接p0.0―p0.7。

org 0000h
ajmp start
org 0200h
start:mov r0,#8
mov a,#feh
loop:mov p1,a
acall delay
rl a
djnz r0,loop
ajmp start
delay:
mov r1,#100
l1:mov r2,#100
l2:mov r3,#248
l3:djna r3,l3
djnz r2,l2
djnz r1,l1
ret
end

⑵ 51单片机控制两个发光二极管的电路图 和程序

你好!很高兴能为你回答!如有疑问可以联系!如图所示:在P1.0、P1.1端口上各接一个发光二极管L1、L2,使L1、L2在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
如图所示的石英晶体为12MHz,因此,1个机器周期为1微秒
机器周期
微秒
MOV
R6,#20
2个机器周期
2
D1:
MOV
R7,#248
2个机器周期
22+2×248=49820×
DJNZ
R7,$
2个机器周期
2×248
498
DJNZ
R6,D1
2个机器周期2×20=4010002
因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:
DELAY:
MOV
R5,#20
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
(2).
输出控制
如图所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。P1.1同理;
5.
程序框图

如图4.1.2所示
图4.1.2
6.
汇编源程序
ORG
0
START:
CLR
P1.0SETB
P1.1
LCALL
DELAY
SETB
P1.0CLR
P1.1
LCALL
DELAY
LJMP
START
DELAY:
MOV
R5,#20
;延时子程序,延时0.2秒
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
END
7.
C语言源程序
#include
<AT89X51.H>
sbit
L1=P1^0;sbit
L2=p1^1;
void
delay02s(void)
//延时0.2秒子程序
{
unsigned
char
i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void
main(void)
{
while(1)
{
L1=0;L2=1;
delay02s();
L1=1;L2=0;
delay02s();
}
}

⑶ 用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮,并循环。

一、#include<reg51.h>

void delay(unsigned char Xms)//延时Xms

{

int i,j;

for(X = i; X>0; X--)

for(j=110;j>0;j--);

}

void main()

{

P0 = 0x00; //P0.0~P0.7分别接八个发光二极管,刚开始全灭

while(1)

{

delay(1000);

P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1;

delay(1000);//延时1秒

P0 = 0x30;//点亮第三个和第四个LED

delay(1000);

P0 = 0x0c;

delay(1000);

P0 = 0x03;

}

}

二、

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar temp, t0, t1;

bit t2;

sbit P10 = P1^0;

void main()

{

P10 = 1;

temp = 0xfe;

P0 = temp;

P2 = 0xff;

TMOD = 0x01;

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

ET0 = 1;

EA = 1;

TR0 = 1;

while(1);

}

void timer0() interrupt 1

{

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

t0++;

if(t0 == 10) {

t0 = 0;

t1++;

if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}

temp = _crol_(temp, 1);

if(t2) {P0 = temp; P2 = 255;}

else {P2 = temp; P0 = 255;}

}

}

(3)51单片机汇编控制二极管扩展阅读:

例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。

顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。

⑷ 如何用51单片机依次点亮24个二极管

51单片机共4个端口,每个端口8位,一共32位,如果没有别的要求,占用3个端口刚刚好接24个led,程序如下:
#include<reg51.h>
#include<intrins.h>
sbit led1 P0^0
sbit led2 P0^1
sbit led3 P0^2
sbit led4 P0^3
sbit led5 P0^4
sbit led6 P0^5
sbit led7 P0^6
sbit led8 P0^7
void main()
while(1)
{
led1=0;
_nop_();
led2=0;
_nop_();
led3=0;
_nop_();
led4=0;
_nop_();
led5=0;
_nop_();
led6=0;
_nop_();
led7=0;
_nop_();
led8=0;
_nop_();
P0=1
}
只写了其中一个端口,其余端口一样的,一直续下去就可以了。

⑸ c51单片机按键控制二极管亮灭

做按键用的脚通过一个常开按钮开关接地,按下开关就使这个脚接地,即电压为0,在程序中要先将此脚写1再判断此脚是否为0,为0时说明已经按下了此开关,再用程序延时10-20mS消抖,再判一次,如果还是0说明不是干扰,就执行控制二极管的程序,点亮二极管的脚最好用低电平驱动,就是不亮时写1,需要亮时写0,原理是这样,用C还是用汇编都一样,很简单

⑹ 怎样用51单片机控制很多的发光二极管,例如54个

控制很多的发光二极管,那就用锁存器吗,一片可以锁存控制8个二极管,再多也可以的。
锁存器有很多的,如74HC273,74HC373,74HC374,74HC377,74HC573,等等。
或都用74HC595,多片串联,就是单片机3个脚就够了。

⑺ 用51单片机控制八个发光二极管

// 51单片机控制八个发光二极管 左右循环。

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改变这里 LED 各种花样

uchar t,i;

void main()

{

TMOD=0x10;

TH1=(65535-50000)/256; // 50ms一次

TL1=(65535-50000)%256;

EA=1;

ET1=1;//开定时器1中断

TR1=1;//启动定时器1

t=0;

i=0;

while(1)

{

}

}

void timer1() interrupt 3

{

TH1=(65535-50000)/256; // 50ms一次

TL1=(65535-50000)%256;

t++;

if(t==20)

{

t=0;

P2=TAB[i];

i++;

if(i==18) { i=0;}

}

}

⑻ 用51单片机汇编语言控制8个发光二极管

KEY1 BIT P3.2
KEY2 BIT P3.3
ORG 00H
MOV P3,#255
MOV A,#254
MOV P1,A
continue:
JNB KEY1,right
JNB KEY2,left
JMP continue
right:
RR A
MOV P1,A
ACALL DELAY
JMP continue
left:
RL A
MOV P1,A
ACALL DELAY
JMP continue
DELAY:
MOV R7,#250
LP2:MOV R6,#200
LP1:NOP
DJNZ R6,LP1
DJNZ R7,LP2
RET
END

⑼ 跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从左向右移动,时间间隔0.5秒。

MAIN:
MOV
P1,
#11111110B
;
P1

点亮一个发光二极管
ACALL
DELAY
;
调用延时子程序
MOV
P1,
#11111101B
;
从左向右移动
一位
ACALL
DELAY
MOV
P1,
#11111011B
ACALL
DELAY
MOV
P1,
#11110111B
ACALL
DELAY
MOV
P1,
#11101111B
ACALL
DELAY
MOV
P1,
#11011111B
ACALL
DELAY
MOV
P1,
#10111111B
ACALL
DELAY
MOV
P1,
#01111111B
ACALL
DELAY
JMP
MAIN
;
转移

MAIN
循环
DELAY:
MOV
R5,#250
;
延时子程序
6.000
M
晶振

0.5

D1:
MOV
R6,#250
D2:
DJNZ
R6,$
DJNZ
R5,D1
RET

⑽ 51单片机汇编语言程序,一个按键控制两个发光二极管的同时闪烁,交替闪烁,

;P1.0 P1.1接2LED,P2.0接一按键。上电2LED不亮,按第1 次键2LED同时以1S周期闪烁,按第2 次 2LED轮流1S闪烁...同此循环。
;11 04 17

ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV TMOD,#01H ;
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV R0,#10

KEY:
ACALL DISP
JB P2.0,$-2
ACALL DISP
JNB P2.0,$-2
SETB TR0
INC R1 ;R1为按键按下次数
CJNE R1,#2,KEY0
AJMP KEY
KEY0:
MOV R1,#1
AJMP KEY

DISP:
CJNE R1,#1,DISP0
AJMP DISP1
DISP0:
CJNE R1,#2,RT
AJMP DISP2

DISP1: ;一起闪
JNB F0,DISP11 ;F0为0.5S到标志,每0.5S求反一次
SETB P1.0
SETB P1.1
RET
DISP11:
CLR P1.0
CLR P1.1
RT:
RET
DISP2: ;交替闪
JNB F0,DISP21 ;F0为0.5S到标志,每0.5S求反一次
SETB P1.0
CLR P1.1
RET
DISP21:
CLR P1.0
SETB P1.1
RET

T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#10
CPL F0
RTI:
RETI

END

阅读全文

与51单片机汇编控制二极管相关的资料

热点内容
php中怎么注释 浏览:992
adxl345与单片机 浏览:279
服务器世界第一是什么公司的 浏览:19
精通编程入门 浏览:16
99单片机原理 浏览:61
linuxssh互信 浏览:288
支持128加密的浏览器 浏览:292
程序员下载器 浏览:48
退出云服务器代码 浏览:900
军状如命令 浏览:263
如何安卓系统更新 浏览:74
linux命令在哪里输入 浏览:497
编程语言集合类怎么选 浏览:93
如何将pdf转化为word 浏览:11
迈克菲隔离区解压密码 浏览:785
怎么用伟福编译 浏览:867
计算机算法专家 浏览:501
什么app清理垃圾 浏览:643
android流媒体服务器 浏览:183
各种算法的时间复杂度是指 浏览:116