版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
多功能數(shù)字電子表總結(jié)報告優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)
多功能數(shù)字電子表總結(jié)報告優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)電子技術(shù)綜合設(shè)計總結(jié)報告姓名:王功臣、劉聰學號:04101686、04101680專業(yè)與班級:電氣工程與自動化10-7班設(shè)計題目:多功能數(shù)字電子表時間:2021~2021學年第(1)學期指導教師:成績:日期:緒論:隨著計算機在社會各領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機的應用正不斷的走向深入。單片機是一種集成在電路里的芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能集成到一塊硅片上構(gòu)成的一個小而完善的計算機系統(tǒng)。隨著單片機的不斷發(fā)展,現(xiàn)已應用領(lǐng)域十分廣泛。。本文介紹的多功能數(shù)字電子鐘的控制核心是單片機(STC89C52),以單片機內(nèi)部定時計數(shù)器在計數(shù)滿1s時產(chǎn)生一次中斷,從而計數(shù)變量增加1,采用蜂鳴器、數(shù)碼管顯示器、語音報時電路以及其他電路構(gòu)成。實現(xiàn)了時間顯示、電子日歷、時間預置、秒表、倒計時、鬧鈴、語音報時和復位等功能;通過對多功能時鐘的設(shè)計,加深對單片機的理解,熟悉了單片機的內(nèi)部硬件資源,掌握單片機的編程方法,學會對單片機各部分硬件資源的控制方法。此外,還要學會怎么利用所學單片機知識獨立設(shè)計系統(tǒng)的能力,達到學于致用的目的,要學會發(fā)創(chuàng)設(shè)計編程思想,要學會開發(fā)系統(tǒng)的一般過程,并不斷創(chuàng)新.一課題任務名稱:多功能數(shù)字電子表基本要求:計時功能:顯示時、分、秒,定鬧功能,秒表功能,倒計時功能。提高要求:增加“語音報時”功能,增加“電子日歷”功能。二方案比較與選擇方案一:采用中規(guī)模集成電路,由電容、電阻、CMOS非門、晶體組成震蕩電路提供一個頻率穩(wěn)定的方波信號,分頻器電路將高頻方波信號經(jīng)若干次分頻后得到1Hz的方波信號供秒計數(shù)器進行計數(shù),秒位、分位、時位計數(shù)器分別為60、60、24進制計數(shù)器,譯碼驅(qū)動電路將計數(shù)器輸出的8421BCD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且為保證數(shù)碼管正常工作提供足夠的工作電流。整點報時、校時等功能也可以通過與非門組成的邏輯電路來實現(xiàn)。方案二:采用單片機內(nèi)部定時計數(shù)器中斷,控制計數(shù)變量,將計數(shù)變量通過單片機引腳送至總線驅(qū)動,為數(shù)碼管提供足夠的電流,通過程序控制每位數(shù)碼管,實現(xiàn)動態(tài)顯示。通過7個按鍵來實現(xiàn)時間預置、秒表、倒計時、鬧鐘設(shè)置、復位的功能。在沒有中斷,沒有按鍵按下的時候,單片機循環(huán)執(zhí)行顯示程序,當中斷發(fā)生時、有按鍵按下時,單片機進入相應的子程序執(zhí)行。語音報時電路采用isd1420語音芯片,用麥克風錄下人聲,單片機控制語音芯片在適當?shù)臅r候通過喇叭播放事先錄好的聲音。附加功能都可以通過單片機程序來實現(xiàn)。方案比較:方案一重要用邏輯電路來實現(xiàn),需要的芯片較多,集成化低,功能越多,硬件電路越復雜,需要的芯片比較多,成本也較高,故障率高,而且技術(shù)相對落后。方案二采用單片機控制,可以方便地控制外圍的器件,所有的功能都可以通過編程來實現(xiàn),實現(xiàn)的功能也更加豐富,需要的芯片數(shù)少,電路相對簡單。綜合比較兩種方案,本設(shè)計決定采用方案二。三電路設(shè)計3.1系統(tǒng)總體框圖3.2各部分電路設(shè)計3.2.1復位電路在RST復位引腳接一個電容到VCC,接一個電阻到地就可以了。在給系統(tǒng)上電時,復位電路通過電容加到RST復位引腳一個短暫的高電平信號,這個復位信號隨著VCC對電容的充電過程而回落,所以RST引腳復位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復位,RST引腳的高電平信號必須維持足夠長的時間。電路圖如圖。3.2.2時鐘電路時鐘是單片機的心臟,單片機各功能部件的運行都是以時鐘頻率為基準,MCS-51單片機內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,該高增益反向放大器的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個引腳跨接石英晶體振蕩器和微調(diào)電容,就構(gòu)成一個穩(wěn)定的自激振蕩器。電路中的C1、C2的選擇在30PF左右,但電容太小會影響振蕩的頻率、穩(wěn)定性和快速性。晶振頻率為在1.2MHZ~12MHZ之間,頻率越高單片機的速度就越快,但對存儲器速度要求就高。為了提高穩(wěn)定性我們采用溫度穩(wěn)定性好的NPO電容,采用的晶振頻率為12MHZ。本次系統(tǒng)的時鐘電路設(shè)計如圖。3.2.3數(shù)碼管顯示電路用六個共陽極7段數(shù)碼管動態(tài)掃描顯示時間變量,單片機P3口和P0口分別給數(shù)碼管送位碼和字型碼,由于P0口沒有內(nèi)置上拉電阻,它輸出不了高電平,所以要先給P0口加上上拉電阻。由于數(shù)碼管輸出電流比較小,由P3經(jīng)過總線驅(qū)動器74ls573(或245)給需要顯示的數(shù)碼管的陽極高電平,為數(shù)碼管提供足夠的電流,這樣相應的數(shù)碼管就會點亮,延時一段時間接著顯示下一位,循環(huán)顯示。數(shù)碼管管壓降3.5v左右靜態(tài)顯示時工作電流大約5mA,動態(tài)顯示時工作電流大約20mA,這里動態(tài)顯示六個數(shù)碼管,電流取30mA,所以,流過數(shù)碼管的的限流電阻計算為:R=(5v-3.5v)/0.03A=50歐姆。3.2.4語音芯片電路采用ISD1420語音芯片,它是美國ISD公司出品的優(yōu)質(zhì)單片語音錄放電路,由振蕩器、語音存儲單元、前置放大器、自動增益控制電路、抗干擾濾波器、輸出放大器組成。一個最小的錄放系統(tǒng)僅由一個麥克風、一個喇叭、兩個按鈕、一個電源、少數(shù)電阻電容組成。使用方便的單片錄放系統(tǒng),外部元件少,信息可保存100年,可反復錄放10萬次。錄音端/REC和下降沿觸發(fā)放音端/PLAYE分別接開關(guān),用于手動錄放音測試。按下開關(guān),此端為低電平,開始錄音或放音。此外,錄音端口/REC還接到了三極管的集電極,三極管的基極由單片機的P1.0口控制,用于軟件控制錄音,每當P1.0為高電平時,按照事先設(shè)定好的錄音時間和存放地址開始錄音。三極管的發(fā)射極接了一個led,用于提示錄音(錄音期間led亮,錄音結(jié)束led滅),集電極接了開關(guān),不錄音時關(guān)斷開關(guān),防止單片機影響引起誤錄音。3.2.5按鍵電路P1口通過10K的電阻接+5v電源,同時通過開關(guān)接地,開關(guān)沒按下時P1口為高電平,當按鍵按下時P1口為低電平。3.2.6蜂鳴器驅(qū)動電路由于蜂鳴器額定電流較大,所以單片機無法直接驅(qū)動,這里用npn三極管驅(qū)動,電路圖如圖,由單片機控三極管基極來控制三極管的導通與關(guān)斷。蜂鳴器兩端電壓按照1.5v計算,三極管集電極限流電阻計算公式為R=(5v-0.3v-1.5v)/50mA=64歐姆。四程序設(shè)計4.1總體思路采用定時計數(shù)器中斷T0,10ms中斷一次,秒表計時變量m[0]加1,依次往下進位。m[0]滿100,計時變量a[7]的秒變量a[0]加1,依次向下進位。延時函數(shù)主函數(shù)為一個大的while(1)循環(huán),在這個循環(huán)里先進行初始化,然后進入第二個while(1)循環(huán),在沒有按鍵按下時一直顯示當前時間變量,當有按鍵按下時,進入按鍵函數(shù),再次返回后判斷復位變量restar是否為1,為1則跳出小的while(1)循環(huán),在大循環(huán)中進行初始化然后再進入小的while(1)循環(huán)中。顯示函數(shù)分為普通顯示函數(shù)和時間預置狀態(tài)下的顯示函數(shù)。時間預置狀態(tài)下的顯示函數(shù)通過兩個形參來確定要顯示的變量以及要顯示小數(shù)點的位(用于標示可調(diào)位)。按鍵函數(shù)keyscan()分為7個子功能函數(shù),通過判斷分別進入不同的功能函數(shù)執(zhí)行。4.2程序框圖(總體)五測試方案5.1仿真測試各個按鍵功能的程序分別編寫,一個功能的程序編好后,在protues里仿真,出現(xiàn)問題回去分析修改程序直到仿真成功。然后開始接著寫下一個功能程序,按照同樣的方法測試仿真各個功能程序。5.2語音電路部分測試a)不用單片機控制,給語音芯片的地址端接低電平,從0x00開始錄音,上電,按下錄音按鍵,說一段語音,松開錄音鍵,按下播放按鍵,看喇叭是否正常播放剛才錄下的語音。b)通過錄音程序,由單片機控制,上電,錄音指示燈開始亮滅閃爍,指示燈亮時開始錄入“1”、“2”、“3”、“4”、“5”·····的語音。然后通過放音按鍵看播放是否正確。5.3數(shù)字鐘部分測試a)將程序燒進單片機,上電運行,觀察數(shù)碼管是否從00.00.00開始計時。b)按下按鍵3,看數(shù)碼管顯示是否進入時間預置狀態(tài)。各個可調(diào)位的移動是否正確,各個位的增減是否可以,進率是否正確。設(shè)置好時間,再次進入時間預置狀態(tài),看年月日十分秒星期是否正確,退出狀態(tài)是否順利。c)按下按鍵4,看數(shù)碼管顯示是否進入秒表狀態(tài),通過按鍵1(開始暫停鍵)和按鍵2(清零鍵)觀察秒表是否正確,退出狀態(tài)是否順利。d)按下按鍵5,應該進入倒計時狀態(tài),按照“b)”的方法進行倒計時初始時間設(shè)置的測試。然后再按下按鍵5,觀察倒計時狀態(tài),觀察計到零時是否停止在00.00.00,退出狀態(tài)是否順利。e)按下按鍵6,看是否進入鬧鐘時間設(shè)置狀態(tài),按照“b)”的方法進行鬧鐘時間預置測試。退出此狀態(tài),等待時間到達鬧鐘時間觀察語音芯片是否報時。f)在任意狀態(tài)下按下按鍵7觀察數(shù)碼管是否復位清零從00.00.00開始顯示。g)測試整點報時??梢韵葘r間設(shè)置在靠近整點前,然后觀察到整點時蜂鳴器、語音芯片是否都能正常報時。六測試結(jié)果與系統(tǒng)調(diào)試a)在各個按鍵功能的仿真測試上,每個功能按鍵的程序上都浪費了很長時間,出現(xiàn)了很多問題比如:進率錯誤、復位按鍵不靈、顯示不穩(wěn)定、顯示亂碼、狀態(tài)跳不出來等等。最終,數(shù)字鐘顯示功能包括時間顯示(包括年月日星期)、時間預置、秒表、倒計時、鬧鐘、蜂鳴器整點報時、復位都能較好地實現(xiàn)。b)一開始,功能正確,但數(shù)碼管顯示非常暗,幾乎看不清,一位是限流電阻太大了,改成小的還是不行,有把限流電阻短路掉,數(shù)碼管顯示仍然很暗,最后反復檢查電路后發(fā)現(xiàn)我們使用的是共陽極數(shù)碼管,而電路中總線驅(qū)動器74ls573接在了字型碼信號輸出端,將573改接到位選信號線上數(shù)碼管顯示就正常了。c)語音電路一直沒有反應,錄音之后放不出音,后來發(fā)現(xiàn)ISD1420芯片根本買有焊到電路里去,由于芯片沒有封裝,所以沒有引腳,只有28個焊點,要認為地用插針將它固定在電路板上,然后插針的兩端分別和電路板和芯片焊在一起。這個問題解決之后電路也檢查了幾遍語音功能還是沒有成功。我覺得是不是有原件壞了。八總結(jié)通過實踐,基本完成了多功能數(shù)字鐘的設(shè)計制作,它可以實現(xiàn)時間顯示(包括年月日星期)、時間預置、秒表、倒計時、鬧鐘、蜂鳴器整點報時、復位的功能,基本功能實現(xiàn)得比較充分、豐富。從最初的選題、方案選擇、查資料、電路設(shè)計、程序設(shè)計、原件參數(shù)的計算、焊接,整個過程下來,自己的基本的能力有了很大的提高。數(shù)字鐘這個選題,電路不是很復雜,主要是編程麻煩點,很多功能的實現(xiàn)都需要比較復雜的程序來實現(xiàn),程序的邏輯性比較強,所以,感覺最有收獲的應該是C語言編程得到了很好的鍛煉。為了美觀同時也鍛煉焊接技術(shù),我們在焊接時盡量少用排線多用焊錫。另外,通過一起努力,也鍛煉了我們的團隊合作能力。我們的設(shè)計也存在著一些不足:(1)語音電路沒有實現(xiàn),時間有限,檢測調(diào)試也沒有出結(jié)果。(2)焊錫的走線存在浪費的現(xiàn)象,可能原件布局不是很合理。另外,有的原件焊錯了之后有的線就成了“廢線”。(3)程序太長,一些功能應該還有更好更簡潔的算法來實現(xiàn)。這些不足也是以后應該努力的地方。九參考文獻[1].夏蘭,等.語音芯片ISD1420在軸位移監(jiān)控表中的應用[J].自動化技術(shù)與應用.2004,23(11)[2].周潤景,等.單片機電路設(shè)計分析與制作[M].北京:機械工業(yè)出版社,2021.5[3].胡漢才,單片機原理及接口技術(shù),清華大學出版社,1996十附錄A電路設(shè)計圖a)原理圖b)PCB圖B程序主程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharvoidplaysound(uchara[7]);sbitkey1=P1^0; //key1~key7為數(shù)字鐘功能按鍵sbitkey2=P1^1;sbitkey3=P1^2;sbitkey4=P1^3;sbitkey5=P1^4;sbitkey6=P1^5;sbitkey7=P1^6;sbitPLAYLE=P2^7;//語音芯片放音控制位sbitbaoshi=P1^7; //整點報時控制位ucharrestar=0,count=0;//restar:復位標志位count:中斷次數(shù)記錄變量uchara[7]={0}; //存放計時變量星期、年、月、日、時、分、秒ucharm[3]={0}; //存放秒表計時變量分鐘、秒、毫秒ucharg[3]={0};//存放鬧鐘時間變量存放時、分鐘、秒ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數(shù)碼管段碼ucharcodetable1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數(shù)點的段碼//*********************************************延時函數(shù)******************************************************//voiddelay(uintms)//延時函數(shù){uchari;while(ms--)for(i=0;i<110;i++);}//*********************************************中斷函數(shù)*****************************************************//voidTimer0(void)interrupt1{TH0=(65535-10000)/256;TL0=(65535-10000)%256;m[0]++; //每10ms中斷一次,秒表計數(shù)變量的毫秒位加1if(m[0]==100){m[0]=0; //毫秒位滿100置0,秒位加1m[1]++;a[0]++; //計時變量秒位加1baoshi=0; //整點報時蜂鳴器響1s結(jié)束PLAYLE=1; //語音控制端置高,為下一次下降沿觸發(fā)放音做準備if((a[0]==g[0]&&a[1]==g[1]&&a[2]==g[2])||(a[2]==g[2]&&g[1]==1&&g[0]==0&&a[1]==0&&a[0]==60))//若當前時間和鬧鐘預置時間相等,則://若鬧鐘預置時間為01:01:00或00:01:00,則判斷a[0]是否為60P2=0x4b; //給送語音芯片送播放地址PLAYLE=0; //開始播放“起床起床起床起床”的聲響if(m[1]==100) //秒位滿100置0,更高位加1{m[1]=0;m[2]++;if(m[2]==100)m[2]=0;}if(a[0]==60) //秒變量滿{a[0]=0;a[1]++;if(!(g[1]==1&&g[0]==0)) //如果特殊情況(鬧鐘預置時間為01:01:00或00:01:00)不滿足,if(a[1]==60) //分鐘變量滿{a[1]=0; a[2]++;baoshi=1;//若分鐘變量滿則蜂鳴器整點報時(P1.7輸出高電平),維持1秒 playsound(a);//調(diào)用放音函數(shù)進行語音整點報時if(a[2]==24){a[2]=0; a[3]++; if(a[3]==31&&(a[4]==4||a[4]==6||a[4]==9||a[4]==11)) //日變量加到31溢出(4、6、9、11月) {a[3]=0; a[4]++; } elseif(a[3]==32&&(a[4]==1||a[4]==3||a[4]==5||a[4]==7||a[4]==8||a[4]==10||a[4]==12)) //日變量加到32溢出(1、3、5、7、8、10、12月) {a[3]=0; a[4]++; } elseif(a[3]==29&&a[4]==2&&a[5]%4!=0) //日變量加到29溢出(平年的2月) {a[3]=0; a[4]++; } elseif(a[3]==30&&a[4]==2&&a[5]%4==0) //日變量加到30溢出(潤年的2月) {a[3]=0; a[4]++; } else;}}}}}//************************************顯示函數(shù)********************************************************************//voiddisp(uchara[7]){P3=0x20;P0=table[a[0]%10];delay(2);P3=0x10;P0=table[a[0]/10];delay(2);P3=0x08;P0=table1[a[1]%10];delay(2);P3=0x04;P0=table[a[1]/10];delay(2);P3=0x02;P0=table1[a[2]%10];delay(2);P3=0x01;P0=table[a[2]/10];delay(2);}//*************************************語音整點報時函數(shù)*********************************************************************//voidplaysound(uchara[7]){uchari; ucharad; if(a[2]<=10) { P2=0x41; //語音“現(xiàn)在時間”的地址, PLAYLE=0; for(i=0;i<10;i++)disp(a);//放音期間顯示時間 PLAYLE=1; ad=a[2]*5; //語音"*"的地址 P2=ad; PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; P2=0x55; //語音"點整"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; } if(a[2]>10&&a[2]<=19) { P2=0x41; //語音"現(xiàn)在時間"的地址 PLAYLE=0; for(i=0;i<10;i++)disp(a); PLAYLE=1; P2=0x32; //語音"十"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; ad=a[2]*5%10; //語音"*"的地址 P2=ad; PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; P2=0x55; //語音"點整"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; } if(a[2]==20) { P2=0x41; //語音"現(xiàn)在時間"的地址 PLAYLE=0; for(i=0;i<10;i++)disp(a); PLAYLE=1; P2=0x0a; //語音"二"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; P2=0x32; //語音"十"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; P2=0x55; //語音"點整"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; } if(a[2]>20&&a[2]<24) { P2=0x41; //語音"現(xiàn)在時間"的地址 PLAYLE=0; for(i=0;i<10;i++)disp(a); PLAYLE=1; P2=0x0a; //語音"二"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); P2=0x32; //語音"十"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; ad=a[2]*5%10; //語音"*"的地址 P2=ad; PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; P2=0x55; //語音"點整"的地址 PLAYLE=0; for(i=0;i<5;i++)disp(a); PLAYLE=1; }}//*****************************時間預置顯示函數(shù)(使用小數(shù)點區(qū)別預置位和其他位)*******************************************//voiddisp1(ucharf[7],ucharn){if(n<4) //n小于4表示,key3按下的次數(shù)小于4,數(shù)碼管顯示時分秒,預置位為時、分或秒位 { P3=0x20;//顯示秒 if(n==1) //若n等于1,表示key3只按一次,預置位為秒位 P0=table1[f[0]%10]; else P0=table[f[0]%10]; delay(2);P3=0x10; //顯示秒 if(n==1) P0=table1[f[0]/10]; else P0=table[f[0]/10]; delay(2); P3=0x08; //顯示分 if(n==2) P0=table1[f[1]%10]; else P0=table[f[1]%10]; delay(2); P3=0x04; //顯示分 if(n==2) P0=table1[f[1]/10]; else P0=table[f[1]/10]; delay(2); P3=0x02; //顯示時 if(n==3) P0=table1[f[2]%10]; else P0=table[f[2]%10]; delay(2); P3=0x01; //顯示時 if(n==3) P0=table1[f[2]/10]; else P0=table[f[2]/10]; delay(2); } if(n>3&&n<7) //表示key3按下的次數(shù)為4、5或6,數(shù)碼管顯示年月日,預置位為年、月或日位 { P3=0x20;if(n==4) P0=table1[f[3]%10]; else P0=table[f[3]%10]; delay(2); P3=0x10; if(n==4) P0=table1[f[3]/10]; else P0=table[f[3]/10]; delay(2); P3=0x08; if(n==5) P0=table1[f[4]%10]; else P0=table[f[4]%10]; delay(2); P3=0x04; if(n==5) P0=table1[f[4]/10]; else P0=table[f[4]/10]; delay(4); P3=0x02; if(n==6) P0=table1[f[5]%10]; else P0=table[f[5]%10]; delay(2); P3=0x01; if(n==6) P0=table1[f[5]/10]; else P0=table[f[5]/10]; delay(2); } if(n>6) //顯示星期,預置位為星期位 { P3=0x20; P0=table1[f[6]%10]; delay(2); }}//*****************************************按鍵函數(shù)*************************************************************************// voidkeyscan(){ ucharnum=1; //num表示要預置的計時變量的序號,按一下,預置位移動一位 uchart=1; //t用在倒計時設(shè)置初始時間中,功能類似num ucharb[3]={0} ;//用于存放秒表正在運行時的時間變量(調(diào)用秒表顯示函數(shù)的實參) ucharc[3]={0}; //用于存放秒表開始時刻的m[]值 uchard[3]={0}; //用于存放上一次暫停時的b[]值 uchare[3]={0}; uchari=0,j=0; //*******************時間預置程序********************//if(key3==0) //key3:進入時間預置狀態(tài) {delay(10); if(key3==0) {EA=0; while(!key3)disp1(a,num); while(num<8) { while(key1&&key2&&key3&&key7) disp1(a,num); if(key3==0) //調(diào)整預置變量序號 { delay(10); if(key3==0) num++; } while(!key3)disp1(a,num); if(key2==0) { delay(10); if(key2==0) if(a[num-1]==0) switch(num) { case1:a[num-1]=60;break; //若秒變量減到零,則置60 case2:a[num-1]=60;break; //若秒變量減到零,則置60 case3:a[num-1]=24;break; //若小時變量減到零,則置24 case4:a[num-1]=31;break; //若日變量減到零,則置31 case5:a[num-1]=13;break; //若月變量減到零,則置13 case6:a[num-1]=100;break; //若年變量減到零,則置100(只顯示年份的后兩個數(shù)字) case7:a[num-1]=8;break; //若星期變量減去到零,則置7 } a[num-1]--; //放在后面,防止計時變量一開始就0溢出 } while(!key2)disp1(a,num); if(key1==0) { delay(10); if(key1==0) a[num-1]++; switch(a[num-1]) //判斷計時變量有沒有達到溢出值 { case13:if(num==5)a[num-1]=1;break; case24:if(num==3)a[num-1]=0;break; case31:if(num==4)a[num-1]=1;break; case60:if(num==1||num==2)a[num-1]=0;break; case100:if(num==6)a[num-1]=0;break; case8:if(num==7)a[num-1]=1;break; } } while(!key1)disp1(a,num); if(key7==0) //整機復位檢測 {delay(5); if(key7==0) {restar=1;break;} } } } EA=1; while(!key7)disp(a);//復位鍵松手檢測 } //******************秒表程序******************//if(key4==0) //進入秒表狀態(tài){delay(5); if(key4==0) {while(!key4)disp(b);while(1) {if(key4==0) //若key4按下,退出抄表狀態(tài) {delay(5); if(key4==0) while(!key4)disp(b);break; } if(key2==0) //若key2復位鍵按下,顯示000000 {delay(5); if(key2==0) {for(j=0;j<3;j++) {b[j]=0; d[j]=0; } while(!key2)disp(b); while(key1&&key4&&key7)disp(b); } } while(key2&&key4&&key7)//若key2、key4、key7鍵沒按下,則執(zhí)行下面程序 { if(key1==0) //若秒表啟停位key1按下 { delay(5); if(key1==0) { //狀態(tài)變量i加1 i++; if(i%2==1) //若i為奇,啟動秒表 { for(j=0;j<3;j++) c[j]=m[j]; while(!key1) { for(j=0;j<3;j++) b[j]=m[j]-c[j]+d[j];disp(b); } while(key2&&key4&&key1) //若無按鍵按下,顯示 { for(j=0;j<3;j++) b[j]=m[j]-c[j]+d[j]; disp(b); } } else //否則,暫停秒表 { while(!key1)disp(b); while(key2&&key4&&key1&&key7)disp(b); for(j=0;j<3;j++) d[j]=b[j]; //記錄暫停時b[]的值 } } } disp(b); } if(key7==0) //整機復位檢測 {delay(5); if(key7==0) break; }disp(b); } } } //***************倒計時程序******************// if(key5==0) //進入倒計時狀態(tài) {delay(5); if(key5==0) { while(!key5)disp1(e,t); while(t<5) //若按滿5次退出秒表 { while(key1&&key2&&key5&&key7) disp1(e,t); if(key1==0) //如果key1按下,初始值加1 {delay(5); if(key1==0) { e[t-1]++; //相應的倒計初始值變量加1 if(e[t-1]==60&&(t==1||t==2)) //加到60,置0,進1 e[t-1]=0; if(e[t-1]==24&&t==3) //加到24,置0,進1 e[t-1]=0; while(!key1)disp1(e,t); while(key1&&key2&&key5&&key7)disp1(e,t); //若無按鍵按下,顯示當前值 } } if(key2==0) //如果key2按下,初始值減1 {delay(5); if(key2==0) { if(e[t-1]==0&&(t==1||t==2)) e[t-1]=60; if(e[t-1]==0&&t==3) e[t-1]=24; e[t-1]--; while(!key2)disp1(e,t); while(key1&&key2&&key5&&key7)disp1(e,t); } } if(key5==0) //如果key5按下 {delay(5); if(key5==0) {t++; //記錄按下次數(shù)變量加1 if(t==1||t==2||t==3) //按下次數(shù)為1、2或3,處于初始值預置狀態(tài) { while(!key5)disp1(e,t); while(key1&&key2&&key5&&key7)disp1(e,t); } if(t==4) //如果key5按下4次,則進入倒計時程序 { if(e[0]==0&&e[1]==0&&e[2]==0)//若倒計時變量為0就進入倒計時狀態(tài),則 while(key1&&key2&&key5&&key7)//一直顯示000000 disp(e); for(j=0;j<3;j++) {c[j]=a[j]; //c記錄此刻計時變量 d[j]=e[j]; //d記錄倒計時初始值 } while(!key5) {for(j=0;j<3;j++) {e[j]=d[j]-a[j]+c[j]; //做減法運算 disp(e); }} while(key5&&key7) {for(j=0;j<3;j++) e[j]=d[j]-a[j]+c[j]; if(e[0]==0&&(e[1]!=0||e[2]==0)) //減到60時向高位借位 {e[0]=59; e[1]--; } if(e[0]==0&&(e[1]==0||e[2]!=0)) { e[0]=59; e[1]=59; e[2]--; } if(e[0]==0&&(e[1]!=0||e[2]!=0)) {e[0]=59; e[1]--; if(e[1]==0) e[2]--; } if(e[0]==0&&e[1]==0&&e[2]==0) //若倒計時時間減到0,則一直顯示000000 while(key5&&key7)disp(e); disp(e); } while(!key5)disp(e); //key5按下了5次,跳出程序前松手檢測 t++; //,t加1,使循環(huán)條件不滿足,跳出倒計時函數(shù) } } } if(key7==0) //整機復位檢測 {delay(5); if(key7==0) {t=5;} } } } } //*********************鬧鐘程序**************************// if(key6==0) //key6:進入鬧鐘時間預置狀態(tài) {delay(5); if(key6==0) { while(!key6)disp1(g,num); while(num<4) { while(key1&&key2&&key6&&key7) disp1(g,num); if(key6==0) //調(diào)整預置變量序號 { delay(5); if(key6==0) num++; } while(!key6)disp1(g,num-1); if(key2==0) { delay(10); if(key2==0) if(g[num-1]==0) switch(num) { case1:g[num-1]=60;break; //若秒變量減到零,則置60 case2:g[num-1]=60;break; //若秒變量減到零,則置60 case3:g[num-1]=24;break; //若小時變量減到零,則置24 } g[num-1]--; //放在后面,防止計時變量一開始就0溢出 } while(!key2)disp1(g,num); if(key1==0) { delay(5); if(key1==0) g[num-1]++; switch(g[num-1]) //判斷計時變量有沒有達到溢出值 { case25:if(num==3)g[num-1]=0;break; case61:if(num==1||num==2)g[num-1]=0;break; } } while(!key1)disp1(g,num); if(key7==0) { delay(5); if(key7==0) { restar=0;num=4; } } } } }//****************復位程序********************// if(key7==0)//key7:復位 { delay(10); if(key7==0) restar=1;}}//***************************************主函數(shù)******************************************************************************//voidmain() //主函數(shù){while(1){a[0]=0; //初始化a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=0;a[6]=0;TH0=(65535-50000)/256;TL0=(65535-50000)%256;TMOD=0x01;TR0=1;EA=1;ET0=1;restar=0;while(1){while(!key7)disp(a);while(key3&&key4&&key5&&key6&&key7)disp(a); //若無按鍵按下,一直顯示當前值keyscan(); //有按鍵按下,進入鍵盤函數(shù)if(restar==1) //判斷復位標志位break;}}}錄音程序:#include<reg52.h>sbita=P3^7;voiddelay(){ unsignedchari,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}voidmain(){ a=0;P2=0x00; //錄音“0”,放入0x00開始的5個存儲單元a=1; //開始錄音delay(); //延時0.5sa=0; //結(jié)束錄音delay(); //延時2s,為下一次錄音做準備P2=0x05;//錄音"1",放入0x05開始的5個存儲單元a=1;delay();a=0;delay();P2=0x0A;//錄音"2",放入0x0a開始的5個存儲單元a=1;delay();a=0;delay();P2=0x0F;//錄音"3",放入0x0f開始的5個存儲單元a=1;delay();a=0;delay();P2=0x14;//錄音"4",放入0x14開始的5個存儲單元a=1;delay();a=0;delay();P2=0x19;//錄音"5",放入0x19開始的5個存儲單元a=1;delay();a=0;delay();P2=0x1E;//錄音"6",放入0x1e開始的5個存儲單元a=1;delay();a=0;delay();P2=0x23;//錄音"7",放入0x23開始的5個存儲單元a=1;delay();a=0;delay();P2=0x28;//錄音"8",放入0x28開始的5個存儲單元a=1;delay();a=0;delay();P2=0x2D;//錄音"9",放入0x2d開始的5個存儲單元a=1;delay();a=0;delay();P2=0x32;//錄音"10",放入0x32開始的5個存儲單元a=1;delay();a=0;delay();P2=0x37;//錄音"點整",放入0x37開始的5個存儲單元a=1;delay();a=0;delay();P2=0x3C;//錄音"1",放入0x05開始的5個存儲單元a=1;delay();a=0;delay();P2=0x41;//錄音“現(xiàn)在時間”,放入0x41開始的5個存儲單元a=1;delay();//延時1sdelay();a=0;delay();P2=0x4B;//錄音“起床起床起床起床”a=1;delay();//一共延時2sdelay();delay();delay(); delay(); delay();a=0;delay();}C相關(guān)作品圖片見文件夾“多功能數(shù)字電子表+說明書+王功臣+電氣10-7班”。目錄摘要21引言32設(shè)計方案與要求32.1功能要求32.2系統(tǒng)基本方案選擇和論證3單片機芯片的選擇和論證……………………3顯示模塊的選擇和論證………4時鐘芯片的選擇和論證………42.3電路設(shè)計最終方案決定42.4各硬件基本原理及介紹4單片機原理及介紹…………………4數(shù)碼管顯示原理及介紹…………………5原理及介紹…………..53硬件設(shè)計部分63.1電路設(shè)計框圖63.2系統(tǒng)硬件概述63.3主要單元電路的設(shè)計6單片機主控制模塊的設(shè)計……………………6時鐘電路DS1302的設(shè)計…………………….7顯示模塊的設(shè)計………………9鎖存器模塊的設(shè)計…………..104軟件設(shè)計部分104.1軟件設(shè)計概述104.2KeilC51和Proteus介紹114.2.1KeilC51的介紹……………...11的介紹……………….114.3整體設(shè)計115結(jié)束語14基于DS1302與數(shù)碼管設(shè)計的電子表摘要單片機應用技術(shù)飛速發(fā)展,縱觀我們現(xiàn)在生活的各個領(lǐng)域,從導彈的導航裝置,到飛機上各種儀表的控制,從計算機的網(wǎng)絡通訊與數(shù)據(jù)傳輸,到工業(yè)自動化過程的實時控制和數(shù)據(jù)處理,以及我們生活中廣泛使用的各種智能IC卡、電子產(chǎn)品等,這些都離不開單片機。單片機是將CPU、RAM、ROM、定時器、計數(shù)器和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產(chǎn)業(yè)和工業(yè)自動化上,而51系列單片機是各單片機中最為典型和最有代表性的一種。本文通過對一個基于DS1302與數(shù)碼管的電子表的設(shè)計,從而達到學習、了解單片機相關(guān)指令在各方面的應用。系統(tǒng)由主控制器AT89C51、實時鐘電路DS1302、顯示電路組成,能實現(xiàn)時鐘顯示的功能,能進行時、分、秒的顯示。關(guān)鍵詞:單片機;DS1302;數(shù)碼管;電子表引言隨著微電子技術(shù)的高速發(fā)展,隨著人們生活水平的提高和生活節(jié)奏的加快,對時間的要求越來越高,精準數(shù)字計時的消費需求也是越來越多。單片機以體積小、功能全、性價比高等諸多優(yōu)點,在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測控領(lǐng)域的應用中獨占鰲頭,單片機開發(fā)技術(shù)已成為電子信息、電氣、通信、自動化、機電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。而電子表作為電子類小設(shè)計,是單片機實驗中一個很常用的題目。因為它有很好的開放性和可發(fā)揮性,不僅考察了對單片機的掌握能力更加強了對單片機擴展的應用。而且在操作的設(shè)計上要力求簡潔,功能上盡量齊全,顯示界面也要出色。電子表已經(jīng)越來越流行,特別是適合在家庭居室、辦公室、大廳、會議室、車站和廣場等使用,壁掛式LED數(shù)碼管顯示的萬年歷逐漸受到人們的歡迎。采用軟件和硬件結(jié)合的方法,控制LED數(shù)碼管輸出,分別用來顯示年、月、日、時、分、秒,其最大特點是:硬件電路簡單,安裝方便易于實現(xiàn),軟件設(shè)計獨特可靠。在軟件設(shè)計過程中,應對硬件部分有相關(guān)的了解,這樣有助于對設(shè)計更深刻的了解,有助于軟件設(shè)計。設(shè)計方案與要求功能要求本電子表的功能:能動態(tài)顯示小時、分鐘、秒系統(tǒng)基本方案選擇和論證單片機芯片的選擇和論證方案一:采用AT89S52芯片作為硬件核心,采用FlashROM,內(nèi)部具有4KBROM存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,但是運用于電路設(shè)計中時由于不具備ISP在線編程技術(shù),當在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次拔插會對芯片造成一定的損壞。方案二:采用AT89C51,片內(nèi)ROM全都采用FlashROM;能以3V的超底壓工作;同時也與MCS-51系列單片機完全該芯片內(nèi)部存儲器為8KBROM存儲空間,同樣具有89S52的功能,且具有在線編程可擦除技術(shù),當在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,不需要對芯片多次拔插,所以不會對芯片造成損壞。結(jié)論:采用AT89C51作為主控制系統(tǒng).顯示模塊的選擇和論證方案一:采用LED液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字、圖形。但是價格昂貴,需要的接口線多,所以在此設(shè)計中不采用LED液晶顯示屏。方案二:采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格適中,對于顯示數(shù)字最合適,而且采用動態(tài)掃描法與單片機連接時,占用的單片機口線少。結(jié)論:采用LED數(shù)碼管作為顯示。時鐘芯片的選擇和論證方案一:直接采用單片機定時計數(shù)器提供脈沖信號,使用程序?qū)崿F(xiàn)年、月、日、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。方案二:采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、月、年進行計數(shù),而且精度高。結(jié)論:采用DS1302作為時鐘芯片。電路設(shè)計最終方案決定綜上各方案所述,對此次作品的方案選定:采用AT89C51作為主控制系統(tǒng)、DS1302提供時鐘、LED數(shù)碼管動態(tài)掃描作為顯示。各硬件基本原理及介紹AT89C51單片機原理及介紹單片機是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把CPU、隨機存儲器RAM、ROM、多種I/O接口和中斷系統(tǒng)、定時器/計數(shù)器、A/D轉(zhuǎn)換器等功能集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應用。AT89C51單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3,MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨立地作輸出或輸入。AT89C51引腳如圖所示LED數(shù)碼管顯示原理及介紹LED顯示是絕大多數(shù)單片機應用系統(tǒng)必備的部件之一,發(fā)光二極管組成的LED顯示是單片機應用產(chǎn)品中最常用的廉價輸出設(shè)備。它由若干個發(fā)光二極管按一定的規(guī)律排列而成。當某一個發(fā)光二極管導通時,相應的一個點或一筆畫被點亮,控制不同組合的二極管導通,就能顯出各種字符。發(fā)光二極管的陽極連在一起的稱為共陽極顯示器,陰極連在一起的成為共陰顯示器。1位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管a~g控制7個筆畫的亮或暗,另一個控制一個小數(shù)點的亮和暗。引腳如圖所示DS1302原理及介紹DS1302是美國DALLAS公司推出的一種高性能、低功耗的電子表芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU一進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。電子表可提供秒、分、時,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.5V~5.5V。采用雙電源供電(主電源和備用電源)。DS1302用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄上,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄,因此廣泛應用于測量系統(tǒng)中。引腳如圖所示硬件設(shè)計部分主控制器AT89C51電路設(shè)計框圖主控制器AT89C51顯示電路LED數(shù)碼管時鐘電路DS1302顯示電路LED數(shù)碼管時鐘電路DS1302系統(tǒng)硬件概述本設(shè)計是由AT89C51單片機為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作。時鐘電路由DS1302提供,采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。具有使用壽命長,精度高和低功耗等特點,同時具有掉電自動保存功能,本電路采用DS1302單字節(jié)傳送方式實現(xiàn)與主控機之間數(shù)據(jù)的傳送。顯示部分由LED數(shù)碼管動態(tài)掃描來顯示。主要單元電路的設(shè)計單片機主控制模塊的設(shè)計單片機的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端為輸入端,XTAL2接外部晶振和微調(diào)電容的另一端為輸出端。第9引腳為復位輸入端,接上電容,電阻及開關(guān)后構(gòu)成復位電路。主控制系統(tǒng)1.內(nèi)部結(jié)構(gòu)按功能分為8部分:CUP,程序存儲器,數(shù)據(jù)存儲器,時鐘電路,串行口,并行I/O口,中斷系統(tǒng),定時/計數(shù)器。2.引腳定義及功能Vcc:接+5V電源Vss:接地XTAL1和XTAL2:時鐘引腳,外接晶體引線端。RST/Vpq:RST是復位信號輸入端,Vpd是備用電源輸入端。I/O口引腳:P0.0~P0.7:P0口8位雙向I/O口;P1.0~P1.7:P1口8位準雙向I/O口;P2.0~P2.7:P2口8位準雙向I/O口;P3.0~P3.7:P3口8位準雙向I/O口。時鐘電路DS1302的設(shè)計引腳功能及結(jié)構(gòu)DS1302的電路圖如下,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),SCLK始終是輸入端。DS1302與單片機的連接也僅需要3條線:CE引腳、SCLK串行時鐘引腳、I/O串行數(shù)據(jù)引腳。DS1302電路圖2.讀寫時序說明DS1302是SPI總線驅(qū)動方式。它不僅要向寄存器寫入控制字,還需要讀取相應寄存器的數(shù)據(jù)。DS1302的控制字如圖:DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖??刂谱值淖罡哂行?位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6:如果為0則表示存取時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù)位5至位1(A4-A0):指示操作單元的地址位0(最低有效位):如為0,表示要進行寫操作,為1表示進行讀操作“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當該位為0時,時鐘開始運行?!癢P”是寫保護位,在任何的對時鐘和RAM的寫操作之前,“WP”必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的,在控制字指令輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時序如圖:顯示模塊的設(shè)計LED數(shù)碼管(LEDSegmentDisplays)是由8個發(fā)光二極管構(gòu)成。按照一定的圖形及排列封轉(zhuǎn)在一起的顯示器件。其中7個LED構(gòu)成7筆字形,1個LED構(gòu)成小數(shù)點(固有時成為八段數(shù)碼管)LED數(shù)碼管有兩大類,一類是共陰極接法,另一類是共陽極接法,共陰極就是7段的顯示字碼共用一個電源的負極,是高電平點亮,共陽極就是7段的顯示字碼共用一個電源的正極,是低電平點亮。只要控制其中各段LED的亮滅即可顯示相應的數(shù)字、字母或符號。數(shù)碼管驅(qū)動可分為靜態(tài)和動態(tài)兩種。靜態(tài)驅(qū)動也稱直流驅(qū)動,靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O口進行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O口多。動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共端為位選端,位選端由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但由于位選端不同所以我們只要將需要顯示的數(shù)碼管的位選端打開,該位就顯示出字形,沒有打開的數(shù)碼管就不會亮。通過輪流控制各個LED數(shù)碼管位選端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺效應,盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,人看到的是一組穩(wěn)定的顯示信息,不會有閃爍感,動態(tài)顯示能夠節(jié)省大量的I/O口,而且功耗更低。共陽極LED數(shù)碼管的內(nèi)部結(jié)構(gòu)原理圖
共陰極LED數(shù)碼管的內(nèi)部結(jié)構(gòu)原理圖
鎖存器模塊的設(shè)計74HC573是一種CMOS器件,器件的輸入是和標準CMOS輸出兼容的,加上拉電阻,他們能和LS/ALSTTL輸出兼容。當鎖存使能端LE為高時,這些器件的鎖存對于數(shù)據(jù)是透明的。當鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。軟件設(shè)計部分軟件設(shè)計概述單片機作為嵌入式系統(tǒng)的核心器件,其應用系統(tǒng)設(shè)計包括硬件電路設(shè)計和軟件電路設(shè)計兩個方面,學習和應用過程中必須軟硬結(jié)合。單片機系統(tǒng)調(diào)試通常分為軟件調(diào)試、硬件調(diào)試和整體調(diào)試三個部分。單片機自身不具備開發(fā)功能,必須借助于開發(fā)工具。目前,國內(nèi)外推出了許多基于個人計算機的單片機軟或硬開發(fā)平臺。硬件開發(fā)平臺方面諸如開發(fā)板、實驗箱、仿真器、編程器、示波器等,但因其價格不低,開發(fā)過程繁瑣。因此在軟件支持的前提下,應用最普遍的是軟件仿真開發(fā)平臺。單片機應用系統(tǒng)軟件仿真開發(fā)平臺有兩個常用的工具軟件:Keil和Proteus主要用于單片機源程序的編輯、編譯、鏈接以及調(diào)試。。KeilC51和Proteus介紹KeilC51的介紹KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。Keil提供了包括C編輯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境將這些部分組合在一起。Proteus的介紹Proteus是英國Labcenter公司開發(fā)的電路分析與實物仿真軟件,可以仿真、分析各種模擬器件和集成電路,該軟件的特點是:現(xiàn)了單片機仿真和電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能,有各種虛擬儀器,如示波器、信號發(fā)生器等,提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點等調(diào)試功能,同時可以觀察各個變量、寄存器等的當前狀態(tài)。整體設(shè)計整體實現(xiàn)過程:由串行的時鐘芯片DS1302將時鐘信號送給單片機,單片機處理后輸出。而74HC573將串行信號變成并行信號,每個74HC573對應LED八段碼,二個74HC573對應二組LED數(shù)碼管。單片機P0.7-P0.0和P2.7-P2.0分別連接兩個數(shù)碼管組和74HC573鎖存器驅(qū)動數(shù)碼管被點亮。其整個過程如下圖:主要程序如下:#include"reg52.h"#include"8LED.h"#include"DS1302.h"#include"TIMER.h"#include"DISPLAY.h"#include"KEY.h"#include"EX_INT.h"staticvoidSystemClockDeal(void);voidmain(){ TimerInit(); EX_INT_Init(); //DS1302_Initime(16,12,19,1,12,12,12); //年月日周時分秒 SetPara.Ensure=false; SetPara.SetFlag=false; while(1) { SystemClockDeal(); //系統(tǒng)進程節(jié)拍調(diào)度 }}staticvoidSystemClockDeal(void){ switch(SystemClockStaus) { caseWAIT: break; caseGET_TIME: { if(SetPara.SetFlag==false) { DS1302_ReadTime(); } TimeToDisbuf(); //把時間按次序存到顯示緩沖區(qū) LED8_Code_Match(DisText); //把需要顯示的數(shù)組轉(zhuǎn)換成數(shù)碼管碼表 if(SetPara.Ensure==true) { SetPara.Ensure=false; SetPara.SetFlag=false; DS1302_Initime(16,12,19,1,SetPara.Hour,SetPara.Minute,0);//年月日周時分秒 } //此處不加break,因為當在GET_TIME狀態(tài)下,也滿足LED_SCAN狀態(tài)。 } caseLED_SCAN: { LED8_Display(); //數(shù)碼管動態(tài)掃描 SystemClockStaus=WAIT; break; } default: break; }}結(jié)束語2021年12月我開始了我的課程設(shè)計工作,時至今日,論文基本完成。從最初的茫然,到慢慢的進入狀態(tài),再到對思路逐漸的清晰,整個設(shè)計過程難以用語言來表達。歷經(jīng)了一個月的奮戰(zhàn),緊張而又充實的畢業(yè)設(shè)計終于落下了帷幕?;叵脒@段日子的經(jīng)歷和感受,我感慨萬千,在這次畢業(yè)設(shè)計的過程中,我擁有了無數(shù)難忘的回憶和收獲。當我終于完成了所有打字、繪圖、排版、校對的任務后整個人都很累,但同時看著電腦熒屏上的畢業(yè)設(shè)計稿件我的心里是甜的,我覺得這一切都值了。在我徜徉書海查找資料的日子里,面對無數(shù)書本的羅列,最難忘的是每次找到資料時的激動和興奮;親手用Proteus設(shè)計電路圖的時間里,記憶最深的是每一步小小思路實現(xiàn)時那幸福的心情;我從資料的收集中,掌握了很多單片機及其接口應用的知識,讓我對我所學過的知識有所鞏固和提高,并且讓我對當今單片機的最新發(fā)展技術(shù)有所了解。在整個過程中,我學到了新知識,增長了見識。在今后的日子里,我仍然要不斷地充實自己,爭取在所學領(lǐng)域有所作為。畢業(yè)論文的寫作過程是我的一次再學習,再提高的過程。在論文中我充分地運用了大學期間所學到的知識。腳踏實地,認真嚴謹,實事求是的學習態(tài)度,不怕困難、堅持不懈、吃苦耐勞的精神是我在這次設(shè)計中最大的收益。參考文獻[1]王靜霞.《單片機應用技術(shù)》,電子工業(yè)出版社,2021.[2]張毅剛,彭喜元,姜守達,喬立言.《新編MCS-51單片機應用設(shè)計》哈爾濱工業(yè)大學出版社,2021[3]馬忠梅.《單片機的C語言應用設(shè)計》北京航空航天大學出版社2021[4]張道德.《單片機接口技術(shù)》,中國水利水電出版社2007[5]石生.《電路基本分析》,高等教育出版社2021[6]譚浩強.《C語言程序設(shè)計》(第2版),清華大學出版社.[7]劉國巍,周曉萍,周莉《數(shù)字電子技術(shù)基礎(chǔ)》,國防科技大學出版社2021[8]劉守義,《單片機應用技術(shù)》(第2版)西安電子科技大學出版社,2007[9]先鋒工作室《單片機程序設(shè)計實例》北京:清華大學出版社,2003[10]李群芳,《單片機微型計算機與接口技術(shù)》(第2版)北京:電子工業(yè)出版“美洲獅感恩十年”年會總結(jié)報告宋林山2011年美洲獅感恩十年年會已經(jīng)落下帷幕,年會的成功舉辦勢必對公司后期的發(fā)展產(chǎn)生眾多積極的影響,為了準確的把握和預見年會對我們帶來的積極效應并采取針對性措施使到這些效應擴大化以及總結(jié)年會中準備不足或者忽略的教訓,現(xiàn)對年會工作進行總結(jié),方便以后工作開展,提高工作效率。本篇總結(jié)報告將從以下四個方面綱目內(nèi)容進行分析和總結(jié):1:會議前期準備2:會議現(xiàn)場流程3:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代家具設(shè)計人才的培養(yǎng)與教育模式探討
- 酒店照明設(shè)計對顧客用餐心情的影響
- 家庭辦公環(huán)境的衛(wèi)生與健康改善措施
- 臨時勞動合同續(xù)簽協(xié)議
- 臨時工程合作合同范例
- 臨時工雇傭合同協(xié)議
- 中央空調(diào)系統(tǒng)維修保養(yǎng)合同
- 上海商業(yè)地產(chǎn)營銷代理合同
- 交通運輸設(shè)備合作協(xié)議
- 上市公司債券發(fā)行專項法律服務合同
- 社會主義發(fā)展史(齊魯師范學院)知到智慧樹章節(jié)答案
- 2023年高考真題-地理(遼寧卷) 含解析
- 課程思政融入高職院校應用文寫作課程教學路徑探析
- 2024全新鋼結(jié)構(gòu)安全培訓
- 2025屆高三數(shù)學一輪復習-分段函數(shù)專項訓練【含答案】
- 腰椎間盤突出癥課件(共100張課件)
- 《工程力學》課程教學大綱
- 2024至2030年中國女裝行業(yè)市場發(fā)展監(jiān)測及投資前景展望報告
- 7.1.2 直觀圖的畫法-【中職專用】高一數(shù)學教材配套課件(高教版2021·基礎(chǔ)模塊下冊)
- 皮膚癬菌病的分子診斷工具
- SL+575-2012水利水電工程水土保持技術(shù)規(guī)范
評論
0/150
提交評論