Single chip electronic stopwatch clock digital tube display

Publisher:ph49635359Latest update time:2020-07-30 Source: 51hei Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

Electronic stopwatch clock digital tube display can set time can be used to stopwatch pause, reset buzzer button tone

The microcontroller source program is as follows:

#include

#include "delay.h"

#include "intrins.h"

unsigned char code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //Define the common cathode LED 7-segment display code


unsigned char dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //Define the digital tube bit code

unsigned char hour=23,min=58,sec=52,week=1; //Define the initial time as 23 hours, 58 minutes and 52 seconds

unsigned char tcount; //define 50ms counting variable

unsigned char flag=0;

sbit KEY1=P1^0;

sbit KEY2=P1^1;

sbit KEY3=P1^2;


sbit key1=P1^3;

sbit key2=P3^6;

sbit key3=P3^7;


sbit LED1=P1^7;

sbit LED2=P1^6;

sbit LED3=P1^5;

sbit LED4=P1^4;


sbit BEEP=P3^0;

void display(unsigned char,unsigned char,unsigned char,unsigned char);


void delay(unsigned int time)//define delay function

        {

                unsigned int j = 0;

                for(;time>0;time--)

                        for(j=0;j<125;j++);

        }


void Delay100us() //@11.0592MHz

{

        unsigned char i, j;


        _nop_();

        _nop_();

        i = 2;

        j = 100;

        do

        {

                while (--j);

        } while (--i);

}


void main(void)

{

         TMOD=0x01; //Timer/Counter 0 is set to mode 1

         TH0=(65536-50000)/256; //The high eight bits of the initial value of the timing 50ms are sent to TH0

         TL0=(65536-50000)%256; //The lower eight bits of the initial value of the timing 50ms are sent to TL0

         EA=1; //Open CPU interrupt

         ET0=1; //Open the interrupt of timer/counter 0

         TR0=1; //Start timer 0

        while(1)

        {

                if(key1==0)

                { BEEP=0;Delay100us();BEEP=1;

                         hour=0;min=0;sec=0;

                }

                if(key2==0)

                { BEEP=0;Delay100us();BEEP=1;

                        TR0=0;

                }

                if(key3==0)

                { BEEP=0;Delay100us();BEEP=1;

                        TR0=1;

                }

               

                if(KEY1==0)

            { delay(180);

                    if(KEY1==0)

                        {

                        TR0=0;

                        flag++;

                        if(flag>4)

                        {

                                flag=0;

                                TR0=1;

                                LED1=1;LED2=1;LED3=1;LED4=1;

                        }

                        }


                }

                switch(flag)

                {

                        case 1: LED1=0;LED2=1;LED3=1;LED4=1;

                               if(KEY2==0)

                               {

                                     delay(180);

                                         if(KEY2==0)

                                         {

                                            hour++;

                                         if(hour>23)

                                         hour=0;

                                         }

                                   }

                                   if(KEY3==0)

                                   {

                                     delay(150);

                                         if(KEY3==0)

                                         {

                                            hour--;

                                         if(hour<0)

                                         hour=23;

                                         }

                                   }

                                   display(hour,min,sec,week);

                                   break;


                        case 2: LED1=1;LED2=0;LED3=1;LED4=1;

                               if(KEY2==0)

                               {

                                     delay(180);

                                         if(KEY2==0)

                                         {

                                            min++;

                                         if(min>59)

                                         min=0;

                                         }

                                   }

                                   if(KEY3==0)

                                   {

                                     delay(180);

                                         if(KEY3==0)

                                         {

                                            min--;

                                         if(min<0)

                                         min=59;

                                         }

                                   }

                                   display(hour,min,sec,week);

                                   break;


                        case 3: LED1=1;LED2=1;LED3=0;LED4=1;

                               if(KEY2==0)

                               {

                                     delay(180);

                                         if(KEY2==0)

                                         {

                                            sec++;

                                         if(sec>59)

                                         sec=0;

                                         }

                                   }

                                   if(KEY3==0)

                                   {

                                     delay(180);

                                         if(KEY3==0)

                                         {

                                            sec--;

                                         if(sec<0)

                                         sec=59;

                                         }

                                   }

                                   display(hour,min,sec,week);

                                   break;


                        case 4:LED1=1;LED2=1;LED3=1;LED4=0;

                              if(KEY2==0)

                               {

                                     delay(180);

                                         if(KEY2==0)

                                         {

                                            week++;

                                         if(week>7)

                                         week=1;

                                         }

                                   }

                                   if(KEY3==0)

                                   {

                                     delay(180);

                                         if(KEY3==0)

                                         {

                                            week--;

                                         if(week<1)

                                         week=7;

                                         }

                                   }

                                   display(hour,min,sec,week);

                                   break;


                        case 5:LED1=1;LED2=1;LED3=1;LED4=1;flag=0;TR0=1;


                        default:break;

               

               

                }

             display(hour,min,sec,week);

        }

}



void display(unsigned char hour,unsigned char min,unsigned char sec,unsigned char week)

{

        

        P0=LED[hour/10]; //The tens digit of the hour is sent to the digital tube for display

        P2=0xfe;

        delay(1);

        P2=0xff;

        

        P0=LED[hour%10]; //The unit digit of the hour is sent to the 2-digit digital tube for display

        P2=0xfd;

        delay(1);

        P2=0xff;

        

        P0=LED[min/10]; //The horizontal bar sends the digital tube to 3-digit display

        P2=0xfb;

        delay(1);

        P2=0xff;

        

        P0=LED[min%10]; //The tens digit of the minute is sent to the 4-digit digital tube for display

        P2=0xf7;

        delay(1);

        P2=0xff;

        

        P0=LED[sec/10]; //The units digit of the minute is sent to the 5-digit digital tube for display

        P2=0xef;

        delay(1);

        P2=0xff;

        

        P0=LED[sec%10]; //The horizontal bar sends the digital tube to 6-digit display

        P2=0xdf;

        delay(1);

        P2=0xff;

        

        P0=LED[10]; //The tens digit of the second is sent to the 7-digit digital tube for display

        P2=0xbf;

        delay(1);

        P2=0xff;

        

        P0=LED[week]; //The units digit of the second is sent to the 8-bit digital tube for display

        P2=0x7f;

        delay(1);

        P2=0xff;

}




void T0_time() interrupt 1 //Timer interrupt processing function

{

        TH0=(65536-50000)/256; //Resend the high 8 bits of the initial value of 50ms to TH0

        TL0=(65536-50000)%256; //Resend the lower eight bits of the initial value of the timing 50ms to TH0

        tcount++; //When the 50ms time is up, add 1

        if(tcount==20) //Judge whether it is 1s

        {

        tcount=0; //After 1s, the variable is cleared to 0

        sec++; //The second count variable is increased by 1

        if(sec==60) //Judge whether the second has reached 60

        {

        sec=0; //When it reaches 60, the second variable is cleared to 0

……………………


Reference address:Single chip electronic stopwatch clock digital tube display

Previous article:Course Design on Making and Debugging Single Chip Microcomputer Intelligent Stopwatch
Next article:433 remote control decoding source program made by single chip microcomputer, with learning function, can store 8 groups of remote control codes

Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号