EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Topics / code problem-How to make an alphabetic keypad using 8051 microcontroller (AT89C51)

code problem-How to make an alphabetic keypad using 8051 microcontroller (AT89C51)

|

Microcontroller › 8051 › code problem-How to make an alphabetic keypad using 8051 microcontroller (AT89C51)

  • This topic has 3 replies, 3 voices, and was last updated 10 years, 7 months ago by Ashutosh Bhatt.
Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • March 25, 2015 at 6:46 am #3581
    sherbanu khatarawala
    Participant
    i had taken this topic as my acedemic project but m facing code conversion using keil software please help me out 
     
     
     
     
     
    * RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 0827H BYTE (101%) *
    ******************************************************************************
    Program Size: data=35.0 xdata=0 code=2216
    LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
    *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
        MODULE:  C:KEILC51LIBC51S.LIB (


    )
        LIMIT:   0800H BYTES
    Target not created
     
     
     
     
     codes are as follow:


    // Program to make alphabetical keypad similar to the one in mobiles
    #include<reg51.h>
    #define port P1
    #define dataport P2 //Data port for LCD
    #define key P0 // Port for Keypad
    #define sec 100
    sbit rs = port^1;
    sbit rw = port^2;
    sbit en = port^3;

    sbit col1=key^4;
    sbit col2=key^5;
    sbit col3=key^6;
    sbit row1=key^0;
    sbit row2=key^1;
    sbit row3=key^2;
    sbit row4=key^3;
    unsigned char position=128,i=0;
    int check_again[10]={0,0,0,0,0,0,0,0,0,0};

    void delay(unsigned int msec) // Time delay function
    {
    int i,j ;
    for(i=0;i<msec;i++)
    for(j=0;j<1275;j++);
    }

    void lcd_cmd(unsigned char item)
    {
    dataport = item;
    rs= 0;
    rw=0;
    en=1;
    delay(1);
    en=0;
    return;
    }

    void lcd_data(unsigned char item)
    {
    lcd_cmd(0x0f);
    delay(10);
    dataport = item;
    rs= 1;
    rw=0;
    en=1;
    delay(1);
    en=0;
    return;
    }

    void num_check(int a , int b) //Check function
    {
    int j;
    for(j=0;j<10;j++)
    {
    if(j!=a)
    {
    check_again[j]=0;
    }
    }
    if(check_again[a]==3)
    check_again[a]=0;
    check_again[11]=1;
    check_again[12]=1;
    }

    void display(int a ,int b) // Display function
    {
    switch(b)
    {
    case 1:
    {
    switch(a)
    {
    case 1:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('a');
    delay(5);
    num_check(1 ,check_again[1]);
    break;
    }
    case 2:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('d');
    delay(5);
    num_check(2 ,check_again[2]);
    break;
    }
    case 3: {
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('g');
    delay(5);
    num_check(3 ,check_again[3]);
    break;
    }
    case 4:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('j');
    delay(5);
    num_check(4 ,check_again[4]);
    break;
    }
    case 5:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('m');
    delay(5);
    num_check(5 ,check_again[5]);
    break;
    }
    case 6:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('p');
    delay(5);
    num_check(6 ,check_again[6]);
    break;
    }
    case 7:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('s');
    delay(5);
    num_check(7 ,check_again[7]);
    break;
    }
    case 8:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('v');
    delay(5);
    num_check(8 ,check_again[8]);
    break;
    }
    case 9:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('y');
    delay(5);
    num_check(9 ,check_again[9]);
    break;
    }
    case 0:{
    lcd_cmd(position+i);
    lcd_data(' ');
    delay(5);
    num_check(10 ,check_again[10]);
    break;
    }
    case 11:{
    if((position+i)>129)
    {
    i=i-2;
    delay(5);
    lcd_cmd(position+i+1);
    num_check(11 ,check_again[11]);;
    delay(5);
    }
    break;
    }
    case 12:{
    delay(5);
    lcd_cmd(position+i);
    num_check(12 ,check_again[12]);
    delay(5);
    break;
    }
    }
    break;
    }
    case 2:
    {
    switch(a)
    {
    case 1:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('b');
    delay(5);
    num_check(1 ,check_again[1]);
    break;
    }
    case 2:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('e');
    delay(5);
    num_check(2 ,check_again[2]);
    break;
    }
    case 3: {
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('h');
    delay(5);
    num_check(3 ,check_again[3]);
    break;
    }
    case 4:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('k');
    delay(5);
    num_check(4 ,check_again[4]);
    break;
    }
    case 5:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('n');
    delay(5);
    num_check(5 ,check_again[5]);
    break;
    }
    case 6:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('q');
    delay(5);
    num_check(6 ,check_again[6]);
    break;
    }
    case 7:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('t');
    delay(5);
    num_check(7 ,check_again[7]);
    break;
    }
    case 8:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('w');
    delay(5);
    num_check(8 ,check_again[8]);
    break;
    }
    case 9:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('z');
    delay(5);
    num_check(9 ,check_again[9]);
    break;
    }
    case 0:{
    lcd_cmd(position+i);
    lcd_data('-');
    num_check(10 ,check_again[10]);
    break;
    }
    case 11:{
    i--;
    lcd_cmd(0x10);
    delay(5);
    break;
    }
    }
    break;
    }
    case 3:
    {
    switch(a)
    {
    case 1:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('c');
    delay(5);
    num_check(1 ,check_again[1]);
    break;
    }
    case 2:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('f');
    delay(5);
    num_check(2 ,check_again[2]);
    break;
    }
    case 3: {
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('i');
    delay(5);
    num_check(3 ,check_again[3]);
    break;
    }
    case 4:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('l');
    delay(5);
    num_check(4 ,check_again[4]);
    break;
    }
    case 5:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('o');
    delay(5);
    num_check(5 ,check_again[5]);
    break;
    }
    case 6:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('r');
    delay(5);
    num_check(6 ,check_again[6]);
    break;
    }
    case 7:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('u');
    delay(5);
    num_check(7 ,check_again[7]);
    break;
    }
    case 8:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('x');
    delay(5);
    num_check(8 ,check_again[8]);
    break;
    }
    case 9:{
    if(check_again[a]>1)
    i--;
    lcd_cmd(position+i);
    lcd_data('z');
    delay(5);
    num_check(9 ,check_again[9]);
    break;
    }
    case 0:{ lcd_cmd(position+i);
    lcd_data('-');
    num_check(10 ,check_again[10]);
    break;

    }
    case 11:{
    i=i-2;
    lcd_cmd(position+i);
    delay(5);
    break;
    }
    }
    break;
    }
    }
    }

    void check_col1() //Check column one
    {
    row1=row2=row3=row4=1;
    row1=0;
    if(col1==0)
    {
    delay(10);
    check_again[1]++;
    display(1,check_again[1]);
    }
    row1=1;
    row2=0;
    if(col1==0)
    {
    delay(10);
    check_again[4]++;
    display(4,check_again[4]);
    }
    row2=1;
    row3=0;
    if(col1==0)
    {
    delay(10);
    check_again[7]++;
    display(7,check_again[7]);
    }
    row3=1;
    row4=0;
    if(col1==0)
    {
    delay(10);
    display(11,1); //FOR *
    }
    row4=1;
    }

    void check_col2() //Check column two
    {
    row1=row2=row3=row4=1;
    row1=0;
    if(col2==0)
    {
    delay(10);
    check_again[2]++;
    display(2,check_again[2]);
    }
    row1=1;
    row2=0;
    if(col2==0)
    {
    check_again[5]++;
    display(5,check_again[5]);
    }
    row2=1;
    row3=0;
    if(col2==0)
    {
    delay(10);
    check_again[8]++;
    display(8,check_again[8]);
    }
    row3=1;
    row4=0;
    if(col2==0)
    {
    delay(10);
    check_again[0]++;
    display(0,1);
    }
    row4=1;
    }

    void check_col3() //check column three
    {
    row1=row2=row3=row4=1;
    row1=0;
    if(col3==0)
    {
    delay(10);
    check_again[3]++;
    display(3,check_again[3]);
    }
    row1=1;
    row2=0;
    if(col3==0)
    {
    delay(10);
    check_again[6]++;
    display(6,check_again[6]);
    }
    row2=1;
    row3=0;
    if(col3==0)
    {
    delay(10);
    check_again[9]++;
    display(9,check_again[9]);
    }
    row3=1;
    row4=0;
    if(col3==0)
    {
    delay(10);
    display(12,1); //FOR #
    }
    row4=1;
    }

    void keypad1()
    {
    if((position+i)>144 && i>16)
    {
    position=192;
    i=0;
    }
    if((position+i)>203 && i>12 )
    {
    lcd_cmd(0X01);
    i=0;
    position=128;
    }
    i++;
    lcd_cmd(position+i);
    if(col1==0)
    check_col1();
    else
    if(col2==0)
    check_col2();
    else
    if(col3==0)
    check_col3();
    delay(10);
    }

    void main()
    {
    col1=col2=col3=1;
    lcd_cmd(0x38);
    lcd_cmd(0x0e);
    lcd_cmd(0x01);
    delay(sec);
    while(1)
    {
    row1=row2=row3=row4=0;
    while(col1==1 && col2==1 && col3==1);
    {
    keypad1();
    }
    }
    }

    please anyone can convert this codes into .hex and mail me at "[email protected]" its very urgent please help me out

     

     

    March 26, 2015 at 12:37 am #12729
    Sourabh Malviya
    Participant

    you can try this code to atmega  16L few changes are there but its work,,if you need more help then ask freely….

    March 26, 2015 at 12:40 am #12730
    Sourabh Malviya
    Participant

    you can try this code to atmega  16L few changes are there but its work,,if you need more help then ask freely….

    use code wizard avr to programing and createing hex file,,,, and khazama to upload hex file

    March 27, 2015 at 7:34 am #12737
    Ashutosh Bhatt
    Participant

    the free version of KEIL has limitation to compile code with max 2K memory only. in ur case the limit is exceeding slightly

    so u just optimize ur code some how and it will work

  • Author
    Posts
Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.
Log In

RSS Recent Posts

  • JLCPBC are using a different shipping company = less $$$$$$$$ November 8, 2025
  • Help please! BLDC driver circuit using the IR2136s and the STP80NF06 MOSFETS November 8, 2025
  • need two ICs November 8, 2025
  • MLT-8530 Buzzer on ESP32: Why Is the Sound Output Lower Than Expected? November 8, 2025
  • Scope Clock CRT Z-Axis - Grid bias positive? November 8, 2025

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2025 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise