初学单片机,刚接触中断,遇到点问题

#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay(uint);sbitdu... #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
sbit dula=P2^6;
sbit wela=P2^7;
sbit D1=P1^0;
uchar i;
uchar code table[]={
0xaa,0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,
0x71};

void main()
{
EA=1;
EX0=1;
/*TCON=0x01;*/
wela=1;
P0=0xc0;
wela=0;
while(1)
{
for(i=0;i<16;i++)
{
dula=1;
P0=table[i+1];
dula=0;
delay(500);

}
}
}
void delay(uint xms)
{
uint a,b;
for(a=xms;a>0;a--)
for(b=115;b>0;b--);
}
void exter0() interrupt 0
{
D1=0;
}

程序原意:数码管0-F循环,给P3^2低电平,D1亮,数码管停止循环;撤掉低电平,D1继续亮,数码管恢复循环
实际:数码管0-F循环,给P3^2低电平,D1亮,数码管没有循环,只是变化的慢了;撤掉低电平,D1继续亮,数码管恢复循环

财富值没了,但是希望有大神帮帮忙,困惑了很久了
展开
 我来答
做而论道
高能答主

2014-08-13 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
数码管0-F循环,给P3^2低电平,D1亮,数码管停止循环;

撤掉低电平,D1继续亮,数码管恢复循环

--程序中,缺少检测《撤掉低电平》的程序段。
更多追问追答
追问
我想实现的就是在没有撤掉低电平的时候数码管停止循环,请指教
追答
void exter0() interrupt 0
{
D1=0;

while(P32 == 0); //等待变高

}
jmhyys
2014-08-13 · TA获得超过524个赞
知道小有建树答主
回答量:1052
采纳率:62%
帮助的人:288万
展开全部
for(i=0;i<16;i++)
{
dula=1;
P0=table[i+1];
dula=0;
delay(500);

}
这段改成
if(flag_d1==1)
{
i++;

if(i>0x0f)
{
i=0;
}
}
dula=1;
P0=table[i+1];
dula=0;
delay(500);
if(P3^2)

{
D1=1;

flag_d1=1;
}

/////////////////////////////
void exter0() interrupt 0
{
D1=0;
}

这一段改成

void exter0() interrupt 0
{
D1=0;
flag_d1=0;
}

定义一个flag_d1 位变量 bit flag_d1=1;
更多追问追答
追问
主要我现在在跟着视频学,郭天祥的板子,你说的那些我还都没接触到
追答
什么没接触到?我也没加什么新概念,定义变量没接触到?还是什么?

还有上面你说明的功能也不够细,停止循环的意思是数码管在一个数上停下来一直显示呢?还是数码管直接不显示,撤掉低电平的时候从0开始呢?

void main()
{
EA=1;
EX0=1;
/*TCON=0x01;*/
wela=1;
P0=0xc0;
wela=0;
while(1)
{
//这个地方数字累加跟显示融合到一起了,所以你不改这里怎么让显示停顿在一个数字上呢?
for(i=0;i0;a--)
for(b=115;b>0;b--);
}
void exter0() interrupt 0
{
D1=0; //这个地方是处理输入低电平的时候的情况,那按你的说法撤点低电平的时候怎么处理这个没写。。。。
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式