#include
#include
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();
}
#include
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ʱ˵Ã÷µ±Ç°°´¼ü°´ÏÂ
}
}
}
#ifndef _KEY_H_
#define _KEY_H_
extern unsigned char keyNow[4]; //°´¼üµÄÏÖÔÚ״̬
extern unsigned char keyLast[4]; //°´¼üµÄ×îºóÒ»¸ö״̬ÖÃ1
unsigned char key();
void keyCheck();
#endif
#include
void time0Init()//¶¨Ê±Æ÷0 ³õʼ»¯
{
TMOD=0x01;
TH0=0XF8; //¶¨Ê±2ms
TL0=0XCD;
TR0=1;
ET0=1;
EA=1;
}
#ifndef _TIME0_H_
#define _TIME0_H_
void time0Init();//¶¨Ê±Æ÷1 ³õʼ»¯
#endif
给你一个思路,打断点看看哪里运行不符合预期,是定时器不走呢还是io电平不变呢?
还有可以对比前后生成的汇编代码看看,如果就是函数定义的地方变了,理论是不会有问题的。
初始化代码中如果乱序写会有影响吗? 编译的时候不要用优化试试 就是 -O0 。估计和执行具体指令的顺序有点小变动
你在time.c文件有引用51的头文件吗?
这篇文章详细得介绍定时器T0初始化放到 .c文件中出错 得解决方法
https://blog.csdn.net/qq_42882607/article/details/126084741
希望对你有所帮助
你的主函数有引用TIME0.h这个头文件吗