微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于单片机一个按键函数的问题

关于单片机一个按键函数的问题

时间:10-02 整理:3721RD 点击:
代码如下:
       #include<reg52.h>
#define uint  unsigned int
#define uchar unsigned char
sbit set=P1^1;
void init();
void delay(uchar x);
void display(uchar a,uchar b,uchar c);
void keyscane(bit y);
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar shi,fen,miao;
void main()
{
init();
while(1)
{
  display(shi,fen,miao);
  keyscane(set);   
}
}
void init()
{
EA=1;
TMOD=0x01;
ET0=1;
TR0=1;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
}
void display(uchar a,uchar b,uchar c)
{
P2=0;
P0=table[a/10];
delay(2);
  
P2+=0x04;
P0=table[a%10];
delay(2);
  
P2+=0x04;
P0=0x40;
delay(2);
  
P2+=0x04;
P0=table[b/10];
delay(2);
  
P2+=0x04;
P0=table[b%10];
delay(2);
  
P2+=0x04;
P0=0x40;
delay(2);
  
P2+=0x04;
P0=table[c/10];
delay(2);
  
P2+=0x04;
P0=table[c%10];
delay(2);
}
void keyscane(bit y)    //按键检测
{
P1=0xff;
delay(15);
if(y==0)
{
  delay(15);    //消抖
  if(y==0)
   TR0=!TR0;
  while(!y);   //松手检测,,,,运行时代码会卡在这个地方不动
  delay(5);    //消抖
  while(!y);
}
}
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
  for(j=220;j>0;j--);
}
void timer0 () interrupt 1
{
uint i;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
i++;
if(i==20)
{
  i=0;
  miao++;
  if (miao==60)
  {
   miao=0;
   fen++;
   if(fen==60)
   {
    fen=0;
    shi++;
    if(shi==24)
     shi=0;
   }
  }
}
}
  
请问各位大声为什么,代码卡在蓝色的地方就不动了!

你调试过没有?

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

网站地图

Top