非常好的資料秒表時(shí)鐘程序c語(yǔ)言51單片機(jī)Proteus仿真均包括_第1頁(yè)
非常好的資料秒表時(shí)鐘程序c語(yǔ)言51單片機(jī)Proteus仿真均包括_第2頁(yè)
非常好的資料秒表時(shí)鐘程序c語(yǔ)言51單片機(jī)Proteus仿真均包括_第3頁(yè)
非常好的資料秒表時(shí)鐘程序c語(yǔ)言51單片機(jī)Proteus仿真均包括_第4頁(yè)
非常好的資料秒表時(shí)鐘程序c語(yǔ)言51單片機(jī)Proteus仿真均包括_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、電子工程訓(xùn)練實(shí)驗(yàn)報(bào)告題目:秒表系統(tǒng)的設(shè)計(jì)和工程實(shí)現(xiàn)系班: 學(xué)號(hào): 姓名: 大連理工大學(xué)電工電子實(shí)驗(yàn)中心電子安裝實(shí)驗(yàn)室一 單片機(jī)系統(tǒng)設(shè)計(jì)方案描述系統(tǒng)設(shè)計(jì)基本指標(biāo):1.實(shí)現(xiàn)最大時(shí)間長(zhǎng)度超過5分鐘的正常倒計(jì)時(shí)2.可以在5分鐘范圍內(nèi)自由方面設(shè)置秒表的開始時(shí)間3.進(jìn)入最后一分鐘時(shí),三聲蜂鳴器響提示4.秒表計(jì)時(shí)到,五聲蜂鳴器響,同時(shí)小燈亮提示電子工程訓(xùn)練是一個(gè)綜合性實(shí)驗(yàn)。秒表系統(tǒng)設(shè)計(jì)總體上分為硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)部分,并要充分考慮它們的匹配設(shè)計(jì)。硬件設(shè)計(jì)特別是引腳的配置要充分考慮軟件實(shí)現(xiàn)的需要,反過來,軟件設(shè)計(jì)也要建立在硬件的基礎(chǔ)上,并且充分利用硬件提供的資源。硬件電路大體上可分為最小系統(tǒng)板電路、數(shù)碼管

2、顯示電路和按鍵電路。最小系統(tǒng)板電路和數(shù)碼管顯示電路在老師指導(dǎo)下很快得以完成。按鍵電路為充分考慮以后軟件設(shè)計(jì)的靈活性和可擴(kuò)展形,采用了排線將引腳引出。軟件設(shè)計(jì)上,為方便秒表的操作使用,設(shè)置了“修改”、“增加”、“移位”和“開始/暫?!彼膫€(gè)按鍵功能?!靶薷摹辨I按下,進(jìn)入修改狀態(tài),相應(yīng)的修改位閃爍,提示按“增加”鍵修改該位時(shí)間參數(shù),操作“移位“按鍵可以移動(dòng)修改位?!伴_始暫?!眲t用于秒表的開始運(yùn)行和暫停運(yùn)行。按鍵處理通常有查詢和中斷兩種方式處理,查詢占用較多的單片機(jī)運(yùn)行資源,而且延遲防抖效果較差,容易多次觸發(fā),而中斷方式消抖則操作更為靈敏。同時(shí)考慮到at89s52只有兩個(gè)外部中斷,將使用較多的“增加”

3、和“開始/暫?!眱蓚€(gè)按鍵處理分配給兩個(gè)外部中斷。另外兩個(gè)按鍵則采用查詢方式檢測(cè)處理。軟件設(shè)計(jì)整體上利用了“有限狀態(tài)機(jī)”的思想,按鍵控制狀態(tài)的轉(zhuǎn)換,并在相應(yīng)的狀態(tài)下執(zhí)行相應(yīng)的操作。一共設(shè)置了3個(gè)狀態(tài):state=0(暫停狀態(tài)),state=1(開始運(yùn)行狀態(tài)),state=2(修改狀態(tài)),它們的相互轉(zhuǎn)化如下:由于本人之前接觸過一些仿真軟件proteus的知識(shí),而本系統(tǒng)設(shè)計(jì)所需要的單片機(jī)、按鍵、數(shù)碼管、蜂鳴器等硬件均可在proteus得到仿真。在程序的編寫調(diào)試過程中,可以完全脫離硬件,高效率的完成了程序的編寫調(diào)試。二 硬件原理圖(電路原理圖、硬件仿真圖)proteus仿真圖三系統(tǒng)流程圖:1.主程序流

4、程圖2. 修改狀態(tài)數(shù)據(jù)操作和數(shù)碼管顯示3. 開始狀態(tài)的數(shù)碼管顯示4暫停狀態(tài)的數(shù)碼管顯示較為簡(jiǎn)單,根據(jù)保留的時(shí)間參數(shù),刷新數(shù)碼管,保持剛才的時(shí)間顯示。5中斷int0修改時(shí)間的流程圖6中斷int1開始與暫停狀態(tài)的切換,程序較為簡(jiǎn)單,按鍵觸發(fā)時(shí),在state為1(開始狀態(tài))和state為0(暫停狀態(tài))來回切換。四、程序#include<reg51.h>#define ulong unsigned longchar tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90;char tab_dp=0x40,0x79,0x24,0x30,0x

5、19,0x12,0x02,0x58,0x00,0x10;#define led p0 /p0為數(shù)碼管的段選#define ws p1 /p1為數(shù)碼管的位選sbit time_shift=p30; /p30為"移位"按鍵sbit time_set=p31; /p31為"修改"按鍵sbit set_inc=p32; /p32為"增加"按鍵sbit time_run=p33; /p33為"計(jì)時(shí)開始暫停"按鍵sbit light=p20;sbit speaker=p27;unsigned char sec,min,sec_

6、ge,sec_shi,min_ge,min_shi,t; /定義秒,分,時(shí),秒的個(gè)位,十位,分的個(gè)位,十位int state; /秒表狀態(tài)指示 0-計(jì)時(shí)暫停 1-正在倒計(jì)時(shí) 2-計(jì)時(shí)時(shí)間參數(shù)修改int flag; /秒表修改數(shù)據(jù)指示 0-分鐘十位 1-分鐘個(gè)位 2-秒鐘十位 3-秒鐘個(gè)位int blink;/-void init();void display_run();void display_pause();void delay(int);void time_modify();/-void main() init(); state=0; flag=0; blink=1; t=0; ligh

7、t=1; speaker=1; min=5; sec=0; sec_ge=0; /秒的個(gè)位和十位 sec_shi=0; min_ge=5; /分的個(gè)位和十位 min_shi=0; while(1) if(time_set=0) /如果"調(diào)時(shí)"按鍵按下 delay(5); /延時(shí)去抖 if(time_set=0) state=2; if(state=0) tr0=0; tr1=0; display_pause(); if(state=1) tr0=1; tr1=0; display_run(); if(state=2) tr1=1; time_modify(); /-void

8、 init() tmod=0x11; ea=1; /開總中斷 et0=0; et1=0; /定義定時(shí)器0工定時(shí)器1作與方式1 th0=0x4d; /定時(shí)器0賦初值 tl0=oxfc; th1=15536/256; /定時(shí)器1賦初值 tl1=15536%256; /中斷初始化 ex0=1; px0=0; it0=1; ex1=1; px1=1; it1=1;/外中斷1void int_1() interrupt 2 using 0 if( time_run=0)/表示按鈕有按下 delay(20); /延時(shí) if(time_run=0) state=(state+1)%2; light=1; s

9、peaker=1; /外中斷0void int_0() interrupt 0 using 1 if( set_inc=0)/表示按鈕有按下 delay(20); /延時(shí)去抖 if(set_inc=0) switch(flag) /分支結(jié)構(gòu),根據(jù)flag的值來判斷哪一位加1 case 0: min=(min+10)%60; break; case 1: min=(min+1)%10+min/10*10; break; case 2: sec=(sec+10)%60; break; case 3: sec=(sec+1)%10+sec/10*10; break; default:break; /

10、-延時(shí)子函數(shù)-void delay(int x) int i,j; for(i=x;i>0l;i-) for(j=255;j>0;j-) ;/-顯示子函數(shù)-void display_run() if(tf0=1) /如果定時(shí)器溢出 tf0=0; /清中斷標(biāo)志位 t+; if(t=20) t=0; if(min=0&&sec=0) min=60; if(sec=0) sec=59; min-; else sec-; if(min=0&&sec>56) speaker=0; delay(20); speaker=1; if(min=0&&a

11、mp;sec=0) light=0; speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1;delay(240); speaker=0; delay(20); speaker=1; state=4; min=5;/回歸初始化 sec=0; sec_ge=0; /秒的個(gè)位和十位 sec_shi=0; min_ge=5; /分的

12、個(gè)位和十位 min_shi=0; sec_ge=sec%10; /秒的個(gè)位和十位 sec_shi=sec/10; min_ge=min%10; /分的個(gè)位和十位 min_shi=min/10; ws=0xfe; /循環(huán)掃描 led=tabsec_ge; delay(1); ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1);void display_pause() ws=0xfe; /循環(huán)掃描 led=tabsec_ge; delay(

13、1); ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1);void time_modify() /修改位的閃爍狀態(tài) if(tf1=1) tf1=0; blink=(blink+1)%2; /修改具體哪個(gè)數(shù)碼管指示 if(time_shift=0) delay(60); if(time_shift=0) flag=(flag+1)%4; / 修改狀態(tài)下的數(shù)碼管顯示 switch(flag) /分支結(jié)構(gòu),根據(jù)flag的值來決定掃描狀態(tài) c

14、ase 0: sec_ge=sec%10; /秒的個(gè)位和十位 sec_shi=sec/10; min_ge=min%10; /分的個(gè)位和十位 min_shi=min/10; ws=0xfe; /循環(huán)掃描 led=tabsec_ge; delay(1); ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); if(blink=1) ws=0xf7; led=tabmin_shi; delay(1); break; case 1: sec_ge=sec%10; /秒的個(gè)位和十位 sec_shi=sec/10;

15、 min_ge=min%10; /分的個(gè)位和十位 min_shi=min/10; ws=0xfe; /循環(huán)掃描 led=tabsec_ge; delay(1); ws=0xfd; led=tabsec_shi; delay(1); if(blink=1) ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1); break; case 2: sec_ge=sec%10; /秒的個(gè)位和十位 sec_shi=sec/10; min_ge=min%10; /分的個(gè)位和十位 min_shi=min/10; ws=0x

16、fe; /循環(huán)掃描 led=tabsec_ge; delay(1); if(blink=1) ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1); break; case 3: sec_ge=sec%10; /秒的個(gè)位和十位 sec_shi=sec/10; min_ge=min%10; /分的個(gè)位和十位 min_shi=min/10; if(blink=1) ws=0xfe; /循環(huán)掃描 led=tabsec_ge; delay(1);

17、 ws=0xfd; led=tabsec_shi; delay(1); ws=0xfb; led=tab_dpmin_ge; delay(1); ws=0xf7; led=tabmin_shi; delay(1); break; default:break; 五問題及解決方案1.剛開始焊接電路時(shí),直接使用焊錫引導(dǎo)作為導(dǎo)線,焊接效果很差。解決方法:后來請(qǐng)教同學(xué)得知可以使用鐵絲引導(dǎo)焊錫焊接連線,得到了很好的效果。2數(shù)碼管顯示電路相對(duì)較為復(fù)雜,布線較多,很容易發(fā)生虛焊、忘焊的情況,檢查電路問題時(shí)遇到了瓶頸,感覺問題錯(cuò)綜復(fù)雜,難以入手。解決方法:后來在老師的幫助下,上電挨個(gè)測(cè)試每個(gè)數(shù)碼管的每個(gè)發(fā)光二極

18、管工作情況,很快定位出了硬件電路問題,提高了工作效率。3.按鍵電路剛開始焊接后測(cè)試,聲音較小。解決方法:后來增加了旁路電容,效果改善很多。4剛開始利用proteus調(diào)試編寫程序,按鍵使用中斷方式,并沒有正確觸發(fā)處理。后來在硬件上直接在線調(diào)試程序,立刻得到了正確的結(jié)果。在網(wǎng)上查詢了很多資料,可能是proteus并不支持中斷仿真。六體會(huì) 電子工程訓(xùn)練是一門綜合性較強(qiáng)的實(shí)驗(yàn),在軟件編程和硬件設(shè)計(jì)上都受到了很好的鍛煉。 技術(shù)上的問題在上一欄中已經(jīng)詳細(xì)地?cái)⑹鲞^了,這里我們想說一下技術(shù)之外的心理上的感受:“實(shí)踐出真知”,“實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)”,這些話都說明了實(shí)踐在追求真理的過程中的重要性。在訓(xùn)練的過程中,我們發(fā)現(xiàn)以前學(xué)的很多知識(shí)在動(dòng)手操作的過程中都立體豐富了許多,同時(shí)也補(bǔ)充了很多我們所不知道的細(xì)節(jié),比如按鍵的消抖處理和電路中地線和電源線應(yīng)該分離布設(shè)效果較好。通常我們?cè)趯W(xué)習(xí)之后不會(huì)在實(shí)踐中很好的把它們運(yùn)用到一起,說白了就是用得不夠自如,說到底還是學(xué)得不夠靈活。但通過訓(xùn)練我們意識(shí)到了這一點(diǎn),而且我們也認(rèn)識(shí)了很多芯片,這為我們以后的工作和學(xué)習(xí)打下了很好的基礎(chǔ)。     課設(shè)過程中我們也充分暴露了一些性格上的缺點(diǎn),比如不夠細(xì)心等等。有的時(shí)候真的很耽誤事,浪費(fèi)了很多時(shí)間,走了很多彎路,這會(huì)對(duì)我們以后的職業(yè)生涯產(chǎn)生一些負(fù)面的影

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論