大佬看看是什么問題
期末做一個項目,
項目目的:由矩陣鍵盤輸入秒數給定時器讓定時器倒計時,時間到的話蜂鳴器響,led燈開始閃;
問題:由矩陣鍵盤輸入秒數可以賦值給倒計時所用的變量p,然后基本就卡住了,倒記不了時,后續的功能都啟動不了
#include "reg52.h" //????????????????????
typedef unsigned int u16; //???????????
typedef unsigned char u8;
#define GPIO_DIG P0
#define GPIO_KEY P1
sbit k1=P3^1;
sbit k2=P3^0;
sbit beep=P1^5;
u8 start=0;
int p,q,o,iii;
int a[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 code KKK[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code abb[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};
u8 code app[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};
u8 amm[10];
u8 code akk[10] = {0,1,2,3,4,5,6,7,8,9};
u8 Key,kk,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj;
void delay(u16 i)
{ while(i--); }
void T()
{
TMOD|= 0x01;
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
delay(1000);
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0x0f;
//?
kk++;
switch(GPIO_KEY)
{
case(0x07):Key=0;break;
case(0x0b):Key=1;break;
case(0x0d):Key=2;break;
case(0x0e):Key=3;break;
}
GPIO_KEY=0xf0;
//?
switch (GPIO_KEY)
{
case(0x70):Key=Key+0;break;
case(0xb0):Key=Key+4;break;
case(0xd0):Key=Key+8;break;
case(0xe0):Key=Key+12;break;
}
while((a<50)&&(GPIO_KEY= 0xf0))
{
delay(1000);
a++;
}
}
}
//return 0;
}
//////////////////////////////////////////////////////////////////////////////////////
void sound()
{ u8 i=100;
while(i--)
{ beep=~beep;
delay(100);
}
}
///////////////////////////////////////////////////////////////////////////////////////
void keypros()
{ if(k1==0)
{ delay(1000);
if(k1==0)
start=1;T();
while(!k1);
}
if(k2==0)
{ delay(1000);
if(k2==0)
{
start=0;
}
while(!k2);
}
//return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////
void main()
{
while(1)
{
KeyDown();
if(kk==1)
{
P2=~app[0];
GPIO_DIG= KKK[Key];
amm[0]=KKK[Key];
p = akk[Key];
}
if(kk==2)
{
P2=~app[1];
GPIO_DIG= amm[0];
delay(100);
P2=~app[0];
GPIO_DIG= KKK[Key];
amm[1]=KKK[Key];
delay(100);
aa = akk[Key];
p = p*10+aa;
}
///ding shi qi qi dong hou yong
keypros();
q = p / 10 ;
o = p % 10 ;
P2 = ~0x00 ;
P0 = ~a[o] ;
delay(100);
P2 = ~0x04;
P0 = ~a[q];
delay(100);
}
}
void T70() interrupt 1
{
int i;
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
i++;
///////////////////////
///////////////////////
if(i == 20)
{
i = 0;
p--;
if(p == 0)
{
if(start==1)
{
while(1){
for(iii=0;iii<8;iii++)
{sound();
P2=~abb[iii];
delay(10000);
}
delay(10000);
if(k2==0)
{ delay(1000);
if(k2==0)
EA=0;
break;
while(!k1);
}
}
}
else
beep=1;
//p = 5;
}
}
}
|