標(biāo)題: 幫忙指導(dǎo)下嘛 看看我的程序有錯沒 幫我改下嘛 [打印本頁]

作者: 1824380946    時間: 2016-7-13 18:36
標(biāo)題: 幫忙指導(dǎo)下嘛 看看我的程序有錯沒 幫我改下嘛
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Tab0[]=  //定義數(shù)碼管數(shù)組,沒有小數(shù)點
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar code Tab1[]=  //定義數(shù)碼管數(shù)組,有小數(shù)點
{
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef
};
void Delay(uchar x);  //延時函數(shù)
void Display0();   //時間顯示函數(shù)
void Display2();  //時間設(shè)置顯示函數(shù)
void Init();    //中斷初始化函數(shù)
uchar Hours=23,Minutes=56,seconds=55;  //分別定義三個變量表示時、分、秒
uchar Time0_bit=0;   //用于定時器0的溢出標(biāo)志
bit Set_Time=0;    //設(shè)置時 閃爍時長的標(biāo)志位
bit Set0=0;     //設(shè)置時間標(biāo)志,確定是設(shè)置‘分’還設(shè)置‘時’
void main()
{
Init();          //中斷初始化
while(1)         //死循環(huán)
  {
  
       Display0();   //顯示時間        
      
      }
   
       }
void Time0() interrupt 1      //定時器0函數(shù)
{
TH0=(65536-50000)/256;        //重裝初值
TL0=(65536-50000)%256;
Time0_bit++;
if((Time0_bit%10)==0)     //每溢出10次Time0_bit取反一次
  Set_Time=~Set_Time;       //0.5秒閃爍一次
if(Time0_bit==20)      //以下為時間數(shù)據(jù)處理
  {
   Time0_bit=0;
   seconds++;
   if(seconds==60)
    {
     seconds=0;
     Minutes++;
     if(Minutes==60)
      {
       Minutes=0;
       Hours++;
       if(Hours==24)
        {
         Hours=0;
        }
      }
    }
  }
}
void Init()        //中斷初始化函數(shù)
{
EA=1;        //開總中斷
TMOD=0X01;        //定時器工作方式選擇,定時器0和定時器1都選擇第1種工作方式
TH0=(65536-50000)/256;   //定時器0裝初值,定時50ms
TL0=(65536-50000)%256;
ET0=1;       //開定時器0開關(guān)
TR0=1;          //開定時器0小開關(guān)
}
void Display2()       //時間設(shè)置時的顯示函數(shù)
{
if(Set0==0)       //判斷是否為設(shè)置‘時’還是‘分’
  {
   P0=Tab0[seconds%10];  //顯示秒的個位
   P1=0xdf;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
  
   P0=Tab0[seconds/10];  //顯示秒的十位
   P1=0xef;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
   
   if(Set_Time)    //這個if語句實現(xiàn)分鐘以0.5秒的頻率閃爍
    {
     P0=Tab1[Minutes%10];  //顯示分的個位,需要加上小數(shù)點做分隔符
     P1=0xf7;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
     P0=Tab0[Minutes/10];  //顯示分的十位
     P1=0xfb;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
    }
   else
    {
     P0=0x00;  //顯示分的個位,需要加上小數(shù)點做分隔符
     P1=0xf7;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
  
     P0=0x00;  //顯示分的十位
     P1=0xfb;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
    }
   
   P0=Tab1[Hours%10];   //顯示時的個位,需要加上小數(shù)點做分隔符
   P1=0xfd;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
  
   P0=Tab0[Hours/10];   //顯示時的十位
   P1=0xfe;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
  }

else   //‘時’鐘閃爍
  {
   P0=Tab0[seconds%10];  //顯示秒的個位
   P1=0xdf;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
  
   P0=Tab0[seconds/10];  //顯示秒的十位
   P1=0xef;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
   
   P0=Tab1[Minutes%10];  //顯示分的個位,需要加上小數(shù)點做分隔符
   P1=0xf7;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
   P0=Tab0[Minutes/10];  //顯示分的十位
   P1=0xfb;     //段選
   Delay(10);     //延時
   P0=0X00;     //消隱
   
   if(Set_Time)    //這個if語句實現(xiàn)‘時’鐘以0.5秒的頻率閃爍
    {
     P0=Tab1[Hours%10];   //顯示時的個位,需要加上小數(shù)點做分隔符
     P1=0xfd;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
   
     P0=Tab0[Hours/10];   //顯示時的十位
     P1=0xfe;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
    }
   else
    {
     P0=0x00;   //顯示時的個位,需要加上小數(shù)點做分隔符
     P1=0xFF;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱
   
     P0=0X00;   //顯示時的十位
     P1=0xFF;     //段選
     Delay(10);     //延時
     P0=0X00;     //消隱   
    }  
  }
}
void Display0()   //顯示時鐘
{
P0=Tab0[seconds%10];  //顯示秒的個位
P1=0xdf;     //段選
Delay(10);     //延時
P0=0X00;     //消隱
P0=Tab0[seconds/10];  //顯示秒的十位
P1=0xef;     //段選
Delay(10);     //延時
P0=0X00;     //消隱
P0=Tab1[Minutes%10];  //顯示分的個位,需要加上小數(shù)點做分隔符
P1=0xf7;     //段選
Delay(10);     //延時
P0=0X00;     //消隱
P0=Tab0[Minutes/10];  //顯示分的十位
P1=0xfb;     //段選
Delay(10);     //延時
P0=0X00;     //消隱
P0=Tab1[Hours%10];   //顯示時的個位,需要加上小數(shù)點做分隔符
P1=0xfd;     //段選
Delay(10);     //延時
P0=0X00;     //消隱
P0=Tab0[Hours/10];   //顯示時的十位
P1=0xfe;     //段選
Delay(10);     //延時
P0=0X00;     //消隱
}

void Delay(uchar x)      //延時
{
uchar i,j;
for(i=x;i>0;i--)
  for(j=110;j>0;j--);
}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1