4×4小键盘输入

 工程中加入 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);
}

 

你可能感兴趣的:(c,timer,vector,X86)