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 / Need help with LCD based alrm clock with digital thermometer

Need help with LCD based alrm clock with digital thermometer

|

Microcontroller › 8051 › Need help with LCD based alrm clock with digital thermometer

  • This topic has 5 replies, 3 voices, and was last updated 11 years, 8 months ago by Mukaram Jawaid.
Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • September 2, 2013 at 4:08 pm #2617
    Jasper Nunisa
    Participant

    I have problem in executing the following part of the program code. Could anyone tell me what the error is and suggest a solution?? The alarm function doesnt work at all. And in the timing function, only the dig_hr and dig_min buttons work.

    “

    lcd_data_int(int time_val)  // Function to send number to LCD
    {
    int int_amt;
    int_amt=time_val/10;
    lcd_data(int_amt+48);
    int_amt=time_val%10;
    lcd_data(int_amt+48);
    }”

     

    The full program is:

     

    // Program to make a digital clock with integrated Alarm and digital thermometer
    #include<reg51.h>
    #define port P1
    #define adc_input P0
    #define cont_port P3
    #define dataport P2
    #define m_sec 10
    sbit rs = cont_port^0;
    sbit rw = cont_port^1;
    sbit en = cont_port^6;
    sbit dig_hr1=port^0;
    sbit dig_min1=port^1;
    sbit start=port^2;
    sbit am_pm=port^3;
    sbit alarm_set=port^4;
    sbit alarm=port^7;
    sbit wr= P3^2;
    sbit rd= P3^3;
    sbit intr= P3^4;

    int hr ,hr1=0,alarm_hr=0;
    int min,min1=0,alarm_min=0;
    int sec,sec1=0,dig_am_pm=0,alarm_am_pm=0;
    int test_final=0,test_intermediate1[10],test_intermediate2[3]={0,0,0};

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

    void lcd_cmd(unsigned char item)  //Function to send command to LCD           
    {
    dataport = item;
    rs= 0;
    rw=0;
    en=1;
    delay(1);
    en=0;
    return;
    }

    void lcd_data(unsigned char item) // Function to send data to LCD
    {
    dataport = item;
    rs= 1;
    rw=0;
    en=1;
    delay(1);
    en=0;
    return;
    }

    void lcd_data_string(unsigned char *str) // Function to send string to LCD
    {
    int i=0;
    while(str!=’’)
    {
      lcd_data(str
    );
      i++;
      delay(1);
    }
    return;
    }

    lcd_data_int(int time_val)  // Function to send number to LCD
    {
    int int_amt;
    int_amt=time_val/10;
    lcd_data(int_amt+48);
    int_amt=time_val%10;
    lcd_data(int_amt+48);
    }

    void lcd(unsigned char str1[10])
    {
    lcd_cmd(0x38);
    lcd_cmd(0x0e);
    delay(1);
    lcd_data_string(str1);
    }

    void shape()  // Function to create the shape of degree
    {
    lcd_cmd(64);
    lcd_data(2);
    lcd_data(5);
    lcd_data(2);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    lcd_data(0);
    }

    void convert()  // Function to convert the data of ADC
    {
    int s;
    s=test_final/100;
    test_final=test_final%100;
    lcd_cmd(0xc9);
    if(s!=0)
    lcd_data(s+48);
    else
    lcd_cmd(0x06);
    s=test_final/10;
    test_final=test_final%10;
    lcd_data(s+48);
    lcd_data(test_final+48);
    lcd_data(0);
    lcd_data(‘C’);
    lcd_data(‘ ‘);
    delay(2);
    }

    void set_hr1()  // Function to set set hours digit of clock
    {
    hr1++;
    if(hr1>11)
    hr1=0;
    lcd_cmd(0xc3);
    lcd_data_int(hr1);
    lcd_data(‘:’);
    }

    void set_min1()  // Function to set set minutes digit of clock
    {
    min1++;
    if(min1>59)
    min1=0;
    lcd_cmd(0xc6);
    lcd_data_int(min1);
    }

    void set_alarm_hr1() // Function to set set hours digit of alarm
    {
    alarm_hr++;
    if(alarm_hr>11)
    alarm_hr=0;
    lcd_cmd(0xc3);
    lcd_data_int(alarm_hr);
    lcd_data(‘:’);
    }

    void set_alarm_min1() // Function to set set minutes digit of clock
    {
    alarm_min++;
    if(alarm_min>59)
    alarm_min=0;
    lcd_cmd(0xc6);
    lcd_data_int(alarm_min);
    }

    void alarm_check()  // Function to check alarm
    {
    if(hr==alarm_hr)
    {
      if(min==alarm_min)
      {
       if(dig_am_pm==alarm_am_pm)
       {
        alarm=1;
        lcd_cmd(0x8b);
        lcd(“ALARM”);
       }
      }
    }
    }

    void temp() // Function to calculate temperature
    {
    int i;
    for(i=0;i<10;i++)
    {
      delay(1);
      rd=1;
      wr=0;
      delay(1);
      wr=1;
      while(intr==1);
      rd=0;
      lcd_cmd(0x88);
      test_intermediate1
    =adc_input/10;
      delay(1);
      intr=1;
    }
    for(i=0;i<10;i++)
    test_intermediate2[0]=test_intermediate1
    +test_intermediate2[0];

    for(i=0;i<10;i++)
    {
      delay(1);
      rd=1;
      wr=0;
      delay(1);
      wr=1;
      while(intr==1);
      rd=0;
      lcd_cmd(0x88);
      test_intermediate1
    =adc_input/10;
      delay(1);
      intr=1;
    }
    for(i=0;i<10;i++)
    test_intermediate2[1]=test_intermediate1
    +test_intermediate2[1];

    for(i=0;i<10;i++)
    {
      delay(1);
      rd=1;
      wr=0;
      delay(1);
      wr=1;
      while(intr==1);
      rd=0;
      lcd_cmd(0x88);
      test_intermediate1
    =adc_input/10;
      delay(1);
      intr=1;
    }
    for(i=0;i<10;i++)
    test_intermediate2[2]=test_intermediate1
    +test_intermediate2[2];

    test_intermediate2[0]=test_intermediate2[0]/3;
    test_intermediate2[1]=test_intermediate2[1]/3;
    test_intermediate2[2]=test_intermediate2[2]/3;
    test_final=test_intermediate2[0]+test_intermediate2[1]+test_intermediate2[2];
    shape();
    convert();
    }

    void main()
    {
    int k;
    start=1;
    dig_hr1=1;
    dig_min1=1;
    alarm_set=1;
    alarm=0;
    lcd_cmd(0x83);
    lcd(“SET ALARM”);
    lcd_cmd(0xc3);
    lcd_data_int(hr1);
    lcd_data(‘:’);
    lcd_data_int(min1);
    while(alarm_set==0)
    {
      delay(10);
      if(dig_hr1==0)
      set_alarm_hr1();
      if(dig_min1==0)
      set_alarm_min1();
    }

    if(am_pm==0)
    {
      lcd_cmd(0xc8);
      lcd_data_string(“am”);
      alarm_am_pm=0;
    }

    if(am_pm==1)
    {
      lcd_cmd(0xc8);
      lcd_data_string(“pm”);
      alarm_am_pm=1;
    }
    delay(200);
    lcd_cmd(0x01);
    lcd_cmd(0x83);
    lcd(“SET TIMING”);
    lcd_cmd(0xc3);
    lcd_data_int(hr1);
    lcd_data(‘:’);
    lcd_data_int(min1);
    while(start==0)
    {
      delay(10);
      if(dig_hr1==0)
      set_hr1();
      if(dig_min1==0)
      set_min1();
    }

    if(am_pm==0)
    {
      lcd_cmd(0xc8);
      lcd_data_string(“am”);
      dig_am_pm=0;
    }

    if(am_pm==1)
    {
      lcd_cmd(0xc8);
      lcd_data_string(“pm”);
      dig_am_pm=1;
    }
    delay(200);
    lcd_cmd(0x01);
    while(1)
    {
      for(k=0;k<2;k++)
      {
       for(hr=hr1;hr<12;hr++)
       {
        for(min=min1;min<60;min++)
        {
         for(sec=0;sec<60;sec++)
         {
          lcd_cmd(0x81);
          delay(1);
          lcd_data_int(hr);
          lcd_data(‘:’);
          lcd_data_int(min);
          lcd_data(‘:’);
          lcd_data_int(sec);
          if(dig_am_pm==0)
          {
           lcd(“am”);
          }
          else
          {
           lcd(“pm”);
          }
          alarm_check();
          lcd_cmd(0xc3);
          delay(2);
          lcd_data_string(“TEMP:”);
          temp();
          lcd_data_string(”    “);
         }
        }
       min1=0;
       }
      if(dig_am_pm==0)
      dig_am_pm=1;
      else
      dig_am_pm=0;
      hr1=0;
      }
    }
    }

    September 14, 2013 at 4:00 am #10445
    prabhat rayal
    Participant

    hello jasper, i am facing the same problem. alarm doesnt work at all. i have made some changes in program and now clock and thermometer are working perfectly. clock is not much accurate but its fine. make the following changes in beginning.

    replace:

     

    sbit wr= P3^2;
    sbit rd= P3^3;
    sbit intr= P3^4;

     

     

    with:

     

    sbit wr= P3^3;
    sbit rd= P3^4;
    sbit intr= P3^5;

     this helped me, as in the circuit 3rd, 4th and 5th pins are connected to wr, rd and intr respectively.

    if clock is slow, you can make changes in j<1275, it worked for me.

    PS: I am not a programmer but i made these changes and they worked for me however i am stll unable to get the alarm into work. please reply if you find any solution

     

    September 15, 2013 at 10:35 am #10448
    Jasper Nunisa
    Participant

       Thank you so much for your solution. By the way, I’m using a simulator ‘Proteus’ and it worked for me there. But I havent checked in the actual circuit. I’ll analyse and give you the details.

        For me the alarm function works as well. I think you are not aware of how to set it. The actual principle behind it is the latching operation. Like the Spdt switch used, which is connected to port 1^2 of the AT89c51 should be grounded while setting the Alarm and Time. Also remember that, before you do this, you should keep the alarm button at on position, until the alarm has been set.

     Once you release the alarm button, the display will show the timing setting..

      Hope this works for you..

      You may ask for any further doubts :) 

    September 16, 2013 at 10:20 am #10450
    prabhat rayal
    Participant

    Hello jasper, i made some more changes in ckt and it worked but still, can you please show me your proteus ckt and the code. you can mail the code and proteus design you are using at “[email protected]”…i shall be very thankful to you..thanks

    September 16, 2013 at 2:16 pm #10451
    Jasper Nunisa
    Participant

     Hey Prabhat, 

                         I sent you the circuit in Proteus and the code. The software works fine but

                         I’m actually having problems in the Lcd connections in hardware. Could you mail me your circuit as well??

    Thanks a lot!

    November 23, 2013 at 8:49 pm #10650
    Mukaram Jawaid
    Participant

    I made this project but my lcd is blank can any one tell me why this happen to me

     

    i think in this code  inisializing LCD programme is missing

     

    Please give me full code..

    i m beginner

     

     

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

RSS Recent Posts

  • Fun with AI and swordfish basic July 19, 2025
  • using a RTC in SF basic July 19, 2025
  • Does US electric code allow branching ? July 19, 2025
  • Faulty heat air gun (dc motor) - problem to locate fault due to Intermittent fault July 19, 2025
  • Sump pit water alarm - Kicad 9 July 19, 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