3工位旋轉(zhuǎn)工作臺的控制系統(tǒng)設(shè)計
3工位旋轉(zhuǎn)工作臺的控制系統(tǒng)設(shè)計,旋轉(zhuǎn),工作臺,控制系統(tǒng),設(shè)計
哈爾濱理工大學課程設(shè)計說明書
目錄
第1章 緒論 1
1.1 設(shè)計背景 1
1.2 設(shè)計的主要任務 1
第2章 系統(tǒng)總體方案及硬件設(shè)計 3
2.1 系統(tǒng)總體方案設(shè)計 3
2.2 硬件電路設(shè)計 3
2.2.1 時鐘電路模塊 4
2.2.2 復位電路模塊 5
2.2.3 顯示模塊 6
2.2.4 報警模塊 7
2.2.5 鍵盤模塊 7
第3章 軟件設(shè)計 8
3.1 軟件總體設(shè)計方案 8
3.2 軟件設(shè)計具體過程 11
3.2.1 延時模塊設(shè)計 11
3.2.2 中斷程序 12
3.2.3 鍵盤掃描子程序 13
3.2.4 計分子程序 13
3.2.5 主程序 15
第4章 硬件焊接與調(diào)試 16
4.1 硬件實物圖 16
4.2 調(diào)試結(jié)果 16
課程設(shè)計心得 17
附錄1 18
附錄2 19
參考文獻 27
第1章 緒論
1.1 設(shè)計背景
體育比賽計時計分系統(tǒng)是對體育比賽過程中所產(chǎn)生的時間,比分等數(shù)據(jù)進行快速采集記錄,加工處理,傳遞利用的信息系統(tǒng)。根據(jù)不同運動項目的不同比賽規(guī)則要求,體育比賽的計時計分系統(tǒng)包括測量類,評分類,命中類,制勝類得分類等多種類型。
籃球比賽是根據(jù)運動隊在規(guī)定的比賽時間里得分多少來決定勝負的,因此,籃球比賽的計時計分系統(tǒng)是一種得分類型的系統(tǒng)?;@球比賽的計時計分系統(tǒng)由計時器,計分器等多種電子設(shè)備組成,同時,根據(jù)目前高水平籃球比賽要求,完善的籃球比賽計時計分系統(tǒng)設(shè)備應能夠與現(xiàn)場成績處理,現(xiàn)場大屏幕,電視轉(zhuǎn)播車等多種設(shè)備相聯(lián),以便實現(xiàn)高比賽現(xiàn)場感,表演娛樂觀眾等功能目標。
由于單片機的集成度高,功能強,通用性好,特別是它具有體積小,重量輕,能耗低,價格便宜,可靠性高,抗干擾能力強和使用方便等獨特的優(yōu)點,使單片機迅速得到了推廣應用,目前已經(jīng)成為測量控制應用系統(tǒng)中的優(yōu)選機種和新電子產(chǎn)品的關(guān)鍵部位。世界各大電氣廠家,測控技術(shù)企業(yè),機電行業(yè),競相把單片機應用于產(chǎn)品更新,作為實現(xiàn)數(shù)字化,智能化的核心部件?;@球計時計分器就是以單片機為核心的計時計分系統(tǒng),由計時器,計分器,綜合控制器和24秒控制器等組成。
1.2 設(shè)計的主要任務
本設(shè)計是基于AT89C52單片機的籃球計時計分器,利用7段共陰LED作為顯示器件。在此設(shè)計中共接入了1個四位一體7段共陰LED顯示器,2個兩位一體7段共陰LED顯示器,前者用來記錄賽程時間,其中2位用于顯示分鐘,2位用于顯示秒鐘,后者用于記錄甲乙隊的分數(shù),每隊2個LED顯示器顯示范圍可達到0~99分。賽程計時采用倒計時方式,比賽開始時啟動計時,直至計時到零為止。
其次,為了配合計時器和計分器校正調(diào)整時間和比分,我們特定在本設(shè)計中設(shè)立了7個按鍵,用于啟動,暫停時間,調(diào)整分數(shù)和暫停等功能。采用單片機控制是這個系統(tǒng)按鍵操作使用簡潔,LED顯示,安裝方便。
第2章 系統(tǒng)總體方案及硬件設(shè)計
2.1 系統(tǒng)總體方案設(shè)計
該籃球計時計分器主要包括單片機控制系統(tǒng)、計時顯示模塊、計分顯示模塊、定時報警,按鍵控制鍵盤模塊。通過這幾個模塊的協(xié)調(diào)工作就可以完成相應的計時計分控制和顯示功能。這四個模塊的相互連接如圖2-1所示:
圖2-1 連接簡圖
2.2 硬件電路設(shè)計
AT89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業(yè)中有著廣泛的應用。
AT89C52具有如下特點:AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,AT89C52可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起[1]。
圖2-2 AT89C52單片機引腳圖
2.2.1 時鐘電路模塊
時鐘電路在單片機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個單片機應用系統(tǒng)中,時鐘是保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢。為達到振蕩周期是12MHZ的要求,這里要采用12MHZ的晶振,另外有兩個33P的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳[4]。具體連接如圖2-3所示。
圖2-3 晶振連接圖
2.2.2 復位電路模塊
復位是單片微機的初始化操作,其主要功能是把PC初始化為0000H,使單片微機從0000H單元開始執(zhí)行程序。除進入系統(tǒng)的正常初始化之外,當由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,可以按復位鍵以重新啟動,也可以通過監(jiān)視定時器來強迫復位。RST引腳是復位信號的輸入端[2]。復位電路在這里采用的是上電+按鈕復位電路形式,具體連接電路如圖2-4所示。
圖2-4 復位電路
2.2.3 顯示模塊
本設(shè)計采用共陰極數(shù)碼顯示器,通常,共陰極接低電平(一般接地),其它管腳接段驅(qū)動電路輸出端。當某段驅(qū)動電路的輸出端為高電平時,該端所連接的字符導通并點亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。同樣,要求段驅(qū)動電路能提供額定的段導通電流,還需根據(jù)外接電源及額定段導通電流來確定相應的限流電阻。本次設(shè)計在顯示模塊用到的是一個4位一體和2個兩位一體共陰極數(shù)碼管,共有8個代碼輸入口和8個位選輸入口,采用排阻提供上拉電流數(shù)碼管,以保證有足夠大的電流點亮數(shù)碼管,采用動態(tài)驅(qū)動,使各位數(shù)碼管逐個輪流受控顯示,這就是動態(tài)驅(qū)動[10]。由于掃描速度極快,顯示效果與靜態(tài)驅(qū)動相同,其具體圖形如下圖2-5和圖2-6所示。
圖2-5 計時顯示
圖2-6 計分顯示
2.2.4 報警模塊
蜂鳴器通過一NPN型三極管進行驅(qū)動,如圖觸發(fā)信號有基極引入[9]。接線圖如圖2-7所示。
圖2-7 報警模塊
2.2.5 鍵盤模塊
圖2-8 鍵盤模塊
第3章 軟件設(shè)計
在設(shè)計程序之前,我們首先要對單片機應用系統(tǒng)預完成的任務進行深入的分析,明確系統(tǒng)的設(shè)計任務、功能要求和技術(shù)指標。其次,要對系統(tǒng)的硬件資源和工作環(huán)境進行分析。這是單片機應用系統(tǒng)程序設(shè)計的基礎(chǔ)和條件。在單片機應用系統(tǒng)的開發(fā)過程中,主要采用的有匯編語言和C語言。匯編語言比C語言繁瑣,但是匯編語言能更充分的發(fā)揮指令系統(tǒng)的功能和效率,可以獲得最簡練的目標程序。而C語言的應用最為廣泛,C語言能直接對計算機的硬件進行操作,而且語言靈活、程序結(jié)構(gòu)良好、數(shù)據(jù)類型及運算符豐富、代碼效率高、可移植性好[8]。
3.1 軟件總體設(shè)計方案
本次單片機課程設(shè)計軟件設(shè)計部分采用模塊化程序設(shè)計,程序部分由主程序、T0中斷程序、掃描顯示子程序、計時加(減)1秒的子程序、暫停子程序、快表和回表子程序、延時子程序等組成.其程序流程圖如圖3-1和圖3-2。
圖3-1 主程序流程圖
圖3-2 掃描刷新顯示子程序流程圖
3.2 軟件設(shè)計具體過程
軟件設(shè)計部分采用模塊化程序設(shè)計,用C語言編寫。Keil是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。
Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。
程序部分由主程序、T0中斷程序、掃描顯示子程序、暫停子程序、加分子程序、減分子程序、延時子程序等組成。
3.2.1 延時模塊設(shè)計
void display(uchar fen2,uchar fen1,uchar miao2,uchar miao1) //時間顯示程序
{
dula=0;
P0=table[fen2];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[fen1]|0x80;
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=table[miao2];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
P0=table[miao1]|0x80;
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(5);
}
本設(shè)計中各個數(shù)碼管采用動態(tài)驅(qū)動,使各位數(shù)碼管逐個輪流受控顯示,由于掃描速度極快(本實驗中大約每20毫秒刷新一次),所以顯示效果與靜態(tài)驅(qū)動相同。
3.2.2 中斷程序
void time0() interrupt 1 //中斷程序
{
TH0=(65536-46080)/256; //由于晶振為11.0592,故所記次數(shù)應為46080,計時器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256; //46080的來歷,為50000*11.0592/12
pp++;
}
3.2.3 鍵盤掃描子程序
void keyscan() // 鍵盤掃描程序
{
if(lcden==0)
delay(10);
if(lcden==0)
{
halt=1;
}
if(rs==0)
halt=0;
}
3.2.4 計分子程序
void jifen() // 計分模塊
{
if(A_ADD1==0)
{
delay(10);
if(A_ADD1==0)
{
numa++;
while(!A_ADD1);
}
}
if(A_ADD2==0)
{
delay(10);
if(A_ADD2==0)
{
numa=numa+2;
while(!A_ADD2);
}
}
if(A_DEC==0)
{
delay(10);
if(A_DEC==0)
{
numa=numa--;
while(!A_DEC);
}
}
if(B_ADD1==0)
{
delay(10);
if(A_ADD1==0)
{
numb++;
while(!A_ADD1);
}
}
if(B_ADD2==0)
{
delay(10);
if(A_ADD2==0)
{
numb=numb+2;
while(!A_ADD2);
}
}
if(B_DEC==0)
{
delay(10);
if(B_DEC==0)
{
numb--;
while(!B_DEC);
}
}
}50000*11.0592/12
3.2.5 主程序
void main()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256; // 由于晶振為11.0592,故所記次數(shù)應為46080,計時器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256; //46080的來歷,為50000×11.0592/12
ET0=1;
EA=1; //主板初始化 因51單片機芯片開機時各個IO口輸出為高電平,加上以下源代碼是為了防止各種外部模塊誤動作
DS1302=0; //關(guān)DS1302模塊,與本實驗無關(guān)
SD=0; //關(guān)SD卡模塊,與本實驗無關(guān)
LCD1602=0; //關(guān)LCD1602模塊,與本實驗無關(guān)
cs88=0; //關(guān)點陣管
lcden=1;
rs=1;
jishi(fen);
}
29
第4章 硬件焊接與調(diào)試
4.1 硬件實物圖
對照原理圖進行焊接工作, 把硬件先依次正確插到相應的位置,然后再次檢查器件是否都正確,確定無誤后進行焊接.在焊接的過程中要注意不要將相臨的兩個引腳焊接在一起,防止短路影響使用。
硬件連接好以后,通過ISP下載線向單片機內(nèi)燒制HEX程序,觀察各部分工作情況。硬件連接如圖4-1所示。
圖4-1 硬件實物圖
4.2 調(diào)試結(jié)果
經(jīng)過多次參考源程序代碼,我初步實現(xiàn)了計時模塊功能,能顯示、開始、暫停、報警。計分模塊也實現(xiàn)了顯示功能,但是在結(jié)合計分模塊時,由于計時模塊和計分模塊的相互干擾,程序出現(xiàn)不穩(wěn)定性,問題明顯。此次設(shè)計重點是計時、計分和鍵盤,難點是其間的相互結(jié)合。
課程設(shè)計心得
通過這幾天的單片機的實訓,我在理論的基礎(chǔ)上更深刻的掌握了單片機的深層內(nèi)容及實際生活中的應用,實訓鍛煉了自己動手能力和思維能力,還有在軟件方面的編程能力,讓我受益匪淺,同時也暴露出一些平時學習上的問題,讓我深刻反思。這些問題的發(fā)現(xiàn)將為我以后的學習和工作找明道路,查漏補缺為進一步學習作好準備。
通過實踐,讓我更熟悉掌握了Keil uVision3應用程序的運用,讓我懂得了如何編寫一些簡單的程序,學會了如何制作單片機應用程序,還有焊接和程序下載,。但在中間暴露出很多問題:對平時上課講的理論知識沒有完全掌握消化,到了實際操作中還得請教同學,在焊接中焊接的基本工夫掌握不到家,手上工夫還是很欠缺的,使得電路板不是很美觀。這些問題的發(fā)現(xiàn),有助于提高我在以后的工作和學習中對此類問題的認識,確保不在同一問題上再次犯錯。嚴謹求實、踏實務實,是我這次實訓的深刻總結(jié)。
做課程設(shè)計的這幾天翻閱了很多書,也上了很多網(wǎng)站去尋找自己需要的資料。這種尋找有很強的目的性,只是為了自己選定的課題內(nèi)容而查閱,所以除了自己課題以外的其他方面幾乎還是一無所知。這讓我深刻的認識到了自己專業(yè)知識的貧乏。為我對自己大四生活的規(guī)劃敲響了警鐘。我對單片機的學習不會因為課程設(shè)計的結(jié)束而結(jié)束,在接觸的眾多資料里,做設(shè)計只是走馬觀花般的點到。
通過單片機課程設(shè)計,我加深了對單片機理論的理解,學回了怎樣將理論很好地應用到實際當中去,而且我還學會了如何去培養(yǎng)我們的不畏困難的挑戰(zhàn)精神,從而不斷地戰(zhàn)勝自己,超越自己,我在這一設(shè)計過程中,學會了堅持不懈,不輕易言棄。設(shè)計過程,也好比是我們?nèi)祟惓砷L的歷程,常有一些不如意,也許這就是在對我們提出了挑戰(zhàn),勇敢過,也戰(zhàn)勝了,勝利的鐘聲也就一定會為我們而敲響。
附錄1
附錄2
#include
#define uchar unsigned char
sbit dula=P2^0; //段選信號的鎖存器控制
sbit wela=P2^1; //位選信號的鎖存器控制
sbit cs88=P2^2; //點陣管的鎖存器控制
cs88=0; //關(guān)點陣管
sbit beep=P2^3;
sbit LCD1602=P2^5; //定義LCD1602使能端,用于HJ-C52實驗板復位,與本實驗無關(guān)
sbit DS1302=P2^7; //定義DS1302時鐘使能端,用于HJ-C52實驗板復位,與本實驗無關(guān)
sbit SD=P2^6; //定義SD卡使能端,用于HJ-C52實驗板復位,與本實驗無關(guān)
void cmg88() //關(guān)數(shù)碼管,點陣函數(shù)
{
dula=1;
P0=0x00;
dula=0;
cs88=0x00;
P0=0x00;
cs88=1;
}
sbit lcden=P3^0;
sbit restart=P3^1;
sbit A_ADD1=P3^2; //定義按鍵輸入端口 k3
sbit A_ADD2=P3^4; //k5
sbit A_DEC=P3^6; //k7
sbit B_ADD1=P3^3; //定義按鍵輸入端口 k4
sbit B_ADD2=P3^5; //k6
sbit B_DEC=P3^7; //k8
unsigned char halt,min2,min1,sec2,sec1,sec=60 ,min=11;
unsigned int pp,numa=0,numb=0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void display(uchar min2,uchar min1,uchar sec2,uchar sec1); //時間顯示模塊
void display1(uchar A2,uchar A1,uchar B2,uchar B1); //計分顯示模塊
void keyscan(); //鍵盤掃描模塊
void jishi(); //計時模塊
void delay(unsigned char i); //延時模塊
void jifen(); //計分模塊
void main()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256; //由于晶振為11.0592,故所記次數(shù)應為46080,計時器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256; //46080的來歷,為50000*11.0592/12
ET0=1;
EA=1; //主板初始化 因51單片機芯片開機時各個IO口輸出為高電平,加上以下源代碼是為了防止各種外部模塊誤動作
DS1302=0; //關(guān)DS1302模塊,與本實驗無關(guān)
SD=0; //關(guān)SD卡模塊,與本實驗無關(guān)
LCD1602=0; //關(guān)LCD1602模塊,與本實驗無關(guān)
cs88=0; //關(guān)點陣管
lcden=1;
restart=1;
while(1)
{
jishi();
jifen();
}
}
void time0() interrupt 1 //中斷程序
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
}
void jishi() //計時模塊
{
keyscan();
if(halt==0)
{
TR0=1;
if(pp==20)
{
pp=0;
sec--;
if(sec==0)
{
sec=60;
min--;
if(min<=1)
beep=1;
if(min==0)
beep=0;
halt=1;
sec=60;
min=11;
}
}
min2=min/10;
min1=min%10;
sec2=sec/10;
sec1=sec%10;
display(min2,min1,sec2,sec1);
}
else
TR0=0;
display(min2,min1,sec2,sec1);
}
void keyscan() //鍵盤掃描程序
{
if(lcden==0)
delay(5);
if(lcden==1)
{
halt=1;
}
if(restart==1)
halt=0;
}
void delay(unsigned char i) //延時程序
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void jifen() //計分模塊
{
if(A_ADD1==1)
{
numa++;
}
if(A_ADD2==1)
{
(numa++)++;
}
if(A_DEC==1)
{
numa--;
}
if(B_ADD1==1)
{
numb++;
}
if(B_ADD2==1)
{
(numb++)++;
}
if(B_DEC==1)
{
numb--;
}
A2=numa/10;
A1=numa%10;
B2=numb/10;
B1=numb%10;
display1(A2,A1,B2,B1);
}
void display(uchar min2,uchar min1,uchar sec2,uchar sec1) //時間顯示程序
{
dula=1;
P0=table[min1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);
dula=1;
P0=table[min2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
dula=1;
P0=table[sec1];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);
dula=1;
P0=table[sec2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=1;
wela=0;
delay(5);
}
void display1(uchar A2,uchar A1,uchar B2,uchar B1) //計分顯示程序
{
dula=1;
P0=table[A1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);
dula=1;
P0=table[A2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
dula=1;
P0=table[B1];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);
dula=1;
P0=table[B2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=1;
wela=0;
delay(5);
}
參考文獻
[1] 周堅.單片機輕松入門[M].北京:航空航天大學出版社,2004.
[2] 張毅坤等.單片微型計算機原理及應用[M].西安:西安電子科技大學出版社,1998.
[3] 劉光斌.單片機系統(tǒng)實用抗干擾技術(shù)[M].北京:人民郵電出版社,2003.
[4] 張友德 趙志英 涂時亮. 單片微型機原理應用與實驗(第四版)[M].上海:復旦大學出版社,2005.
[5] 劉文濤.單片機語言C51典型應用設(shè)計[M].北京:人民郵電出版社,2005.
[6] 張毅剛,譚曉均.MCS-51單片機應用設(shè)計[M]. 哈爾濱:哈爾濱工業(yè)大學出版社,1997.
[7] 祁偉.單片機C51程序設(shè)計教程與實驗[M].北京:航空航天大學出版社,2006.
[8] 張 虹. 匯編語言程序設(shè)計[M].北京:中國礦業(yè)大學出版社,2005.
[9] 熊如貴.遮擋式紅外聲光報警裝置[J].北京:《電子制作》雜志社,2006.
[10] 康華光.電子技術(shù)基礎(chǔ) 模擬部分[M].北京:高等教育出版社,2004.
收藏