《綜合電子電路設計與調試實驗報告可編程順序控制器.doc》由會員分享,可在線閱讀,更多相關《綜合電子電路設計與調試實驗報告可編程順序控制器.doc(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、綜合電子電路設計與調試實 驗 報 告題目: 可編程順序控制器 學院: 專業(yè): 班級: 姓名: 學號: 2009年 11 月 30 日課 堂考 勤(20分)實 驗報 告(20分)PCB制作、安裝焊接軟硬件調試(60分)總 評成 績指 導教 師綜合電子電路設計與調試 可編程程序控制器(一)研制意義在我們日常生活中,可編程順序控制器的通用性極強,在工業(yè)和家電控制中經(jīng)常采用順序控制器,實現(xiàn)工作的節(jié)拍運行,也就是第一步工作完成了,才開始下一步,每一步都有持續(xù)的時間。作為傳統(tǒng)繼電接觸控制的替代產(chǎn)品,這個系統(tǒng)由于它可以通過軟件編程來改變控制過程,而且具有硬件電路簡單,編程容易,抗干擾能力強及可靠性高等優(yōu)點,
2、并且非常適合于在惡劣的工業(yè)環(huán)境下使用。(二)研制任務a.研制一款基于AT89C51單片機、采用JQC-3F繼電器和LCD1602C液晶顯示器的可編程順序控制器;b.硬件電路的設計與制作,軟件程序的編寫與調試;c.設計報告的撰寫。(三)設計要求 a.鍵盤圖例 鍵盤按鍵布局 鍵盤內碼值(ASCII碼) b.顯示圖例(四)系統(tǒng)硬件框圖(五)硬件各單元電路設計及原理圖 a.繼電器輸出單元電路由于AT89C51復位時P0口(接上拉電阻)為FFH,系統(tǒng)一開機,繼電器觸點就會閉合,因此在P0口的輸出與ULN2003之間加了74LS04反向器,這樣使得系統(tǒng)在開機時發(fā)光二極管就處于暗的狀態(tài)。(1)若P0.0=1
3、,則OUT1=0V 繼電器的VCC和GND之間的電壓差為12V 繼電器線圈通電 常開觸點閉和(AA為常開觸點,B為常閉觸點) LED亮。(2)若P0.0=0,則OUT1=12V 繼電器的 VCC和GND之間的電壓差為0V 繼電器線圈不通電 常開觸點不閉和(AA為常開觸點,B為常閉觸點) LED暗。b.繼電器輸出單元電路原理圖 c.夜晶顯示單元電路(1)AT89C51的P1.0P1.7控制LCD1602C液晶顯示器的8根數(shù)據(jù)線(DB0DB7)。(2)AT89C51的P3.5P3.7分別控制LCD1602C液晶顯示器的3條控制線(RS、R/W、E),其中P3.5控制RS,P3.6控制R/W,P3.
4、7控制使能端口 E。d.液晶顯示單元電路原理圖e.鍵盤輸入單元電路(1)系統(tǒng)中的鍵盤輸入單元電路是采用44陣列鍵盤,與單片機AT89C51的P2口連接;(2)按鍵S1S15采用掃描方式得到鍵盤碼;(3)按鍵S16作為單片機復位按鍵。f.鍵盤輸入單元電路原理圖g.電源保護電路(六)系統(tǒng)軟件主程序流程圖系統(tǒng)功能及工作過程描述:a.先接通電源,調整輸入電壓為5V左右,液晶顯示器分兩行顯示Please Input和 Number:,我從鍵盤輸入我的學號:06220404。彈出兩行字母分別為:Name:Xuyanxin和Number:06220404;b.間隔60秒左右緊接著分兩行顯示PLEASE IN
5、PUT HOW和MANY STAGE:( ),輸入數(shù)字2,彈出兩行字母分別為:STEP_OUT_TIME和INPUT:。我從鍵盤輸入1_1100_10,按輸入鍵,接著輸入2_0101_10,連續(xù)按輸入鍵和執(zhí)行鍵;c.可以觀察到有四盞綠燈先是僅有前兩盞亮,維持10秒后就是第2和第4盞燈亮,又維持了10秒,最后彈出了兩行字母OVER和PLEASE RESET,結束整個測試過程。(七)系統(tǒng)調試 a.系統(tǒng)硬件調試(1)ULN2003的1腳為輸入端,1016腳為輸出端,8腳接地,9腳接電源(+12V);(2)若輸入端1腳為低電平,則對應的輸出端16腳輸出為+12V,繼電器不會動作。(繼電器的VCC和GN
6、D之間的電壓差為0V繼電器線圈不通電常開觸點不閉合);(3)若輸入端1腳為高電平,則對應的輸出端16腳輸出為0V,繼電器常開觸點閉合。(繼電器的 VCC和GND之間的電壓差為+12V繼電器線圈通電常開觸點閉合)。b.系統(tǒng)軟件調試(1)LCD顯示:在任意位置顯示任意字符或字符串;清屏,光標閃爍及移動;最后的實時輸出顯示。(2)顯示按鍵對應的功能:當有鍵按下時,運行相應的程序,觀察LCD上是否能顯示鍵值或相應功能??梢酝瑫r觀察DATA及SFR窗口中相應寄存器中的數(shù)據(jù)是否正確。c.系統(tǒng)綜合調試(1)系統(tǒng)上電時,LCD上顯示“*PLEASE INPUT HOW MANY STAGE ()BU”。(2)
7、按數(shù)字鍵,鍵入要求的步驟數(shù),例如要實現(xiàn)3個步驟,則只需按在括號內鍵入3就可以了,輸入后按確認鍵。(3)接著輸入控制數(shù)據(jù),每輸入一個步驟后按輸入鍵,可以在RAM數(shù)據(jù)窗口查看每一步數(shù)據(jù)是否已保存。(4)按執(zhí)行鍵,按下此鍵后,系統(tǒng)就會按照輸入的數(shù)據(jù)執(zhí)行,控制每一步的工作時間和繼電器狀態(tài),并且會在LCD上顯示出來。d.調試的主要事項(1)調試使用儀器:萬用表,電壓電流輸出器,起子,測試探頭,以及Proteous和Keil軟件;(2)調試過程中出現(xiàn)的故障,原因及解決方法:當接通電源后,接在電源旁邊的紅燈并沒有亮,經(jīng)過發(fā)現(xiàn)是因為正負極搞錯了,于是我又重新參看PCB原理圖,找到正極的準確位置,把原來的燈取出
8、來,然后又焊上了一個,結果紅燈一接通電源就亮了;當前期軟件顯示正確無誤的前提下,結果出現(xiàn)了四盞綠燈沒有按照預測的那樣亮起來,原因是我用的是AT89C51的芯片,但是里面燒寫的程序中關于倒計時的部分是不能在其中實現(xiàn)的,這能在AT89C52芯片中才可以的,結果通過換芯片,四盞綠燈按照程序準確的顯示了亮滅情況;此外,在調試軟件程序編程過程中,一開始總是實現(xiàn)不了輸入學號后彈出姓名和學號,原來是因為我對于Keyscan這個函數(shù)的調用不是很熟悉,經(jīng)過老師的指導和協(xié)助,最終我編好了整個程序,并在Proteous中進行了仿真,一切都顯示正確。(七)設計電路的優(yōu)缺點及自身收獲和體會 a.電路的優(yōu)缺點: (1)電
9、路的優(yōu)點:這次試驗研制的是一款基于AT89C51單片機、采用JQC-3F繼電器和LCD1602C液晶顯示器的可編程順序控制器,它的設計電路簡單易行,功能較強。由于采用編程來控制要實現(xiàn)的目的,具有很大的靈活性,可以通過變換程序達到多種功能; (2)電路的缺點:這次試驗我們采用2K的電阻代替了阻值較小的電阻,因此使得四盞綠燈亮度不夠。本次沒有采用繼電器,容易使四盞綠燈的電壓不是很穩(wěn)定。而且本次試驗沒有使用繼電器,使綠燈的電壓不能很穩(wěn)定。 c.試驗過程中的收獲和體會 在此次試驗中,我學會了如何運用Proteous和Keil軟件調試程序,懂得了一些基本的函數(shù)調用方法和一些新函數(shù)的使用(如Keyscan
10、函數(shù)的使用),看到自己編寫的程序仿真成功,讓我很開心,嘗到了學習的樂趣和成就感。當然,在調試過程中,我發(fā)現(xiàn)我的紅燈不亮時,原因竟然是因為我的正負極接錯了,所以我總結了一下自己,焊板時一定要參照PCB原理圖,認真仔細,關注每一個引腳,相信我以后會做的更好。 (八)附錄 a.硬件電路原理圖和PCB圖 (1)完整的硬件電路原理圖 (2)PCB原理圖 b.軟件程序源代碼(核心程序) void yanxin() uchar j;uchar code row1=Name:Xuyanxin; /12個字符uchar code row2=Number:06220404;init(); /初始化液晶 write
11、_com(0 x01); write_com(0 x0f); write_com(0 x0c); for(j=0;j30;j+) delay(250); write_com(0 x82); write_com(0 x80+1); /向液晶發(fā)出命令,命令代碼為0 x80,表示設置光標在第一行的開始,見文檔1602液晶說明.pdf的4.3.1節(jié) for(j=0;j12;j+) write_shu(row1j); /向液晶提供需要顯示的字符write_com(0 x80+0 x40+1);/向液晶發(fā)出命令,光標移動到第二行,并空出第一個字符 for(j=0;j15;j+) write_shu(row
12、2j); /向液晶提供需要顯示的字符 void Xu() uchar i,j,g,h;uchar code line1=Please Input; /12個字符 uchar code line2=Number:;init(); /初始化液晶 write_com(0 x80); /向液晶發(fā)出命令,命令代碼為0 x80,表示設置光標在第一行的開始,見文檔1602液晶說明.pdf的4.3.1節(jié) for(i=0;i12;i+) write_shu(line1i); /向液晶提供需要顯示的字符 write_com(0 x80+0 x40);/向液晶發(fā)出命令,光標移動到第二行,并空出第一個字符 for(i
13、=0;i0) h=g; g=0; if(h=0 x30 & h=0 x39) if(q=1) write_com(0 x0f); write_as(0 x80+0 x40+8+i,h); i+; q=0; /判斷是否是確認鍵 if(h=12) break; h=0; void start()/開機提示,并輸入步數(shù) uchar i,b,temp0,temp1; uchar code start=PLEASE INPUT HOW; uchar code start1= MANY STAGE:( ); write_com(0 x80); for(i=0;i16;i+) write_shu(start
14、i); write_com(0 x80+0 x40); for(i=0;i0) temp1=temp0; temp0=0; if(temp10 x30&temp1=0 x39) write_shu(temp1); write_com(0 x80+0 x40+14); b=temp1; if(b!=0) while(temp1=12) bu=b;/ascii 碼 write_com(0 x80+0 x40+14);write_com(0 x0c); write_shu(bu); input(); void input()/輸入步數(shù),操作,時間 uchar i,j,temp0,temp1; uch
15、ar b9; uchar code table=STEP_OUT_TIME; uchar code table1=INPUT:; write_com(0 x01); write_com(0 x82); for(i=0;i16;i+) write_shu(tablei); write_com(0 x80+0 x40); for(i=0;i6;i+) write_shu(table1i); i=0; j=0; write_com(0 x0f); while(i0) temp1=temp0; temp0=0; if(i=0 x30&temp1=0 x39)|(temp1=0 x5f)&(j9) bj
16、=temp1; if(q=1) write_com(0 x0f); write_as(0 x80+0 x40+6+j,bj); j+; q=0; if(temp1=11)/清除鍵功能 write_com(0 x80+0 x40+6); write_com(0 x0c); for(j=0;j9;j+) bj=0 x30; write_shu(bj); write_com(0 x80+0 x40+6); write_com(0 x0f); j=0; if(j=9) write_com(0 x0c); if(temp1=13)/輸入鍵功能 for(j=0;j9;j+) aij=bj; write_a
17、s(0 x80+0 x40+6+j,aij); for(j=0;j9;j+) bj=0 x30; i+;if(i(bu-0 x30) write_com(0 x80+0 x40+6);for(j=0;j9;j+) write_shu(0 x2a); j=0; if(i=(bu-0 x30)&(temp1=14) while(1) excute(); /執(zhí)行命令 并OVER void excute() /執(zhí)行命令 并OVER uchar m; uchar i,j; uchar shi,ge; uchar code table2=BEGIN; uchar code table3=OVER; uch
18、ar code table4=PLEASE RESET; i=0; j=0; m=(a07-0 x30)*10+(a08-0 x30); write_com(0 x80+0 x40); for(j=0;j5;j+) write_shu(table2j);TR0=1; /定時器開始工作while(i=(bu-0 x30) for(j=0;j6;j+) write_as(0 x80+0 x40+6+j,aij);d1=ai2-0 x30; d1=!d1;d2=ai3-0 x30; d2=!d2;d3=ai4-0 x30; d3=!d3;d4=ai5-0 x30; d4=!d4; if(tt=1)
19、tt=0; m-;/倒計時 if(m=0) shi=m/10; ge=m%10; write_com(0 x80+0 x40+6+7); write_shu(0 x30+shi); write_shu(0 x30+ge); TR0=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; i+; if(i=(bu-0 x30)/over write_com(0 x01); write_com(0 x80+6); for(j=0;j4;j+) write_shu(table3j); write_com(0 x80+0 x40+2);for(j=0;j12;
20、j+) write_shu(table4j); while(1); m=(ai7-0 x30)*10+(ai8-0 x30); TR0=1; /定時器開始工作 shi=m/10; ge=m%10; write_com(0 x80+0 x40+6+7); write_shu(0 x30+shi); write_shu(0 x30+ge); void main() int r=300; Xu(); yanxin(); for(r=0;r300;r+) delay(200); r+; start();while(1);void timer0() interrupt 1 /定時器中斷 TH0=(65536-50000)/256; TL0=(65536-50000)%256; t+; if(t=20) tt=1; t=0;c.元器件清單1K電阻2個2K電阻4個4.7K電阻4個10K電阻1個LCD-1602液晶顯示器1個AT89C51芯片1個插座16個74LS04芯片1個LED燈5個晶振1個電源插座1個10uF電容2個30PF電容2個電位器1個d.重要芯片引腳資料(1)AT89C51單片機引腳圖(2)LCD1602C液晶顯示器引腳圖 (3)74LS04六反相器引腳圖 e.參考文獻 可編程順序控制器課件及相關指導資料。