定时器T1每0.05秒中断一次,单片机P1口接8个发光二极管LED0~LED7,编写程序,使发光二极管有规律地循环点

定时器T1每0.05秒中断一次,单片机P1口接8个发光二极管LED0~LED7,编写程序,使发光二极管有规律地循环点 浏览次数:84次悬赏分:0 | 提问时间:2011-6-13 13:59 | 提问者:匿名
定时器T1每0.05秒中断一次,单片机P1口接8个发光二极管LED0~LED7,编写程序,使发光二极管有规律地循环点亮。例如:开机后,第一秒钟LED0、LED2亮,第二秒钟LED1、LED3亮,第三秒钟LED4、LED6亮,第四秒钟LED5
知道了,谢谢大家了

FLAG BIT 20H.0
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP INT
ORG 0030H

MAIN: MOV TMOD,#01H ;方式0
MOV TH1,#15H ;设置计数初值
MOV TL1,#0A0H
SETB EA ;总中断开
SETB ET1 ;定时器中断开
SETB TR1 ;开始计时
MOV R7,#50
MOV A,#0FAH
LOOP: MOV P1,A
AJMP LOOP

INT: MOV TH1,#0CH ;重新装值
MOV TL1,#78H
DJNZ R7,BACK ;定时器中断50次时为0.5s
RL A
MOV R7,#50
BACK: RETI
END

已经编译通过,可直接运行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-03
//prj1 流水灯实验,LED灯是共阳极,给0亮。J1跳线帽
//用的是移位的方法

//头文件定义
#include<reg52.h>
#include <intrins.h>

//延时函数定义
void delay(void)
{
unsigned int i;
unsigned int j;
for(i=200;i>0;i--)
{
for(j=200;j>0;j--);
}
}

void main()
{
P0 = 0xfe; //1111 1110
delay();
while(1)
{
P0 = _crol_(P0,1) ; // 将P0端口循环左移  
delay();
if(P0 == 0x7f)
{
P0 = _cror_(P0,1);
delay();
P0 = _cror_(P0,1);
delay();
P0 = _cror_(P0,1);
delay();
P0 = _cror_(P0,1);
delay();
P0 = _cror_(P0,1);
delay();
P0 = _cror_(P0,1);
delay();
P0 = _cror_(P0,1);
delay();
}
}
}
第2个回答  2011-08-03
不用定时器T1
org 00
ljmp 100h

org 100h
again:
mov p1,05h
lcall ys1s
mov p1,0ah
lcall ys1s
mov p1,50h
lcall ys1s
mov p1,0a0h
lcall ys1s
ljmp again

ys1s:
;延时1秒程序,根据你的系统时钟自己编
ret追问

我刚学,这东西复杂吗?单片机、定时器是什么东西?

追答

不复杂,主要是动手,光理论肯定不行

第3个回答  2011-08-03
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar num,a;
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
TMOD=0X01;
TH0=(65535-45872)/256;
TL0=(65535-45872)%256;
EA=1;
TR0=1;
ET0=1;
}
void main()
{
a=0xfc;
init();
while(1);

}
void time0() interrupt 1
{
TH0=(65535-45872)/256;
TL0=(65535-45872)%256;
num++;
P0=a;
if(num==20)
{
num=0;
a=_crol_(a, 2);
}
}
相似回答