📄 keypad.c
字号:
/*-----------------------------------------------------------------------------------------
KEYPAD.C
Source file to KEYPAD operation
Project: RADIATION COUNTING SYSTEM
ELECTRONICS CORPORATION OF INDIA LIMITED, HYDERABAD
Developed By VINAY All rights reserved.
-------------------------------------------------------------------------------------------*/
#include<keypad.h>
#include<lcd.h>
#include<intrins.h>
#include<stdlib.h>
#include<counter.h>
#include"at89x51.h"
#include"timer.h"
#include"ADC.H"
#define ZERO 0X7E
#define ONE 0XBE
#define TWO 0XDE
#define THREE 0XEE
#define FOUR 0X7D
#define FIVE 0XBD
#define SIX 0XDD
#define SEVEN 0XED
#define EIGHT 0X7B
#define NINE 0XBB
#define START 0X77
#define STOP 0XB7
#define RESET 0XD7
#define ENTER 0XE7
#define PRESET 0XEB
#define HV 0XDB
sbit row1 = P0^0;
sbit row2 = P0^1;
sbit row3 = P0^2;
sbit row4 = P0^3;
sbit col1 = P0^4;
sbit col2 = P0^5;
sbit col3 = P0^6;
sbit col4 = P0^7;
unsigned char xdata keybuffer;
unsigned char code mode[]= {" PRESS "};
unsigned char code mode1[]={"1-: CNTR 2-:TMR"};
unsigned char xdata keycounter;
unsigned char xdata keyvalues[7];
unsigned long countervalue;
extern unsigned int elapsedtime;
extern bit end_of_convertion;
extern bit adcflag;
bit cntrenterflag;
bit tmrenterflag;
bit modeflag;
bit normalflag;
bit cntrflag;
bit tmrflag;
bit CounterStartflag;
bit TimerStartflag;
count1 xdata count;
timevalue xdata timer;
count2 xdata count3;
unsigned char keycharval1;
unsigned char keycharval2;
unsigned char keycharval3;
unsigned char keycharval4;
unsigned char keycharval;
void scancode(void)
{
keyvalues[6]='\0';
col1=0;
col2=1;
col3=1;
col4=1;
keycharval1 = P0;
keycharval=P0;
while(keycharval == THREE | keycharval == SEVEN | keycharval == PRESET | keycharval == ENTER)
{
keycharval = P0;
}
col1=1;
col2=0;
col3=1;
col4=1;
keycharval2 = P0;
keycharval=P0;
while(keycharval == TWO | keycharval == SIX | keycharval == HV | keycharval == RESET)
{
keycharval = P0;
}
col1=1;
col2=1;
col3=0;
col4=1;
keycharval3 = P0;
keycharval=P0;
while(keycharval == ONE | keycharval == FIVE | keycharval == NINE | keycharval == STOP)
{
keycharval = P0;
}
col1=1;
col2=1;
col3=1;
col4=0;
keycharval4 = P0;
keycharval=P0;
while(keycharval == ZERO | keycharval == FOUR | keycharval == EIGHT | keycharval == START)
{
keycharval = P0;
}
switch(keycharval1)
{
case THREE:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('3');
keyvalues[keycounter] = 0x33;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('3');
break;
case SEVEN:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('7');
keyvalues[keycounter] = 0x37;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('7');
break;
case PRESET:
modeflag=1;
keycounter=0;
LcdClear();
LcdMoveCursor(0,0);
LcdWriteString(mode);
LcdMoveCursor(1,0);
LcdWriteString(mode1);
delay(50);
break;
case ENTER:
LcdClear();
LcdWriteString("Press START.....");
if(_testbit_(cntrflag))
{
cntrenterflag = 1;
count.countervalue= atol(keyvalues);
countervalue = count.countervalue;
if(count.countervalue<=0xffff)
{
count3.counts= count.countervalue/2;
Counter1_Load(0x02,0x00);
Counter2_Load(count3.counter1[1],count3.counter1[0]);
}
else if(count.countervalue>0xffff){
count3.counts= count.countervalue/16;
Counter1_Load(0x10,0x00);
Counter2_Load(count3.counter1[1],count3.counter1[0]);
}
}
if(_testbit_(tmrflag))
{
tmrenterflag = 1;
elapsedtime =atol(keyvalues);
timer.timervalue=(5*atol(keyvalues));
TimerZero_Load(timer.timerbytes[1],timer.timerbytes[0]);
}
break;
}
switch(keycharval2)
{
case TWO:
if(cntrflag == 1 | tmrflag == 1)
{
if(keycounter>5);
else
LcdWriteChar('2');
keyvalues[keycounter] = 0x32;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('2');
if(_testbit_(modeflag))
{
tmrflag=1;
LcdClear();
LcdMoveCursor(0,0);
LcdWriteString(" ENTER TIME IN SEC ");
LcdMoveCursor(1,1);
delay(500);
}
break;
case SIX:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('6');
keyvalues[keycounter] = 0x36;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('6');
break;
case HV:
LcdClear();
LcdMoveCursor(0,4);
LcdWriteString(" HV ");
LcdMoveCursor(1,4);
Adc_Conversion();
break;
case RESET:
((void(code*)(void))0x0000)();
break;
}
switch(keycharval3)
{
case ONE:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('1');
keyvalues[keycounter] = 0x31;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('1');
if(_testbit_(modeflag))
{
cntrflag=1;
LcdClear();
LcdMoveCursor(0,0);
LcdWriteString(" ENTER COUNTS ");
LcdMoveCursor(1,1);
delay(500);
//LcdMoveCursor(1,1);
//LcdWriteString(" ");
}
break;
case FIVE:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('5');
keyvalues[keycounter] = 0x35;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('5');
break;
case NINE:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('9');
keyvalues[keycounter] = 0x39;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('9');
break;
case STOP:
CounterStartPulse=0;
counter_Read();
break;
}
switch(keycharval4)
{
case ZERO:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('0');
keyvalues[keycounter] = 0x30;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('0');
break;
case FOUR:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('4');
keyvalues[keycounter] = 0x34;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('4');
break;
case EIGHT:
if(cntrflag == 1 | tmrflag == 1)
{
if( keycounter>5);
else
LcdWriteChar('8');
keyvalues[keycounter] = 0x38;
keycounter++;
}
if(cntrflag == 0 && tmrflag == 0)
LcdWriteChar('8');
break;
case START:
if(_testbit_(cntrenterflag ))
{
LcdClear();
Onepulse=1;
Onepulse=0;
_nop_();
Onepulse=1;
CounterStartflag=1; //flag to check
Onepulse=1;
Onepulse=0;
_nop_();
Onepulse=1;
CounterStartPulse=1; //counter start
//countdisply();
}
if(_testbit_(tmrenterflag))
{
LcdClear();
Onepulse=1;
Onepulse=0;
_nop_();
Onepulse=1;
Counter1_Load(0x10,0x00);
Counter2_Load(0xFF,0xFF);
TimerStartflag=1;
TR0=1;
TR1=1;
Onepulse=1;
Onepulse=0;
_nop_();
Onepulse=1;
CounterStartPulse=1; //counter start
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -