⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keypad.c

📁 Interfacing 8 bit LCD to any microcontroller
💻 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 + -