新发现,如果不使用最后一列的矩阵按键是没有问题的,这是和定时器一冲突了吗,好奇怪呀
在下面这个代码中,我是使用定时器1进行数码管的刷新,2ms,然后通过矩阵按键进行对温度参数的加减,在按键函数中,如果没有第二个按键(就是L4==0这一部分的函数先去掉)L3==0的这个按键没有任何影响,按一下可以正常减,但如果两个都在,就会一直加,根本不需要按按键,这是怎么回事呀
#include "Key.h"
void key()
{
H3=0;
H1=H2=H4=1;
L1=L2=L3=L4=1;
if(L3==0)
{
while(L3==0)para_display();
para--;
}
if(L4==0)
{
while(L4==0) para_display();
para++;
}
}
//key.h
#include <STC15F2K60S2.H>
#include "BL.h"
#include "System.h"
#include "onewire.h"
#include "NE555.h"
#include "ds1302.h"
sbit H1=P3^0;
sbit H2=P3^1;
sbit H3=P3^2;
sbit H4=P3^3;
sbit L1=P4^4;
sbit L2=P4^2;
sbit L3=P3^5;
sbit L4=P3^4;
void key();
#endif
//ne555.c
#include "NE555.h"
void Timer1_Init(void) //1毫秒@12.000MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x18; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1=1;
EA=1;
}
void Timer1_Service() interrupt 3
{
TL1 = 0x18; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
time_smg_2ms++;
if(time_smg_2ms==2)
{
time_smg_2ms=0;
SMG_Bit(number[number_i],number_i);
number_i++;
if(number_i==8)
number_i=0;
P0=0xff;
}
}
//main.c
#include <STC15F2K60S2.H>
#include "System.h"
#include "BL.h"
#include "onewire.h"
#include "NE555.h"
#include "ds1302.h"
#include "Key.h"
int main()
{
Close();
DS18B20_Read_init();
Delay750ms();
DS18B20_Read_init();
DS1302_Write();
Timer1_Init();
while(1)
{
key();
para_display();
//DS18B20_Read_init();
//para_display();
//DS1302_display_1();
//DS18B20_display();
Key_Val=Key_Read();
Key_Down=Key_Val&(Key_Val^Key_Old);
Key_Up=~Key_Val&(Key_Val^Key_Old);
Key_Old=Key_Val;
switch(Key_Down)
{
case 4:
}
}
}