找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3162|回復(fù): 0
收起左側(cè)

電子數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告 論文下載 有跑表功能

[復(fù)制鏈接]
ID:104287 發(fā)表于 2016-1-30 20:13 | 顯示全部樓層 |閱讀模式
工程設(shè)計(jì)結(jié)題報(bào)告


數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告


    : 6

作    者:

指導(dǎo)老師:

日期:2017年7月29日



功能要求
制作一個(gè)電子時(shí)鐘,該時(shí)鐘能夠正確顯示分秒,且分秒都能顯示兩位數(shù)。同時(shí)具有跑表功能。
二 方案論證
按系統(tǒng)功能要求,決定控制系統(tǒng)采用AT89C52單片機(jī)。系統(tǒng)除能確保實(shí)現(xiàn)要求的功能外,還可以方便地進(jìn)行其它的擴(kuò)展。電子時(shí)鐘系統(tǒng)設(shè)計(jì)方案框圖如下所示

0.png
三 系統(tǒng)硬件電力的設(shè)計(jì)
單片機(jī)的P1口,P3.0-P3.3端口作為4為LED數(shù)碼管顯示控制。P3.5端口按狃可用作時(shí)鐘顯示和調(diào)節(jié)轉(zhuǎn)換/秒表顯示轉(zhuǎn)換,P3.6端口按鈕可用作:時(shí)間調(diào)節(jié)/秒表工作轉(zhuǎn)換。
四 系統(tǒng)程序的設(shè)計(jì)
2.4.1 主函數(shù)
  系統(tǒng)上電后,程序先將P2口置0,然后調(diào)用顯示子函數(shù)和A/D轉(zhuǎn)換測量子函數(shù)并進(jìn)入循環(huán)。系統(tǒng)默認(rèn)為循環(huán)顯示8個(gè)通道的電壓值,每個(gè)通道的數(shù)據(jù)顯示時(shí)間在1S左右,電壓測量的周期為8ms。主函數(shù)執(zhí)行的流程圖如圖2.3所示。
2.4.2顯示子函數(shù)
顯示功能采用動態(tài)掃描發(fā)實(shí)現(xiàn)4位數(shù)碼管的數(shù)值顯示。測量所得的A/D轉(zhuǎn)換數(shù)據(jù)放在8個(gè)定義的ad_data[8]內(nèi)存單元中,測量所得的A/D數(shù)據(jù)在顯示時(shí)需要經(jīng)過轉(zhuǎn)換變成十進(jìn)制BCD碼。列掃描采用掃字代碼,每位LED顯示器顯示時(shí)間為1ms,每路電壓數(shù)據(jù)顯示時(shí)間約為1s。

1.png


                           圖2.2 數(shù)字電表電路原理圖


                        
調(diào)試及性能分析
2.5.1 調(diào)試與測試
     采用Kei C51 ver 7.09版的C編譯器進(jìn)行C程序編譯及調(diào)試,同時(shí)進(jìn)行硬件電路板的設(shè)計(jì)制作,燒好程序后進(jìn)行軟件聯(lián)調(diào)
1 程序調(diào)試
  程序編寫好燒入芯片,裝在電路板上基本能記時(shí)。但是由于數(shù)碼管(共陽)的亮度不夠硬件又加上了三極管,結(jié)果顯示就亂了。將程序掃描數(shù)組的數(shù)據(jù)取反后,芯片就能夠正常工作,時(shí)鐘的調(diào)試和顯示都正常了。可是當(dāng)用秒表的時(shí)候又發(fā)現(xiàn)了新的問題,當(dāng)手動停止秒表跑動的時(shí)候數(shù)碼管的顯示就不清楚,數(shù)碼管里一些不應(yīng)該亮的發(fā)光二極管也出現(xiàn)不同程度的發(fā)光,使得顯示的數(shù)據(jù)不正常。為了解決這個(gè)問題就修改了跑表的子函數(shù),在這個(gè)子函數(shù)的末加上了延時(shí)(delay1ms(1))以及賦值(P3=0xff)。最后數(shù)碼管顯示都正常了。
通過這次實(shí)驗(yàn),我們對單片機(jī)以原理的了解以及利用C語言來編程序都有了很大的進(jìn)步。單片機(jī)的原理和程序的編輯,是設(shè)計(jì)的關(guān)鍵部分,我們應(yīng)該盡最大的努力去學(xué)好他們,這對我們以后的學(xué)習(xí)也是非常有用的。                                             
2硬件調(diào)試
    在這次實(shí)驗(yàn)中,由于我們用的上次是實(shí)驗(yàn)板,所以在硬件上并沒有做過多的改動。但我們上次實(shí)驗(yàn)中有些部分的原理不是很理解,所以做的作品不是很理想。其中數(shù)碼管不是很亮是最大的問題,所以我們在這次的實(shí)驗(yàn)中做了改進(jìn):我們加入了9015的三極管。結(jié)果數(shù)碼管的顯示果然好了很多,基本達(dá)到所需要求。

源程序:
#include<AT89X52.h>
unsigned char codetable[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char codepower[4]={0xfe,0xfd,0xfb,0xf7};
unsigned char time[4]={1,0,0,0};//時(shí)間數(shù)組
unsigned char dingshi[4]={0,0,0,0};//定時(shí)數(shù)組
unsigned char paomiao[4]={0,0,0,0};//跑秒數(shù)組
unsigned char temp[4];//跑秒臨時(shí)數(shù)組
unsigned char count=0;//計(jì)數(shù)變量
unsigned char k,n,t;
//延時(shí)函數(shù)
delay1ms(unsigned char t)
{
       unsignedchar i,j;
       for(i=0;i<t;i++)
              for(j=0;j<120;j++);
}
//定時(shí)用的設(shè)定分鐘函數(shù)
void alarm1()
{     while(1)
       {     for(k=2;k<4;k++)//掃描顯示
                     {     P1=table[dingshi[k]];
                            P3=power[k];
                            delay1ms(1);
                     }
              if(P3_6==0) dingshi[2]++;
              while(P3_6==0)  ;
              if(dingshi[2]==10){dingshi[3]++;dingshi[2]=0;}
              if(dingshi[3]==6){dingshi[2]=0;dingshi[3]=0;}
              if(P3_5==0) break;//響應(yīng)按鍵
       }
}
//定時(shí)用的設(shè)定秒鐘函數(shù)
void alarm2()
{     while(1)
       {     for(k=0;k<2;k++)
                     {     P1=table[dingshi[k]];
                            P3=power[k];
                            delay1ms(1);
                     }
              if(P3_6==0) dingshi[0]++;
              while(P3_6==0);
              if(dingshi[0]==10){dingshi[1]++;dingshi[0]=0;}
              if(dingshi[1]==6){dingshi[0]=0;dingshi[1]=0;}
              if(P3_5==0) break;
       }
}
//設(shè)定分鐘函數(shù)
void minute()
{     for(;;)
       {     for(k=2;k<4;k++)
                     {     P1=table[time[k]];
                            P3=power[k];
                            delay1ms(1);
                     }
              if(P3_6==0) time[2]++;
              while(P3_6==0)    ;
              if(time[2]==10) {time[3]++;time[2]=0;}
              if(time[3]==6) {time[2]=0;time[3]=0;}
              if(P3_5==0) break;
       }
}
//設(shè)定秒鐘函數(shù)
void second()
{     for(;;)
       {     for(k=0;k<2;k++)
                     {     P1=table[time[k]];
                            P3=power[k];
                            delay1ms(1);
                     }
              if(P3_6==0) time[0]++;
              while(P3_6==0);   
              if(time[0]==10) {time[1]++;time[0]=0;}
              if(time[1]==6) time[1]=0;
              if(P3_5==0) break;
       }
}
//
void timer() interrupt 1//定時(shí)器中斷程序
{     paomiao[0]++;count++;
       if(paomiao[0]==10){paomiao[1]++;paomiao[0]=0;}
       if(paomiao[1]==10){paomiao[2]++;paomiao[1]=0;}
       if(paomiao[2]==10){paomiao[3]++;paomiao[2]=0;}
       if(paomiao[3]==6)
       for(k=0;k<4;k++)
                     paomiao[k]=0;
       if(count==100)
              {     time[0]++;count=0;
                     if(time[0]==10){time[1]++;time[0]=0;}
                     if(time[1]==6){time[2]++;time[1]=0;}
                     if(time[2]==10){time[3]++;time[2]=0;}
                     if(time[3]==6){time[0]=0;time[1]=0;time[2]=0;time[3]=0;}
              }
       TH0=0xd8;TL0=0xf0;
       TF0=0;
}
//計(jì)數(shù)器中斷程序
void counter() interrupt 3
{     while(P3_5==0);
       alarm1();while(P3_5==0);
       alarm2();while(P3_5==0);
       minute();while(P3_5==0);
       second();while(P3_5==0);
       TH1=0XFF;TL1=0XFF;
       TF1=0;
}            
//
void main()
{     
       TMOD=0x51;
       TH1=0xff;
       TL1=0xff;
       TH0=0xd8;
       TL0=0xf0;
       EA=1;
       ET0=1;
       ET1=1;
       TR0=1;
       TR1=1;
       while(1)
       {     if(P3_6==0)//跑秒程序
              {            while(P3_6==0);
                            for(k=0;k<4;k++)
                                   paomiao[k]=0;
                            for(;P3_6!=0;)
                            {     for(k=0;k<4;k++)
                                   {     P1=table[paomiao[k]];
                                          if(k==2) P1_7=1;
                                          P3=power[k];delay1ms(3);
                                   }
                            }
                            while(P3_6==0);
                            for(k=0;k<4;k++)
                                          temp[k]=paomiao[k];
                            for(;P3_6!=0;)
                                          {     for(k=0;k<4;k++)
                                                        {     P1=table[temp[k]];
                                                               if(k==2)P1_7=1;
                                                               P3=power[k];delay1ms(5);
                                                        }
                                          }                                               
                            while(P3_6==0);
              }     
              for(k=0;k<4;k++)//平常顯示
              {     P1=table[time[k]];
                     if(k==2&&time[0]%2==0)P1_7=1;
                     P3=power[k];
                     delay1ms(1);
              }
              if(time[0]==dingshi[0]&&time[1]==dingshi[1]&&time[2]==dingshi[2]&&time[3]==dingshi[3])//定時(shí)程序
                     for(;;)
                     {     for(n=0;n<250;n++)//時(shí)間到時(shí)閃爍
                                   for(k=0;k<4;k++)
                                   {     P1=0xff;
                                          P3=power[k];
                                          delay1ms(1);
                                   }
                            for(n=0;n<250;n++)
                                   {P3|=0x0f;delay1ms(1);}
                            if(P3_6==0) {while(P3_6==0);break;}
                     }
       }
}
      
      
        
元件清單:AT89C52,四聯(lián)數(shù)碼管,按鈕開關(guān)(3個(gè)),晶振(12MHZ),電容,電阻,電路板

以上是部分內(nèi)容,完整版本的請下載附件
word格式的完整設(shè)計(jì)論文下載: 數(shù)字時(shí)鐘設(shè)計(jì)實(shí)驗(yàn)報(bào)告.doc.rar (23.05 KB, 下載次數(shù): 21)

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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