star 发表于 2012-8-21 16:55:13

电子表一块(含源程序)转

//******************************************************
//实验目的:利用TMR0中断产生秒时钟,数码管显示六位时间
//单片机:PIC16F883
//晶振:4MHZ
//PORTA输出位码,PORTC输出段码,三个按键调整时间
//******************************************************
#include<pic.h>
#include"Def.h"
#include"Time.h"
/************************************************************
** 函 数 名: main
** 功能描述: 程序主函数
*************************************************************/
main()
{
Bz=0;
InitPort();
second=0;
minite=0;
hour=0;
LL.A=0;
TMR0=0;      //开启TMR0中断
LL.B.L=TMR0;
tcnt=0;
SOUND=0;
m=0;
while(1)
{
Flag.A=0;
LL.B.L=TMR0;
KEY_ASSAY();      //调时间
ShowZ();
tcnt++;
if(tcnt==6)tcnt=0;
if(LL.A>=62500)
{
   TMR0=0;
   LL.B.L=TMR0;
   LL.A=0;
   if(Hou==12)Music12();   //12小时制报时
   if(Hou==24)Music24();   //24小时制报时
   second++;
   if(second==60)
   {
    second=0;
    minite++;
    if(minite==60)
    {
   minite=0;
   hour++;
   if(Hou==24)   //24小时制
   {
      if(hour==24)hour=0;
   }
   if(Hou==12)   //12小时制
   {
      if(hour==12&&Bz==1)
      {
       hour=0;
       Bz=0;
      }
      if(hour==13&&Bz==0)
      {
       hour=1;
       Bz=1;
      }
   }
    }
   }
}
dispbuf=second%10;
dispbuf=second/10;
dispbuf=minite%10;
dispbuf=minite/10;
dispbuf=hour%10;
if(Hou==24)      //24小时制
{
   dispbuf=hour/10;
}
if(Hou==12)      //12小时制
{
   if(Bz==0)
    if(hour<10)
    {
   dispbuf=10;
    }
    else
    {
   dispbuf=11;
    }
   if(Bz==1)
    if(hour<10)
    {
   dispbuf=12;
    }
    else
    {
   dispbuf=13;
    }
}
}
}
/************************************************************
** 函数名称: IntTm(void)
** 功能描述: 中断函数
*************************************************************/
void interrupt IntTm(void)
{
if(T0IF==1)
{
LL.B.H+=1;   T0IF=0;
}
}
页: [1]
查看完整版本: 电子表一块(含源程序)转