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}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)