找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1919|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

幫忙指導(dǎo)下嘛 看看我的程序有錯沒 幫我改下嘛

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:129825 發(fā)表于 2016-7-13 18:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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--);
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表