新手学习之单片机独立键盘问题

2019-03-24 19:34发布

/*独立键盘检测装置,按下key1加1,按下key2减一,
按下key3清零,按下key4以定时器自减1,
再按key4数值停止自动减1,保持显示原数*/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
sbit key4=P0^3; uchar num,t;
uchar code table[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void init()
{
 TMOD=0x10;
 TH1=0x3c;
 TL1=0x0B0;
 EA=1;
 ET1=1;
} void delay(uint z)
{
 uint i,j;
 for(i=z;i>0;i--)
  for(j=110;j>0;j--); 
}
void main()
{
 init();
 P1=0x00;
 delay(5);
 while(1)
 {
 if(key1==0)
 {
  delay(5);
  if(key1==0)
  {
   num++;
   if(num==10)
    num=0;
   while(!key1);
   delay(5);
   while(!key1);
  }       
 }
 else if(key2==0)
 {
     delay(5);
  if(key2==0)
  {
   if(num==0)
    num=10;
   num--;
   while(!key2);
   delay(5);
   while(!key2);
  }
 }
 else if(key3==0)
 {
     delay(5);
  if(key3==0)
  {
   num=0;
   while(!key3);
  }
 }
 else if(key4==0)
 {
     delay(5);
  if(key4==0)
  {
   delay(5);
   while(1)
   {
       TR1=1;
    if(t==20)
    {
     t=0;
     if(num==0)
        num=10;
     num--;
     P2=table[num];
     //while(!key4);
     if(key4==0)
     {     
        break;
     }   
    
     
    }
   }
  }
 }
 P2=table[num];
 }
}
void time0() interrupt 3
{
  TH1=0x3c;
  TL1=0x0B0;
  t++; } 问题出现在key4里,可以自动减数,但是停不下来,怎么回事?应该怎么改呢,求指教哈。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ddllxxrr
1楼-- · 2019-03-25 00:04
 精彩回答 2  元偷偷看……
jjkwz
2楼-- · 2019-03-25 05:10
if(key4==0)
{
break;
}
在break;之前加个TR1=0;把定时器关掉
已经精确到程序的定时器了、、、
常见泽1
3楼-- · 2019-03-25 08:02
basi把思路画出来最好了 哈哈

一周热门 更多>