當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]此時間程序沒有用到ds1302等芯片,而是用單片機自帶的定時器制作的,并且可調(diào)整時間。請大家多多指教 #include"reg52.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int ui

此時間程序沒有用到ds1302等芯片,而是用單片機自帶的定時器制作的,并且可調(diào)整時間。請大家多多指教
#include"reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint  unsigned int
 
uint schedule[6];
uint count,b; //計數(shù):以秒為單位
uint  number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //對應(yīng)數(shù)碼管的0-9
uint a[4]={0xfe,0xfd,0xfb,0xf7}; //對應(yīng)的四個數(shù)碼管
uint minute[2],second[2] ;
sbit P30=P3^0; //P3口作為鍵盤控制端
sbit P31=P3^1;
sbit P36=P3^6;
sbit P35=P3^5;
sbit P34=P3^4;
sbit P33=P3^3;
sbit P32=P3^2;
sbit P37=P3^7;
void assign();
void show();
 
void delay(unsigned n);
void main()
{
  uint i ;
  EA=1;//總中斷打開
  IT0=1;//外部中斷打開
  EX0=1; //
  count=43200;
  TMOD=0x10;
  P30=0;
  P31=1;
  P32=1;
  P33=1;
  P34=0;
  P35=1;
  P36=1;
  P37=1;
  while(1)
  { 
      for(i=0;i<=19;i++)//每循環(huán)一次用時50ms.
   {
       TR1=1;//選擇計數(shù)器1
    TH1= 0x3c;
    TL1=0xb0;//賦初值
    show(); //顯示函數(shù)
    TF1=0;   //恢復(fù)標(biāo)志

   }
   count++;
 
       
  }

}
void assign() //給小時,分鐘,秒賦值
{
     
  if(count>=46800) //滿了13個小時轉(zhuǎn)化為1點鐘
    count=count-43200;
 if(count>=36000)  //計算小時 前一位 減少算法
      schedule[0]=minute[0]=1;
 else
   schedule[0]=minute[0]=0;
 schedule[1]=minute[1]=count/3600%10;//計算小時的后一位
 schedule[2]=second[0]=  count%3600/600;  //計算分鐘的前一位
 schedule[3]=second[1]=  count%3600/60%10;//計算分鐘的后一位
        
}
void show()   //顯示函數(shù)
{
     uint i;
  
    while(1)
 {
   
    assign();
    for(i=0;i<4;i++)
    { 
        P1=a[i]; //亮那個數(shù)碼管
       P2=number[schedule[i]]; //亮一個什么樣的數(shù)字
      if(i==1 )
       P2=P2-0x80;  //亮小數(shù)點便于好看
     delay(50);//延時函數(shù),便于亮的清晰
   
  
  
    }
 if(TF1==1) //已經(jīng)有50ms
    break;
 }
}
void delay(unsigned n) //延時程序
{
    uint i;
 for(i=1;i<=n;i++)
 {

     if(TF1==1) //已經(jīng)有50ms
    break;
if(P31==0)   //調(diào)表
{
          
        for(b=0;b<3000;b++) //放抖動:按的時間太短
             {
       
    }          
       if(P31==1)
    goto back5;
    
 
   
    if(P31==0)
  {
  while(1)
      {
     
      show();
   TF1=0;   //恢復(fù)標(biāo)志
   if(P32==0) //加一分鐘
   {
        for(b=0;b<3000;b++)
             {}  
       if(P32==1)
    goto back1;
       count=count+60;
    if(P32==0)
    
         {
  while(1)
  {
  show();
  TF1=0;   //恢復(fù)標(biāo)志 
  if(P32==1)
  break;
  }
  }
  
      }
   back1: show(); 
  if(P33==0)   //減一分鐘
      {
        for(b=0;b<3000;b++)
             {}  
       if(P33==1)
    goto back2;
       count=count-60;

    if(P33==0)
    {
  while(1)
  {
  show();TF1=0;   //恢復(fù)標(biāo)志
  if(P33==1)
  break;
  }
  }
  
      }
      
      back2:show(); 
   if(P36==0)  //加一個小時
      {
        for(b=0;b<3000;b++)
             {}  
       if(P36==1)
    goto back3;
       count=count+3600;

    if(P36==0)
    {
  while(1)
  {
  show(); TF1=0;   //恢復(fù)標(biāo)志
  if(P36==1)
  break;
  }
  }
  
      }
      
      back3:show();
   if(P37==0)   //減一個小時
      {
        for(b=0;b<3000;b++)
             {}  
       if(P37==1)
    goto back4;
    if(schedule[0]==0&&schedule[1]==1)  //處理1點鐘到12點
    count=count+39600;
    else
       count=count-3600;

    if(P37==0)
    {
  while(1)
  {
  show(); TF1=0;   //恢復(fù)標(biāo)志
  if(P37==1)
  break;
  }
  }            
  
      }
      
      back4:show(); 
   if(P35==0)//沒有必要防抖
    break;

  }
}
   back5: show(); //按的時間太duan

  }   
  
      }
    
 
 }


 此程序有幾個缺點:一,調(diào)時間的時候有點暗。二,算法比較差。三,代碼比較難看。四,當(dāng)時我想從0到24小時計時,但count為int溢出了,后面我不用count計時,可是可以但是調(diào)時間的話有比較難寫,不想亂費時間了,改成長整型有不知道那個地方出問題。希望高手指點。
分享到:
 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉