《單片機課程設計報告 零件計數(shù)器 電信論文》由會員分享,可在線閱讀,更多相關《單片機課程設計報告 零件計數(shù)器 電信論文(17頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
河海大學物聯(lián)網(wǎng)工程學院
課程設計報告
題 目 零件計數(shù)器
專業(yè)、學號 電信、
授課班號 275503
學生姓名
指導教師 金紀東
完成時間 2012/12/25
摘要
本次單片機課程設計我組選擇的題目是零件計數(shù)器,零件計數(shù)器本身在生產(chǎn)實踐中具有很實際的用途,選擇這個項目可以繞
2、過我們更好的把課堂上學到的課本知識和理論內(nèi)容與生產(chǎn)實踐結(jié)合起來,提高對實際問題的動手操作能力以及解決問題的能力,進一步加深學生對于實際的電子元件電路功能的理解與運用,對于設計實際的實用程序來解決一系列生產(chǎn)生活遇到的問題的能力有著顯著的家加強與提高。零件計數(shù)器的功能是通過感應器對零件數(shù)量進行中斷計數(shù),并由數(shù)碼管動態(tài)顯示出來,并通過實用的程序?qū)⒘慵?shù)目通過串口傳送給PC機,還能夠通過實時的檢測電路將之與蜂鳴器連接起來,起到整十報警以及零件打包的功能。
基于單片機構(gòu)成的零件計數(shù)器研究的主要內(nèi)容包括:AT89C51單片機用何種方式對外部計數(shù)脈沖進行計數(shù)顯示控制、LED顯示驅(qū)動模塊的選擇、如何通過串口
3、與PC機完成實時連接。在這個設計中主要需要解決的問題便是如何提高AT89C51單片機的抗干擾能力以及穩(wěn)定性。
關鍵字:單片機 零件計數(shù)器 LED顯示 串口連接
目錄
第1章 系統(tǒng)設計
1.1電路框圖3
1.2軟件設計方框圖及流程圖4
1.3電路功能6
第2章 計數(shù)器程序
2.1分段程序及功能8
2.2問題及解決方案11
第3章 實驗結(jié)果及討論
3.1實驗結(jié)果11
3.2結(jié)論11
3.3心得體會12
參考文獻12
附錄13
第1章
4、系統(tǒng)設計
1.1 電路框圖
4位共陰數(shù)碼管動態(tài)顯示
8個限流電阻
P0
單片機
AT89C51
P2
P3
復位
選位
INT0
蜂鳴器
繼電器
電路總圖與功能如圖所示,每當來一次外部中斷時,內(nèi)部計數(shù)一次,并將數(shù)值通過4位共陰數(shù)碼管動態(tài)顯示出來。而單片機的P2口可以選擇四根不同的數(shù)碼管來動態(tài)顯示,通過視覺暫留達到同時顯示的效果。同時內(nèi)部程序檢測每當計數(shù)十次時,會形成一個繼電器閉合的零件打包動作,并通過程序使得蜂鳴器發(fā)出警報。
5、
1.2 軟件設計方框圖及流程圖
由于單片機實驗箱的存在,因此硬件部分無需做過多準備,只需根據(jù)硬件部分完成軟件設計即可,在此,我們使用基于單片機的C語言編程。C語言是一種高級程序設計語言,其語法簡單適用性強,在單片機編程時很方便。本次設計中使用的C語言編程軟件為Keil。
軟件設計框圖如下:
初始化函數(shù)
延時函數(shù)
顯示函數(shù)
LED
顯
示
串口通信
延時函數(shù)
計滿提示部分
主
函
數(shù)
外
部
中
斷
6、
流程圖如下:
開始
初始化
零件數(shù)為0
LED動態(tài)顯示
否
是否按下
S_INT0?
是
零件數(shù)加1
LED動態(tài)顯示
否
零件數(shù)是十
的倍數(shù)?
是
蜂鳴器響一次,繼電器
閉合,執(zhí)行零件打包
執(zhí)行串口發(fā)送函數(shù)
是否按下復位鍵
是
否
編寫零件計數(shù)程序時應當注意需要事先的幾個功能,可以分段編寫,最后通過主程序連接
7、。這段程序的重點便是一段循環(huán)中斷計數(shù)程序,在數(shù)值加1的同時要給串口發(fā)出同樣的信息,每當計數(shù)十次時還需要轉(zhuǎn)到零件打包以及蜂鳴器程序中執(zhí)行。
1.3 電路功能
B部分是單片機的最小系統(tǒng)部分,只有這部分電路正常,整個系統(tǒng)才能工作。單片機為內(nèi)含8K FLASH程序存儲器的STC89C52RC,EA接高電平;各并行口都加了10K的上拉電阻;晶振為11.0592M。設置了上電復位和手動復位電路。S1為手動復位按鈕。
C部分電路由4位一體的數(shù)碼管LED1、單個數(shù)碼管LED2和8個獨立發(fā)光二極管L1-L7組成。這3個部分都是共陰結(jié)構(gòu),并聯(lián)在一起,連接在P0口上。LED1用于完成L
8、ED動態(tài)顯示實驗,各個位選線為P24-P27,段碼由P0口輸出;LED2的COM端接地,完成LED靜態(tài)顯示實驗;L1-L7,可以方便地讀出P0輸出的二進制數(shù)據(jù),亦可做流水燈實驗。7407在此起驅(qū)動作用。
F部分電路是由555和電容組成的單穩(wěn)電路。當S_INT0按鈕按下后產(chǎn)生一個低電平單穩(wěn)信號送單片機的INT0,同時D_PLUS1亮一次,作為外部中斷請求信號。
I部分電路為蜂鳴器和繼電器電路。
蜂鳴器采用9012三極管驅(qū)動,其基極接到RD端,當RD端為低電平時,三極管導通,蜂鳴器響。否則關斷。
繼電器采用9013三極管驅(qū)動,其基極接到WR端,當WRD端為低電平時,三極
9、管關斷,繼電器不吸合,常閉觸點閉合,常開觸點打開,D1熄滅;反之則反。
第2章 計數(shù)器程序
2.1 分段程序及功能
*******************開頭及引腳對應程序******************
#include < reg51.h >
sbit BEEP=P3^7;
sbit JDQ=P3^6;
unsigned int Ledcount=0;
unsigned int LedOut[8];
**********************LED數(shù)字碼表********************
unsigned char co
10、de MABIAO[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
************************延時函數(shù)***********************
void delay(unsigned int i)
{
char j;
for(i;i>0;i--)
for(j=200;j>0;j--);
}
**********************串口發(fā)送函數(shù)*********************
void sint()
{
SBUF = Le
11、dcount%10000/1000 + 0x30;
while(!TI);
TI=0;
SBUF=Ledcount%1000/100+ 0x30;
while(!TI);
TI=0;
SBUF=Ledcount%100/10+ 0x30;
while(!TI);
TI=0;
SBUF=Ledcount%10+ 0x30;
while(!TI);
TI=0;
SBUF=\n;
while(!TI);
TI=0;
}
**********************LED顯示程序********************
voi
12、d display()
{
int i;
LedOut[0]=MABIAO[Ledcount%10000/1000];
LedOut[1]=MABIAO[Ledcount%1000/100];
LedOut[2]=MABIAO[Ledcount%100/10];
LedOut[3]=MABIAO[Ledcount%10];
for(i=0;i<4;i++)
{
P0=LedOut[i];
switch(i)
{
case 0:P2
13、=0xef;
break;
case 1:P2=0xdf;
break;
case 2:P2=0xbf;
break;
case 3:P2=0x7f;
break;
}
delay(100);
}
}
***********************初始化函數(shù)**********************
v
14、oid init()
{
EA=1; //允許中斷
EX0=1; //允許外部中斷0
IT0=1; //下降沿觸發(fā)
TR1=1; //啟動T1定時器
TMOD=0x20; //定時器T1為工作方式2,初值自動重裝八位計數(shù)器
TL1=0xfd; //預備單元
TH1=0xfd; //計數(shù)初值設定,波特率9600
SCON=0x50; //串行口為方式1,10步異位收發(fā)(1+8+1)
PCON=0x00; //特殊功能寄存器都為0,波特率不加倍
}
***
15、******************INT0中斷函數(shù)*********************
void int0(void) interrupt 0
{
Ledcount++; //中斷計數(shù)
if((Ledcount%10==0)&&(Ledcount!=0))
{
BEEP=0;
delay(10000);
BEEP=1;
JDQ=~JDQ;
}
if(Ledcount>9999) //超出計數(shù)上限后清零
Ledcount=0;
sint();
}
****
16、*********************主程序************************
void main(void)
{
init();
while(1)
{
display();
}
}
2.2問題及解決方案
問題1:運用指數(shù)函數(shù)計數(shù)以及選擇四根數(shù)碼管顯示,導致程序運行速度過慢,燈光閃爍。
解決方案:改進后去掉指數(shù)函數(shù),改用每一根數(shù)碼管分別使用計算出顯示數(shù)值的方法。
問題2:計數(shù)值達到時蜂鳴器持續(xù)響,直到按下第十一次計數(shù)按鍵方才停止。
解決方案:在蜂鳴器程序中增加BEEP清零和延時語句,可以讓蜂鳴器在
17、計數(shù)第十次時只響一聲,并可改變響的時間。
第3章 實驗結(jié)果及討論
3.1實驗結(jié)果
本此課程設計,使用到Keil C51編程器、燒寫工具以及串口助手等軟件工具。先是利用Keil軟件編寫程序,編譯無錯后再利用燒寫工具將其燒寫進52單片機中,按下S_INT0按鈕,可得到LED動態(tài)顯示數(shù)據(jù)的變化,本次設計中用到4個數(shù)碼管,也就是說,最高顯示零件數(shù)目可達9999個。另外,還可以利用串口助手,將零件數(shù)目實時傳送給PC機,此結(jié)果可在串口助手上觀察到。結(jié)果是完全符合所需零件計數(shù)器的要求的。至此,可以說本次設計是成功的。
3.2結(jié)論
本次課程設計的主要特點是利用C51編程實現(xiàn)基于單片機的零件計
18、數(shù)器,而非使用匯編語言。在編程中,要學會寫出各種子程序,然后合理的調(diào)用它們,還要根據(jù)實際顯示結(jié)果不斷地去修改和完善,使其最終顯示出符合要求的結(jié)果,這不僅考察了我對于單片這門課的學習掌握情況,還考察了我對C語言的基礎知識是否扎實,是否可以將所學的學科融會貫通。此外,還有其他的特點,設計中用到燒寫工具以及串口助手等軟件工具,無需考慮硬件設計,只需完成軟件設計部分。本次課程設計完成了基于單片機的零件計數(shù)器的設計,讓我對于單片機的學習有了更深一層的領悟。
3.3心得體會
經(jīng)過這段時間的學習,我對單片機原理與運用也有了更深層次的了解,同時也對過去所學的知識進行了溫習,對我組設計的課題《零件計數(shù)器
19、》所用到的知識也進行了專門的梳理和消化。這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。通過這次課程設計,我也知道了自己的不足。書本上的知識是死的,只有通過實踐和具體的實例運用,才能真正掌握知識、取得進步。 這次課程設計的經(jīng)歷使我終身受益,我感受到做任何事情都是要真正用心去做的,也是真正的自己學習的過程和研究的過程,沒有學習就不可能有研究的能力,沒有自己的研究,就不會有所突破。
參考文獻
[1] 張有德 趙志英 涂時亮編著,單片微型機原理、應用與實驗.第五版.
上海.復旦大學出版社.2006
[2] 丁海軍、何坤金、王林等編著,程序設計基礎(C語言).北京.北京航空航天大學出版社.2009
附錄
附錄1:燒寫程序
附錄2:串口調(diào)試
附錄3:實物圖