我利用独立键盘的key1和key2来控制两个外部中断
key8.c
#include "myhead.h"
void time1_init(void)
{
EA = 1;
TMOD |= 0x10;
TH1 = (65536 - 1000) / 256;
TL1 = (65536 - 1000) % 256;
ET1 = 1;
TR1 = 1;
}
void time1_isr() interrupt 3
{
TH1 = (65536 - 1000) / 256;
TL1 = (65536 - 1000) % 256;
display();
}
void int0_init(void)
{
EA = 1;
IT0 = 1;
EX0 = 1;
}
void int0_isr(void) interrupt 0
{
EX0 = 0;
if(0 == start)
{
while(!start);
delay_ms(10);
while(!start);
TR0 = ~TR0;
}
EX0 = 1;
}
void int1_init(void)
{
EA = 1;
IT1 = 1;
EX1 = 1;
}
void int1_isr(void) interrupt 2
{
EX1 = 0;
if(0 == rst)
{
while(!rst);
delay_ms(10);
while(!rst);
tempdata[0] = 0x3f;
tempdata[1] = 0x3f;
tempdata[2] = 0x40;
tempdata[3] = 0x3f;
tempdata[4] = 0x3f;
tempdata[5] = 0x40;
tempdata[6] = 0x3f;
tempdata[7] = 0x3f;
hour = 0 ;
min = 0;
sec = 0;
TR0 = 0;
}
EX1 = 1;
}
使用外部中断的时候会用到定时器1,所以定时器1就不能用做时钟的刷新
void key8()
{
unsigned char flag = 1;
unsigned char key;
time0_init();
time1_init();
int0_init();
int1_init();
while(flag)
{
key = key_scan();
if(0xe7 == key)
{
lcd_over();
flag = 0;
PORT = 0xff;
}
}
}
key8.h
#ifndef _KRY8_H
#define _KEY8_H
extern void time1_init(void);
extern void time1_isr();
extern void int0_init(void);
extern void int0_isr(void);
extern void int1_init(void);
extern void int1_isr(void);
extern void key8();
#endif