初学单片机,刚接触中断,遇到点问题
#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继续亮,数码管恢复循环
财富值没了,但是希望有大神帮帮忙,困惑了很久了 展开
#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继续亮,数码管恢复循环
财富值没了,但是希望有大神帮帮忙,困惑了很久了 展开
展开全部
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;
{
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; //这个地方是处理输入低电平的时候的情况,那按你的说法撤点低电平的时候怎么处理这个没写。。。。
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询