工程中加入 keypad.c文件和main函数
#include <regx51.h>
#define TIMER0_COUNT 0xEE11 /* 10000h-((12,000,000/(12*200))*/
code seven_seg[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,
0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
code scan[4]={0X0E,0X0D,0X0B,0X07}; //对应控制四个电晶体
unsigned char counter[4]={0,0,0,0}; //四个数码管显示码
unsigned char timer0_tick,k=0;
static void timer0_isr(void) interrupt TF0_VECTOR using 1 //W觉得这个中断处理程序应该是
//负责刷屏幕的。通过计时器timer0控制其定时
//刷新屏幕
//另外,这里四个数码管是一个一个间隔显示的,只是
//使时间间隔很小,视觉停留不出来
{
TR0=0;
TL0=(TIMER0_COUNT & 0x00FF);
TH0=(TIMER0_COUNT >> 8);
TR0=1;
P1=seven_seg[counter[k]];
P3=scan[k];/*P0=scan[k]*/ //此处修改 因为电路图上电晶体是连接在P3口上
/*电晶体作为一种可变开关,基于输入的电压,控制流出的电流,
因此电晶体可做为电流的开关,和一般机械开关(如Relay、switch)不同处在于
电晶体是利用电讯号来控制,而且开关速度可以非常之快,在实验室中的切换速度可达100GHz以上。 */
k++;
if(k==4) k=0;
timer0_tick++;
if (timer0_tick==200) timer0_tick=0; //个人觉得这个timer0_tick没用上吧,
}
static void timer0_initialize(void)
{
EA=0;
timer0_tick=0;
TR0=0;
TMOD &= 0XF0;
TMOD |=0x01;
TL0=(TIMER0_COUNT & 0x00FF);
TH0=(TIMER0_COUNT >> 8);
PT0=0;
ET0=1;
TR0=1;
EA=1;
}
void main (void)
{
unsigned char c=0;
char ch;
timer0_initialize();
do {
ch=gotkey();
for(c=3;c>0;c--)
counter[c]=counter[c-1];
counter[0]=ch;
} while(1);
}