用KEIL_5写用定时器T0扫描独立按键的程序时发现一个匪夷所思的问题:
就是在将定时器T0的初始化代码放在 main()函数中结果就是对的,但是将定时器T0模块化以后将初始化程序放在time0.c文件中就会出错
程序很简单,以下是main()函数中的代码:
#include<REGX52.H>
#include<KEY.H>
unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
extern unsigned char keyNow[4]; //°´¼üµÄÏÖÔÚ״̬
extern unsigned char keyLast[4]; //°´¼üµÄ×îºóÒ»¸ö״̬ÖÃ1
void time0Init()//¶¨Ê±Æ÷1 ³õʼ»¯
{
TMOD=0x01;
TH0=0XF8; //¶¨Ê±2ms
TL0=0XCD;
TR0=1;
ET0=1;
EA=1;
}
void main()
{
unsigned char i=0;
unsigned char number=0;
unsigned char keyNumber=0;
time0Init();
while(1)
{
keyNumber=key();
for(i=0;i<4;i++)
{
if(keyNumber==i)
{
keyNumber=0;
number+=i;
P0=~DIG_CODE[number];
if(number>=16)
{
number=0;
}
}
}
}
}
void time0() interrupt 1
{
TH0=0XF8;
TL0=0XCD;
keyCheck();
}
以下是KEY.C文件中的代码:
#include<REGX52.H>
unsigned char keyNow[4]={1,1,1,1}; //°´¼üµÄÏÖÔÚ״̬
unsigned char keyLast[4]={1,1,1,1,}; //°´¼üµÄ×îºóÒ»¸ö״̬ÖÃ1****ÕâÁ½¸ö±äÁ¿±ØÐëÔÚmain()º¯ÊýÖÐÓà extrun ÉùÃ÷
unsigned char key()
{
unsigned char i,keyGet;
for(i=0;i<4;i++)
{
if(keyNow[i]!=keyLast[i]) //µ±°´¼üµÄµ±Ç°×´Ì¬²»µÈÓÚ×îºóÒ»¸ö״̬¼´£ºÓа´¼ü°´ÏÂ
{
if(keyLast[i]==0) //µ±°´¼üµÄµ±Ç°×´Ì¬ÊÇ1ʱ ¼´£º°´¼üÒѾ̧Æðʱ ¼ÇΪһ´Î°´¼ü°´ÏÂ
{
keyGet=i;
}
keyLast[i]=keyNow[i]; //½«°´¼ü×îºóÒ»¸ö״̬¸üе±Ç°µÄ״̬
}
}
return keyGet;
}
void keyCheck()
{
static unsigned char keybuff[4]={0XFF,0XFF,0XFF,0XFF,}; //ÿ´ÎÖжϣ¨2ms£©¼ì²â°´¼ü״̬£¬
unsigned char i;
keybuff[0]=(keybuff[0]<<1)|P1_0; //½«×´Ì¬ÖµÑ»·×óÒÆ8´ÎÓÚ°´¼üµÄ״̬ÏàÓ룬ÅжÏÊÇ·ñΪȫ0»òÕßÈ«1
keybuff[1]=(keybuff[1]<<1)|P1_1;
keybuff[2]=(keybuff[2]<<1)|P1_2;
keybuff[3]=(keybuff[3]<<1)|P1_3;
for(i=0;i<4;i++)
{
if(keybuff[i]==0XFF)
{
keyNow[i]=1; //µ±ÓÐ8´Î¼ì²âµ½°´¼üΪȫ1ʱ£¬ËµÃ÷µ±Ç°°´¼ü̧Æð
}
else if(keybuff[i]==0X00)
{
keyNow[i]=0; //µ±ÓÐ8´Î¼ì²âµ½°´¼üȫΪ0ʱ˵Ã÷µ±Ç°°´¼ü°´ÏÂ
}
}
}
以下是KEY.H文件中的代码:
#ifndef _KEY_H_
#define _KEY_H_
extern unsigned char keyNow[4]; //°´¼üµÄÏÖÔÚ״̬
extern unsigned char keyLast[4]; //°´¼üµÄ×îºóÒ»¸ö״̬ÖÃ1
unsigned char key();
void keyCheck();
#endif
但是将其中的 time0Init()函数放在 TIME0.c文件运行结果就是出错
以下是 TIME0.c文件中的代码:
#include<REGX52.H>
void time0Init()//¶¨Ê±Æ÷0 ³õʼ»¯
{
TMOD=0x01;
TH0=0XF8; //¶¨Ê±2ms
TL0=0XCD;
TR0=1;
ET0=1;
EA=1;
}
以下是TIME0.h 文件中的代码:
#ifndef _TIME0_H_
#define _TIME0_H_
void time0Init();//¶¨Ê±Æ÷1 ³õʼ»¯
#endif
虽然编译 0错误 0警告,但是运行的时候就是错的
还请各位帮忙看看是啥问题吗?