微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 初学小白求助

初学小白求助

时间:10-02 整理:3721RD 点击:
#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit D1=P1^0;sbit key1=P3^4;sbit key2=P3^5;uchar aa,bb;void delay(uint z);void init();void main(){        init();        while(1)        {                if(aa==bb)                {                        aa=0;                        D1=~D1;                }                if(key2==0)                {                        delay(5);                        if(key2==0)                        {if(bb>1)                        {bb=bb-1;}}                }                if(key1==0)                {                        delay(5);                        if(key1==0)                        {                                        if(bb<10)                                {bb=bb+1;}                        }                }        }}void init(){        aa=0;        bb=1;        TMOD=0x01;        TH0=(65536-50000)/256;        TL0=(65536-50000)%256;        EA=1;        ET0=1;        TR0=1;        D1=0;}void timer0() interrupt 1{        TH0=(65536-50000)/256;        TL0=(65536-50000)%256;        aa++;        }void delay(uint z){        uint i,j;        for(i=z;i>0;i--)                for(j=110;j>0;j--);}这程序的KEY1按的时候为什么只有第一次有效。第二次开始按的时候就没有用了

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^0;
sbit key1=P3^4;
sbit key2=P3^5;
uchar aa,bb;
void delay(uint z);
void init();
void main()
{
        init();
        while(1)
        {
                if(aa==bb)
                {
                        aa=0;
                        D1=~D1;
                }
                if(key2==0)
                {
                        delay(5);
                        if(key2==0)
                        {if(bb>1)
                        {bb=bb-1;}}
                }
                if(key1==0)
                {
                        delay(5);
                        if(key1==0)
                        {       
                                if(bb<10)
                                {bb=bb+1;}
                        }
                }
        }
}
void init()
{
        aa=0;
        bb=1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        D1=0;
}
void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;       
}
void delay(uint z)
{
        uint i,j;
        for(i=z;i>0;i--)
                for(j=110;j>0;j--);
}

现在改成这样了,加了2个while。不过按键要按的快才有效。按的慢了就会出错。麻烦大家帮忙改改
if(key2==0)
{
delay(5);
if(key2==0)
{
while(key2==0);
if(bb>1)
{bb=bb-1;}}
}
if(key1==0)
{
delay(5);
if(key1==0)
{
while(key1==0);
if(bb<10)
{bb=bb+1;}
}
}
}
}

可能是你的中断时间太短,把中断时间改长一点或者把延时时间减小点

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top