51单片机C语言对键控双向流水灯编程。用两个按键,中端来做。

两个按键。按键1,8个灯正方向闪,一次亮一颗,每个灯之间0.5秒延迟。按键2,反方向闪,0.5秒延迟。利用中端完成。要求是一按按键不管哪个灯亮立刻反方向亮。谢谢大神!是利... 两个按键。按键1,8个灯正方向闪,一次亮一颗,每个灯之间0.5秒延迟。按键2,反方向闪,0.5秒延迟。利用中端完成。要求是一按按键不管哪个灯亮立刻反方向亮。谢谢大神!
是利用中断实现,外部中断也好,定时器计数器中断也好,只要中断就可以
展开
 我来答
zhxiufan
2012-11-21 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg51.h>
#define uchar unsigned char
uchar num,temp,times,led;
t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=10)
{
times=0;
P0=led;
if(key1==0){
num++;
num&=0x07;
}
else if(key2==0)
{
if(num>0)num--;
else(num=7;
}
led>>=num;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED=0x0xfe;
num=0;
times=0;
while(1);
}
更多追问追答
追问
大神,你这个程序有很多都是我现在上课没讲到的,所以谢谢你的解答,但是还不是我需要的,我需要的是很简单的语句组成的。就是很初级很初级的
追答
用汇编吧:
ORG 0000H
LJMP MAIN
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

SETB EA

SETB TR0

SETB ET0

MOV 30H,#0FEH

MOV 31H,#0

MOV 32H,#0

SJMP $

T0ISR:
CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

INC 31H

MOV A,31H

CJNE A,#10,T0END

MOV 31H,#0

MOV P1,30H

JB KEY1,T0I1

MOV A,30H

RL A

MOV 30H,A

RETI

T0I1:
JB KEY2,T0END

MOV A,30H

RR A

MOV 30H,A

T0END:
RETI

END
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weicaihui2012
2012-11-21
知道答主
回答量:6
采纳率:0%
帮助的人:9206
展开全部
可以用外部中断吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式