电子手表的C语言程序(单片机实现)_天使猪猪飞_百度空间

这是单片机实现的电子手表上的C语言程序

日期显示还有点下问题:

#include"at89x51.h"
#define uchar unsigned char
sbit key=P3^4;
sbit key_change=P3^5;
sbit key_up=P3^6;
sbit key_down=P3^7;
uchar tab[]={    //数码管显示代码表
        0xC0,/*0*/
        0xF9,/*1*/
        0xA4,/*2*/
        0xB0,/*3*/
        0x99,/*4*/
        0x92,/*5*/
        0x82,/*6*/
        0xF8,/*7*/
        0x80,/*8*/
        0x90,/*9*/

};
uchar number,count,change;
uchar date,month;
uchar hour,mintue,second;
/******************************
     初始化程序
******************************/
void system()
{
hour=12;
mintue=10;
second=0;
date=23;
month=5;
count=number=change=0;
TMOD=0x01;
TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
/******************************
     延时毫秒程序
******************************/
void delay(uchar no)
{
uchar i,j;
for(i=0;i<no;i++)
{
   for(i=0;j<164;j++);
   for(i=0;j<164;j++);  
}
}
/******************************
     定时器0中断处理程序
******************************/
void timer1_ISR() interrupt 1
{
    count++;
if(count==20)
{
   count=0;
   second++;
   if(second==60)
   {
    second=0;
    mintue++;
    if(mintue==60)
    {
       mintue=0;
     hour++;
     if(hour==24)
     {
      hour=0;
      date++;
      if(date==30)
      {
       month++;
       month=month%13;
      }
     }
    }
   }
}
}
/******************************
     显示程序
******************************/
void display_day()
{
P0=tab[month/10];
P2_0=0;
delay(1);
P2_0=1;
P0=tab[month%10];
P2_1=0;
delay(1);
P2_1=1;
P0=tab[date/10];
P2_2=0;
delay(1);
P2_2=1;
P0=tab[date%10];
P2_3=0;
delay(1);
P2_3=1;
}
void display_time()
{
P0=tab[hour/10];
P2_0=0;
delay(1);
P2_0=1;
P0=tab[hour%10];
P2_1=0;
delay(1);
P2_1=1;
P0=tab[mintue/10];
P2_2=0;
delay(1);
P2_2=1;
P0=tab[mintue%10];
P2_3=0;
delay(1);
P2_3=1;
}
void display_second()
{
P0=tab[second/10];
P2_2=0;
delay(1);
P2_2=1;
P0=tab[second%10];
P2_3=0;
delay(1);
P2_3=1;
}
void deal_change()
{
if(key_change==0)
{
   change++;
   while(!key_change)
   {
    display_time();
   }
   change=change%5;
}
}
void deal_change0()
{
if(change==0)
   {
    if(key==0)
    {
     number++;
     number=number%3;
     while(!key);
    }
    if(number==0)
    {
     display_time();
    }
    if(number==1)
    {
     display_second();
    }
    if(number==2)
    {
     display_day();
    }
   }
}
void deal_change1()
{
if(change==1)
{
   display_time();
   if(key_up==0)
   {
    mintue++;
    while(!key_up)
    {
     display_time();
    }
    if(mintue==60)
    {
     mintue=0;
     hour++;
     if(hour==24)
     {
      date++;
      if(date==30)
      {
       month++;
       month=month%13;
      }
     }
    }
   }
   if(key_down==0)
   {
    if(mintue==0)
    {
     mintue=60;
     if(hour==0)
     {
      hour=24;
      date--;
      if(date==0)
      month--;
      hour--;
     
     }    
    }
    mintue--;
    while(!key_down)
    {
     display_time();
    }   
   }
}
}
void deal_change2()
{
if(change==2)
{
   display_time();
   if(key_up==0)
   {
    hour++;
    while(!key_up)
    {
     display_time();
    }
    if(hour==24)
    {
     hour=0;
     date++;
     if(date==30)
     {
      month++;
      date=1;
     }
    }
   }
   if(key_down==0)
   {
    while(!key_down)
    {
     display_time();
    }
    if(hour==0)
    {
     hour=24;
     date--;
     if(date==0)
     {
      month--;
      date=30;
     }
    }
    hour--;
   }
}
}
void deal_change3()
{
if(change==3)
{
   display_day();
   if(key_up==0)
   {
    date++;
    while(!key_up)
    {
     display_day();
    }
    if(date==30)
    {
     month++;
     date=1;
    }
   }
   if(key_down==0)
   {
    while(!key_down)
    {
     display_day();
    }
    if(date==0)
    {
     month--;
     date=31;
    }
    date--;
   }
}
}
void deal_change4()
{
if(change==4)
{
   display_day();
   if(key_up==0)
   {
    month++;
    month=month%13;
    while(!key_up)
    display_day();
   }
   if(key_down==0)
   {
    month--;
    if(month==0)
    month=12;
    while(!key_down)
    display_day();
   }
}
}
/************************
     主程序
************************/
void main()
{
    system();
while(1)
{
     deal_change();
     deal_change0();
     deal_change1();
     deal_change2();
     deal_change3();
     deal_change4();
   }
}



郑重声明:资讯 【电子手表的C语言程序(单片机实现)_天使猪猪飞_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——