单片机 发光二极管循环点亮的程序?

单片机 发光二极管循环点亮的程序?,第1张

程序

ORG

0000H

LJMP

MAIN

ORG

4000H

MAIN:MOV

R5,#04H

LOOP:MOV

R1,#00H

MOV

A,#0FEH

L1:MOV

P1,A

LCALL

DELAY

RL

A

INC

R1

CJNE

R1,07H,L1

MOV

R2,#00H

MOV

A,#01H

L2:MOV

P1,A

LCALL

DELAY

RR

A

INC

R2

CJNE

R2,07H,L2

DJNE

R5,LOOP

DELAY:MOV

R6,#02H

D1:MOV

R7,#0FFH

D2:DJNZ

R7,D2

DJNE

R6,D1

RET

END

电路:

连接灯的阴极至P1口上即可,复位和震荡电路不需要我说了吧

说明一下,延时时间不准确,不过基本接近1ms的

t=(256*2+1)*2+1+2=1028

如果想做到精确延时的话建议在DELAY中使用NOP指令调理,自己试一下吧

最好是用Keil仿真一下确定延时时间。

很久没有汇编了,仔细检查一下,估计有Bug也不一定。

51单片机p1口是8个引脚, 可控制8个发光二极管,要说明一个发光管接哪个引脚 .

C语言很简单

#include<reg51.H>

#define uchar unsigned char

#define uint unsigned int

sbit led=P1^0//发光管接P1.0

void main ()//主程序

{

while(1)

{

led=1

delayms(2500)

led=0

delayms(2500)

}

}

void delayms(uint i) //1ms延时程序

{

uint j

for(i>0i--)

{

for(j=0j<125j++)

{}

}

}

#include<reg52.h> // 试试

unsigned int t

void main(void)

{

EA=1

ET0=1

TR0=1

while(1)

{

if(t==0) { P0=0x0f}//左边4只发光二极管亮,右边发光二极管不亮

if(t==80) { P0=0x55} //1、3、5、7亮,另外4只不亮

if(t==160) { P0=0xaa} //2、4、6、8亮,另外4只不亮

}

}

void timer0()interrupt 1 //中断程序

{

TH0=(65536-50000)/256 // 间隔这里调整

TL0=(65536-50000)%256

t++

if(t==250){t=0}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7901226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存