這是我上個月做的單片機秒表課程設計,這個課程設計是實現(xiàn)00到99秒的一個秒表,
并且有開始和復位功能,
用了一個星期的時間,
附件里面包含秒表的單片機源程序,proteus仿真電路圖和課設文檔,
都是自己做的,請大家多多指教。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20181217214005.png (24.46 KB, 下載次數(shù): 125)
下載附件
仿真圖
2018-12-17 21:45 上傳
秒表的設計與仿真
一、設計要求 設計一個2位的LED數(shù)碼顯示的“秒表”:顯示時間為00—99秒,每秒自動加1,另設計一個“開始”鍵和一個“復位”鍵。 二、方案論證 方案一: 用數(shù)字電路來實現(xiàn)秒表的設計。由NE555定時器組成的多諧振蕩器通過開關控制,把脈沖送到計數(shù)器,通過計數(shù)器計數(shù),在送入譯碼器進行譯碼,最后送入數(shù)碼管進行顯示?驁D如下:
(見附件)
優(yōu)點:用到了之前學習的數(shù)電的相關知識,用NE555等一系列芯片就可以實現(xiàn)秒表的數(shù)字電路,顯示直觀,讀取方便,精度高,不需要軟件編程。 缺點:使用的硬件非常多,使用的空間非常大,電路十分復雜,從經(jīng)濟上也不是很劃算。 方案二: 用單片機控制秒表來實現(xiàn),采用AT89C51單片機為中心器件,利用其定時器/計數(shù)器定時和記數(shù)的原理,結合硬件電路如電源電路,晶振電路,復位電路,顯示電路,以及一些按鍵電路等來設計計時器,將軟件和硬件結合起來。其中軟件部分采用的是C語言編寫程序,包含了顯示程序,中斷,延時程序等等,硬件用的Proteus軟件來連接的秒表電路,主要使用了AT80C51芯片,晶振,電容等基本器件。框圖如下:(見附件)
優(yōu)點:利用了單片機的定時功能,只需要少量的連線再加上軟件編程控制,就可以實現(xiàn)秒表的設計電路,節(jié)省了花費,提高了技術的精度,更加容易修改。 缺點:除了連接硬件電路,增加了軟件的編程,需要額外掌握軟件的編程技術,還要考慮到硬件的連接來進行編程。 通過上面兩種方案的比較,可以發(fā)現(xiàn)單片機使用的硬件更加少,計時的精度也很高,節(jié)省了很大的空間,修改時只需要修改部分程序和部分接線就可以改變計數(shù)方式和技術范圍,所以這次的秒表的設計應該選擇單片機設計的方案二。 三、理論設計 硬件部分 1.按鍵電路: 1.1 當按下K1鍵時給P1.6接口一個低電平,單片機工作,數(shù)碼管開始顯示,進行開始功能。 1.2 當按下K2鍵時給P1.7接口一個低電平,單片機工作,數(shù)碼管清零,進行復位功能。 2.復位電路: 2.1按鍵按下給單片機的RST接口一個高電平,讓單片機系統(tǒng)復位。 3.晶振電路: 3.1晶振電路為單片機合格的時鐘信號流,給整個電路的時序提供一個基本時鐘,這里晶振頻率為11.0592MHz。
4.顯示電路: 4.1采用兩個共陽LED數(shù)碼管,通過單片機的P0接口和P3接口來驅動顯示出秒數(shù)的個位和十位。 軟件部分 (見附件)
四、電路仿真及仿真結果分析 仿真結果:將Keil生成的。hex文件添加到AT80C51中后,運行仿真電路如圖所示,會顯示出00到99s的秒表功能,系統(tǒng)可以正常工作。 五、心得體會 通過這次課程設計,認識到自己有很多不足之處,需要根據(jù)課程的設計要求找到合適的方案,設計好程序流程圖,以此來寫出相應的程序,還地添加一些額外程序來試系統(tǒng)變得更加穩(wěn)定,程序應該由各種子程序組成,并加上注釋,這樣程序出錯時或者仿真運行顯示不出正確的結果時,可以更加方便的找到出錯的地方。這次的秒表設計,仿真硬件電路不是很麻煩,主要都是需要寫出適合的正確的程序來進行驅動,通過這次的課程設計,更加系統(tǒng)的鍛煉了自己。
單片機源程序:
- #include<reg51.h>
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- /*七段共陰管顯示定義*/
- uint8 code dispcode[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- /*定義并初始化變量*/
- uint8 seconde=0;// second 調整定義
- uint16 mstcnt=0;//minite調整定義
- sbit key1=P1^6; //定義P1.6端口為按鍵1
- sbit key2=P1^7;//定義p1.7端口為按鍵2
- /*函數(shù)聲明*/
- void delay(uint8 k ); //延時子程序
- void time_pro( ); //時間處理子程序
- void display( ); //顯示子程序
- void keyscan( ); //鍵盤掃描子程序
- /*延時子程序*/
- void delay (uint8 k)
- {
- uint8 j;
- while((k--)!=0)
- {
- for(j=0;j<125;j++)
- {;}
- }
- }
- /*時間處理子程序*/
- void time_pro(void)
- {
- if(seconde==99)//秒鐘設為99進制
- {
- seconde=0;
- }
- }
- /* 顯示子程序*/
- void display(void)
- {
- P0=dispcode[seconde/10]; //顯示秒的十位
- delay(4);
- P3=dispcode[seconde%10]; //顯示秒的個位
- delay(4);
- }
- /*鍵盤掃描子程序*/
- void keyscan (void)
- {
- if(key1==0) //按鍵1為開始鍵
- {
- delay(60);
- if(key1==0)
- EA=1;
- delay(60);
- seconde++;
- }
- if(seconde==99)
- {seconde=0;
- }
- if(key2==0) //按鍵2為復位鍵
- {
- delay(60);
- if(key2==0)
- {
- delay(60);
- seconde=0;
- delay(60);
- EA=0;
- }
- }
- }
- /*1s定時子程序 */
- void timer0(void) interrupt 1 using 0
- {
- TH0=0xff;
- TL0=0x19;
- TMOD = 0x01;//定時器0方式1,250us中斷一次
- mstcnt++;
- if(mstcnt==4000)
- {
- seconde++;
- mstcnt=0; //對計數(shù)單元的清零
- }
- }
- /*主函數(shù)*/
- void main(void)
- {
- P0=0xff; //初始化p0口,全設為1使數(shù)碼管
- TMOD = 0x01; //time0為定時器,方式1
- TH0=0xff; //預置計數(shù)初值
- TL0=0x19;
- EA=0;
- ET0=1;
- TR0=1;
- while (1)
- {
- keyscan( ); //按鍵掃描
- time_pro( ); //時間處理
- display( ); //顯示時間
- }
- }
復制代碼
QQ截圖20181217213732.png (104.26 KB, 下載次數(shù): 101)
下載附件
keil文件
2018-12-17 21:45 上傳
QQ截圖20181217213741.png (83.01 KB, 下載次數(shù): 104)
下載附件
仿真
2018-12-17 21:45 上傳
全部資料51hei下載地址:
秒表的設計.zip
(97.61 KB, 下載次數(shù): 253)
2018-12-17 21:44 上傳
點擊文件名下載附件
這個是課設全部資料的壓縮包 下載積分: 黑幣 -5
|