版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.微機(jī)原理與應(yīng)用實(shí)驗(yàn)講義劉濤 陳亮中國(guó)計(jì)量學(xué)院信息學(xué)院目 錄實(shí)驗(yàn)1:keil開(kāi)發(fā)環(huán)境介紹單片機(jī)內(nèi)部存儲(chǔ)器調(diào)用操作1實(shí)驗(yàn)2:清零、拆字、拼字程序及數(shù)據(jù)區(qū)傳送子程序7實(shí)驗(yàn)3:P1口亮燈實(shí)驗(yàn)、P1口轉(zhuǎn)彎燈實(shí)驗(yàn)9實(shí)驗(yàn)4:?jiǎn)纹瑱C(jī)定時(shí)器實(shí)驗(yàn)11實(shí)驗(yàn)5:?jiǎn)纹瑱C(jī)計(jì)數(shù)器實(shí)驗(yàn)13實(shí)驗(yàn)6:?jiǎn)纹瑱C(jī)串行口實(shí)驗(yàn)14實(shí)驗(yàn)7:工業(yè)順序控制實(shí)驗(yàn)18實(shí)驗(yàn)8:8255PA口控制PB口、8255控制交通燈20實(shí)驗(yàn)9:?jiǎn)纹瑱C(jī)鍵盤輸入、數(shù)碼管顯示實(shí)驗(yàn)22實(shí)驗(yàn)10:?jiǎn)纹瑱C(jī)D/A轉(zhuǎn)換實(shí)驗(yàn)30實(shí)驗(yàn)11:?jiǎn)纹瑱C(jī)總線控制1602液晶32實(shí)驗(yàn)12:?jiǎn)纹瑱C(jī)設(shè)計(jì)簡(jiǎn)易計(jì)算器36:實(shí)驗(yàn)1:keil開(kāi)發(fā)環(huán)境介紹單片機(jī)內(nèi)部存儲(chǔ)器調(diào)用操作一、實(shí)驗(yàn)?zāi)康?.進(jìn)行ke
2、il開(kāi)發(fā)環(huán)境的熟悉和調(diào)試;2.能夠初步進(jìn)行一個(gè)簡(jiǎn)單程序的調(diào)試二、實(shí)驗(yàn)設(shè)備及器材啟東單片機(jī)綜合實(shí)驗(yàn)箱,計(jì)算機(jī)等三、實(shí)驗(yàn)內(nèi)容熟悉keil的開(kāi)發(fā)環(huán)境,并進(jìn)行一個(gè)簡(jiǎn)單的程序調(diào)試,在keil的串行調(diào)試窗口顯示“Hello World!”四、實(shí)驗(yàn)步驟使用C語(yǔ)言肯定要使用到C編譯器,以便把寫好的C程序編譯為機(jī)器碼,這樣單片機(jī)才能執(zhí)行編寫好的程序。KEIL uVISION2是眾多單片機(jī)應(yīng)用開(kāi)發(fā)軟件中優(yōu)秀的軟件之一,它支持眾多不同公司的MCS51架構(gòu)的芯片,它集編輯,編譯,仿真等于一體,同時(shí)還支持,PLM,匯編和C語(yǔ)言的程序設(shè)計(jì),它的界面和常用的微軟VC+的界面相似,界面友好,易學(xué)易用,在調(diào)試程序,軟件仿真方面
3、也有很強(qiáng)大的功能。因此很多開(kāi)發(fā)51應(yīng)用的工程師或普通的單片機(jī)愛(ài)好者,都對(duì)它十分喜歡。以上簡(jiǎn)單介紹了KEIL51軟件,要使用KEIL51軟件,必需先要安裝它。KEIL51是一個(gè)商業(yè)的軟件,對(duì)于我們這些普通愛(ài)好者可以到KEIL中國(guó)代理周立功公司的網(wǎng)站上下載一份能編譯2K的DEMO版軟件,基本可以滿足一般的個(gè)人學(xué)習(xí)和小型應(yīng)用的開(kāi)發(fā)。(安裝的方法和普通軟件相當(dāng)這里就不做介紹了)圖11啟動(dòng)時(shí)的屏幕接著按下面的步驟建立您的第一個(gè)項(xiàng)目:(1)點(diǎn)擊Project菜單,選擇彈出的下拉式菜單中的New Project,如圖12。接著彈出一個(gè)標(biāo)準(zhǔn)Windows文件對(duì)話窗口,如圖13,用法技巧也不是這里要說(shuō)的,以后的
4、章節(jié)中出現(xiàn)類似情況將不再說(shuō)明。在"文件名"中輸入您的第一個(gè)C程序項(xiàng)目名稱,這里我們用"test",只要符合Windows文件規(guī)則的文件名都行。"保存"后的文件擴(kuò)展名為uv2,這是KEIL uVision2項(xiàng)目文件擴(kuò)展名,以后我們可以直接點(diǎn)擊此文件以打開(kāi)先前做的項(xiàng)目。圖12New Project菜單 圖13文件窗口(2)選擇所要的單片機(jī),這里我們選擇常用的Ateml公司的AT89C51。此時(shí)屏幕如圖14所示。AT89C51有什么功能、特點(diǎn)呢?不用急,看圖中右邊有簡(jiǎn)單的介紹,稍后的章節(jié)會(huì)作較詳細(xì)的介紹。完成上面步驟后,我們就可以進(jìn)行程序的
5、編寫了。(3)首先我們要在項(xiàng)目中創(chuàng)建新的程序文件或加入舊程序文件。如果你沒(méi)有現(xiàn)成的程序,那么就要新建一個(gè)程序文件。在KEIL中有一些程序的Demo,在這里我們還是以一個(gè)C程序?yàn)槔榻B如何新建一個(gè)C程序和如何加到您的第一個(gè)項(xiàng)目中吧。點(diǎn)擊圖15中1的新建文件的快捷按鈕,在2中出現(xiàn)一個(gè)新的文字編輯窗口,這個(gè)操作也可以通過(guò)菜單FileNew或快捷鍵Ctrl+N來(lái)實(shí)現(xiàn)。好了,現(xiàn)在可以編寫程序了,光標(biāo)已出現(xiàn)在文本編輯窗口中,等待我們的輸入了。第一程序嘛,寫個(gè)簡(jiǎn)單明了的吧。下面是經(jīng)典的一段程序:i nclude <AT89X51.H>i nclude <stdio.h>void ma
6、in(void)SCON = 0x50; /串口方式1,允許接收TMOD = 0x20; /定時(shí)器1定時(shí)方式2TCON = 0x40; /設(shè)定時(shí)器1開(kāi)始計(jì)數(shù)TH1 = 0xE8; /11.0592MHz 1200波特率TL1 = 0xE8;TI = 1;TR1 = 1; /啟動(dòng)定時(shí)器while(1)printf ("Hello World!n"); /顯示Hello World圖14選取芯片圖15新建程序文件 這段程序的功能是不斷從串口輸出"Hello World!"字符,我們先不管程序的語(yǔ)法和意思吧,先看看如何把它加入到項(xiàng)目中和如何編譯試運(yùn)行。(4)點(diǎn)
7、擊圖15中的3保存新建的程序,也可以用菜單FileSave或快捷鍵Ctrl+S進(jìn)行保存。因是新文件所以保存時(shí)會(huì)彈出類似圖13的文件操作窗口,我們把第一個(gè)程序命名為test1.c,保存在項(xiàng)目所在的目錄中,這時(shí)你會(huì)發(fā)現(xiàn)程序單詞有了不同的顏色,說(shuō)明KEIL的C語(yǔ)法檢查生效了。如圖16鼠標(biāo)在屏幕左邊的Source Group1文件夾圖標(biāo)上右擊彈出菜單,在這里可以做在項(xiàng)目中增加減少文件等操作。我們?quot;Add File to Group 'Source Group 1'"彈出文件窗口,選擇剛剛保存的文件,按ADD按鈕,關(guān)閉文件窗,程序文件已加到項(xiàng)目中了。這時(shí)在Source
8、 Group1文件夾圖標(biāo)左邊出現(xiàn)了一個(gè)小+號(hào)說(shuō)明,文件組中有了文件,點(diǎn)擊它可以展開(kāi)查看。圖16把文件加入到項(xiàng)目文件組中 (5)C程序文件已被我們加到了項(xiàng)目中了,下面就剩下編譯運(yùn)行了。這個(gè)項(xiàng)目我們只是用做學(xué)習(xí)新建程序項(xiàng)目和編譯運(yùn)行仿真的基本方法,所以使用軟件默認(rèn)的編譯設(shè)置,它不會(huì)生成用于芯片燒寫的HEX文件,如何設(shè)置生成HEX文件就請(qǐng)看下面的第三課。我們先來(lái)看圖17吧,圖中1、2、3都是編譯按鈕,不同是1是用于編譯單個(gè)文件。2是編譯當(dāng)前項(xiàng)目,如果先前編譯過(guò)一次之后文件沒(méi)有做動(dòng)編輯改動(dòng),這時(shí)再點(diǎn)擊是不會(huì)再次重新編譯的。3是重新編譯,每點(diǎn)擊一次均會(huì)再次編譯鏈接一次,不管程序是否有改動(dòng)。在3右邊的是停
9、止編譯按鈕,只有點(diǎn)擊了前三個(gè)中的任一個(gè),停止按鈕才會(huì)生效。在4中可以看到編譯的錯(cuò)誤信息和使用的系統(tǒng)資源情況等,以后我們要查錯(cuò)就靠它了。6是有一個(gè)小放大鏡的按鈕,這就是開(kāi)啟關(guān)閉調(diào)試模式的按鈕,它也存在于菜單DebugStartStop Debug Session,快捷鍵為Ctrl+F5。圖17編譯程序(6)進(jìn)入調(diào)試模式,軟件窗口樣式大致如圖18所示。圖中1為運(yùn)行,當(dāng)程序處于停止?fàn)顟B(tài)時(shí)才有效,2為停止,程序處于運(yùn)行狀態(tài)時(shí)才有效。3是復(fù)位,模擬芯片的復(fù)位,程序回到最開(kāi)頭處執(zhí)行。按4我們可以打開(kāi)5中的串行調(diào)試窗口,這個(gè)窗口我們可以看到從51芯片的串行口輸入輸出的字符,這里的第一個(gè)項(xiàng)目也正是在這里看運(yùn)行
10、結(jié)果。這些在菜單中也有,這里不再一一介紹大家不妨找找看,其它的功能也會(huì)在后面的課程中慢慢介紹。首先按4打開(kāi)串行調(diào)試窗口,再按運(yùn)行鍵,這時(shí)就可以看到串行調(diào)試窗口中不斷的打?quot;Hello World!"。這樣就完成了您的第一個(gè)C項(xiàng)目。最后我們要停止程序運(yùn)行回到文件編輯模式中,就要先按停止按鈕再按開(kāi)啟關(guān)閉調(diào)試模式按鈕。然后我們就可以進(jìn)行關(guān)閉KEIL等相關(guān)操作了。到此為止,初步學(xué)習(xí)了一些KEIL uVision2的項(xiàng)目文件創(chuàng)建、編譯、運(yùn)行和軟件仿真的基本操作方法。其中一直有提到一些功能的快捷鍵的使用,的確在實(shí)際的開(kāi)發(fā)應(yīng)用中快捷鍵的運(yùn)用可以大大提高工作的效率,建議大家多多使用,還有就是
11、對(duì)這里所講的操作方法舉一反三用于類似的操作中。 圖18調(diào)試運(yùn)行程序 實(shí)驗(yàn)2:清零、拆字、拼字程序及數(shù)據(jù)區(qū)傳送子程序一、實(shí)驗(yàn)?zāi)康?#160; 掌握匯編語(yǔ)言設(shè)計(jì)和調(diào)試方法,熟悉鍵盤操作。二、實(shí)驗(yàn)內(nèi)容(1)把2000H-20FFH的內(nèi)容清零。(2)把2000H的內(nèi)容拆開(kāi),高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把數(shù)據(jù)送顯示緩沖區(qū)時(shí)用。(3)把2000H、2001H的低位分別送入2002H高低位,一般本程序用于把顯示緩沖區(qū)的數(shù)據(jù)取出拼裝成個(gè)字節(jié)。(4)把R2、R3源RAM區(qū)首址內(nèi)的R6、R7字節(jié)數(shù)據(jù)傳送到R4、R5目的
12、RAM區(qū)。三、程序框圖(2)拆字程序框圖(1)清零程序框圖(4)數(shù)據(jù)區(qū)傳送程序框圖(3)拼字程序框圖四、實(shí)驗(yàn)步驟(1)用連續(xù)或單步方式運(yùn)行程序,檢查2000-20FF中執(zhí)行程序前后的內(nèi)容變化。(2)用連續(xù)或單步方式運(yùn)行程序,檢查20002002H中內(nèi)容變化情況。(3)單步或用斷點(diǎn)方式運(yùn)行程序,檢查2002H內(nèi)容變化情況。(4)在R2、R3中輸入源首址(例如0000H),R4、R5中輸入目的地址(例如2000H), R6、R7中輸入字節(jié)數(shù)(例如1FFFH),運(yùn)行程序,檢查0000-1FFFH中內(nèi)容是否和2000-3FFFH中內(nèi)容完全致。實(shí)驗(yàn)3:P1口亮燈實(shí)驗(yàn)、P1口轉(zhuǎn)彎燈實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?1)學(xué)
13、習(xí)P1口的使用方法;(2)學(xué)習(xí)延時(shí)子程序的編寫。二、實(shí)驗(yàn)設(shè)備及器材啟東單片機(jī)綜合實(shí)驗(yàn)箱,計(jì)算機(jī)等三、實(shí)驗(yàn)內(nèi)容(1)P1口亮燈實(shí)驗(yàn):P1作為輸出口,接八只發(fā)光二極管,編寫程序,使發(fā)光二極管循環(huán)點(diǎn)亮。P1口對(duì)準(zhǔn)雙向口,每一位都可獨(dú)立地定義為輸出線或輸入線。本實(shí)驗(yàn)中延時(shí)子程序采用指令循環(huán)來(lái)實(shí)現(xiàn),機(jī)器周期(12/6MHz)*指令所需機(jī)器周期數(shù)*循環(huán)次數(shù),在系統(tǒng)時(shí)間允許的情況下可以采用此方法。(2)P1口轉(zhuǎn)彎燈實(shí)驗(yàn):P1.0開(kāi)關(guān)接5V時(shí),右轉(zhuǎn)彎燈閃亮,P1.1開(kāi)關(guān)接5V時(shí)左轉(zhuǎn)彎燈閃亮, P1.O、P1.1開(kāi)關(guān)同時(shí)接5V或接地時(shí),轉(zhuǎn)彎燈均不閃亮。四、程序框圖圖2-1 p1口亮燈實(shí)驗(yàn)程序框圖圖2-1 p1口
14、轉(zhuǎn)彎燈實(shí)驗(yàn)程序框圖五、實(shí)驗(yàn)電路圖2-3 P1口亮燈實(shí)驗(yàn)電路圖圖2-4 P1口轉(zhuǎn)彎燈實(shí)驗(yàn)電路圖六、實(shí)驗(yàn)步驟(1)P1口亮燈實(shí)驗(yàn):P1.O-P1.7用插針連至L1-L8,運(yùn)行程序后,觀察發(fā)光二極管閃亮移位情況。(2)P1口轉(zhuǎn)彎燈實(shí)驗(yàn):P1.0接K1 P1.1接K2 P1.4-P1.7接L1 L5 L9 L13連續(xù)運(yùn)行本程序,應(yīng)看到轉(zhuǎn)彎燈正確閃亮,在用單步方式調(diào)試本程序時(shí)需修改延時(shí)子程序,(例可把延時(shí)程序第一個(gè)字節(jié)改成返回指令22H),以便觀察。七、思考改變延時(shí)常數(shù),使發(fā)光二極管閃亮?xí)r間改變。修改程序,使發(fā)光二極管閃亮移位方向改變。實(shí)驗(yàn)4:?jiǎn)纹瑱C(jī)定時(shí)器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?#160;
15、0; 熟悉51定時(shí)/計(jì)數(shù)功能,掌握初始化編程方法。二、實(shí)驗(yàn)設(shè)備及器材計(jì)算機(jī)、實(shí)驗(yàn)箱或自制實(shí)驗(yàn)板三、實(shí)驗(yàn)內(nèi)容 把定時(shí)器0外部輸入的脈沖進(jìn)行計(jì)數(shù),并送顯示器顯示。四、程序框圖五、實(shí)驗(yàn)電路五、實(shí)驗(yàn)步驟 P3.4依次接T0-T7或單步脈沖輸出孔,執(zhí)行程序,觀察數(shù)碼管上計(jì)數(shù)脈沖的速度及個(gè)數(shù)。 實(shí)驗(yàn)5:?jiǎn)纹瑱C(jī)計(jì)數(shù)器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)51單片機(jī)內(nèi)部定時(shí)計(jì)數(shù)器使用方法。二、實(shí)驗(yàn)設(shè)備及器材計(jì)算機(jī)、實(shí)驗(yàn)箱或自制實(shí)驗(yàn)板三、實(shí)驗(yàn)內(nèi)容51單片機(jī)內(nèi)部定時(shí)計(jì)數(shù)器T0,按計(jì)數(shù)器模式工作于方式1,對(duì)P34(T0)引腳進(jìn)行計(jì)數(shù)
16、。將其數(shù)值按二進(jìn)制數(shù)在P1口驅(qū)動(dòng)LED燈上顯示出來(lái)。四、實(shí)驗(yàn)電路連線P10 - LED0 P11 - LED1 P12 - LED2 P13 - LED3 P14 - LED4 P15 - LED5 P16 - LED6P17 - LED7 - T0(P34)單次脈沖五、實(shí)驗(yàn)說(shuō)明本實(shí)驗(yàn)中內(nèi)部計(jì)數(shù)器起計(jì)數(shù)器的作用。外部事件計(jì)數(shù)脈沖由T0(P34)腳引入定時(shí)器T0。單片機(jī)在每個(gè)機(jī)器周期采樣一次輸入波形,因此單片機(jī)至少需要兩個(gè)機(jī)器周期才能檢測(cè)到一次跳變,這就要求被采樣電平至少維持一個(gè)完整的機(jī)器周期,以保證電平在變化之前即被采樣。同時(shí)這就決定了輸入波形的頻率不能超過(guò)機(jī)器周期頻率。開(kāi)始設(shè)置T0工作方式(
17、方式1、計(jì)數(shù)模式)開(kāi)始計(jì)數(shù)計(jì)數(shù),輸出計(jì)數(shù)值六、參考程序框圖實(shí)驗(yàn)6:?jiǎn)纹瑱C(jī)串行口實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握8051串行口方式0工作方式及編程方法。2.掌握利用串行口擴(kuò)展I/O通道的方法。二、實(shí)驗(yàn)設(shè)備及器材啟東單片機(jī)綜合實(shí)驗(yàn)箱,導(dǎo)線,數(shù)碼管,74ls164等。三、實(shí)驗(yàn)內(nèi)容利用8051串行口和串行輸入并行輸出移位寄存器74LS164,擴(kuò)展一個(gè)8位輸出通道,用于驅(qū)動(dòng)一個(gè)數(shù)碼顯示器,在數(shù)碼顯示器上循環(huán)顯示8031串行口輸出的09這10個(gè)數(shù)字。串行口工作在方式0時(shí),可通過(guò)外接移位存儲(chǔ)器實(shí)現(xiàn)串并行轉(zhuǎn)換。在這種方式下,數(shù)據(jù)為8位,只能從RXD端輸入輸出,TXD端總是輸出移位同步時(shí)鐘信號(hào),其波特 率固定為晶振頻率
18、1/12。由軟件置位串行控制寄存器(SCON)的REN后才能啟動(dòng)串行接收,在CPU將數(shù)據(jù)寫入SBUF寄存器后,立即啟動(dòng)發(fā)送。待8位數(shù)據(jù)輸完后,硬件將SCON寄存器的TI位置1,TI必須由軟件清零。四、實(shí)驗(yàn)線路五、 參考程序清單#include <kc_sfrs.h>#define LEDLen 6unsigned char volatile OUTBIT; / 位控制口unsigned char volatile OUTSEG; / 段控制口unsigned char volatile IN ; / 鍵盤讀入口#pragma locate(OUTBIT = 0x8002) / 定義
19、各端口的地址#pragma locate(OUTSEG = 0x8004)#pragma locate(IN = 0x8001)#pragma interrupt(Sio_int=0x200c)/ 定義串口中斷向量unsigned char LEDBufLEDLen; / 顯示緩沖unsigned char RCVBUF,HasRcv;unsigned char const LEDMAP = / 八段管顯示碼 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x7
20、1;void Delay(unsigned char CNT) unsigned char i; while (CNT- !=0) for (i=100; i !=0; i-);void DisplayLED() unsigned char i, j, k; unsigned char Pos; unsigned char LED; Pos = 0x20; / 從左邊開(kāi)始顯示 for (i = 0; i < LEDLen; i+) OUTBIT = 0; / 關(guān)所有八段管 LED = LEDBufi; OUTSEG = LED; OUTBIT = Pos; / 顯示一位八段管 Delay
21、(1); Pos >>= 1; / 顯示下一位 unsigned char const KeyTable = / 鍵碼定義 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, 0x0b, 0x0a, 0x0e, 0x03, 0x06, 0x09, 0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04, 0x07;unsigned char TestKey() OUTBIT = 0; / 輸出線置為0 return (IN & 0x0f); / 讀入鍵狀態(tài) (高四位不用)unsig
22、ned char GetKey() unsigned char Pos; unsigned char i; unsigned char j; unsigned char k; i = 6; Pos = 0x20; / 找出鍵所在列 do OUTBIT = Pos; Pos >>= 1; k = IN & 0x0f; while (-i != 0) && (k = 0); / 鍵值 = 列 X 4 + 行 if (k != 0) i *= 4; if (k & 2) i += 1; else if (k & 4) i += 2; else if
23、 (k & 8) i += 3; OUTBIT = 0; do Delay(10); while (TestKey(); / 等鍵釋放 return(KeyTablei); / 取出鍵碼 else return(0xff);void Sio_int() if(sp_stat & 0x40) / RI位是否為1? RCVBUF = sbuf_rx; HasRcv = 1; void main() ioc1 = 0x20; / P2.0設(shè)為TXD功能 sp_con = 0x09; / 串口模式1,允許接收 baud_rate = 0x9b; / 波特率 2400BPS 6MHz b
24、aud_rate = 0x80; int_mask1 = 0x00; / 禁止RI和TI中斷 int_mask = 0x40; / 允許串口中斷(0x200C) HasRcv = 0; LEDBuf0 = 0xff; LEDBuf1 = 0xff; LEDBuf2 = 0xff; LEDBuf3 = 0xff; LEDBuf4 = 0x00; LEDBuf5 = 0x00; enable() ; / 允許中斷 while (1) if(!HasRcv) DisplayLED(); / 顯示 if (TestKey() / 如果有鍵按下 sbuf_tx = GetKey(); / 則用串口輸出
25、else HasRcv = 0; / 已收到數(shù)據(jù) LEDBuf5 = LEDMAPRCVBUF & 0x0f; / 顯示低4位 LEDBuf4 = LEDMAPRCVBUF / 0x10; / 顯示高4位 實(shí)驗(yàn)7:工業(yè)順序控制實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆展I(yè)順序控制程序的簡(jiǎn)單編程,中斷的使用。二、實(shí)驗(yàn)預(yù)備知識(shí) 在工業(yè)控制中,象沖壓、注塑、輕紡、制瓶等生產(chǎn)過(guò)程,都是一些繼續(xù)生產(chǎn)過(guò)程,按某種順序有規(guī)律地完成預(yù)定的動(dòng)作,對(duì)這類繼續(xù)生產(chǎn)過(guò)程的控制稱順序控制,倒注塑機(jī)工藝過(guò)程大致按“合模注射延時(shí)開(kāi)模產(chǎn)伸產(chǎn)退”順序動(dòng)作,用單片機(jī)最易實(shí)現(xiàn)。三、實(shí)驗(yàn)內(nèi)容 8032P1.0-P1.6控制注塑機(jī)的七道工序,現(xiàn)模擬
26、控制七只發(fā)光二極管的點(diǎn)亮,低電平有效,設(shè)定每道工序時(shí)間轉(zhuǎn)換為延時(shí),P3.4為開(kāi)工啟動(dòng)開(kāi)關(guān),高電平啟動(dòng)。P3.3為外部故 障輸入模擬開(kāi)關(guān),低電平報(bào)警,P1.7為報(bào)警聲音輸出,設(shè)定6道工序只有一位輸出,第七道工序三位有輸出。四、程序框圖五、實(shí)驗(yàn)電路六、實(shí)驗(yàn)步驟按實(shí)驗(yàn)電路圖接好連線。執(zhí)行程序,把K1接到電平,觀察發(fā)光二極管點(diǎn)亮情況,確定工序執(zhí)行是否正常,然后把K2置為低電平,看是否有聲音報(bào)警,恢復(fù)中斷1,報(bào)警停,又從剛才報(bào)警時(shí)一道程序執(zhí)行下去??捎脝尾?、單步跟蹤,非全速斷點(diǎn)、全速斷點(diǎn)、連續(xù)執(zhí)行功能調(diào)試軟件,直到符合自己程序設(shè)計(jì)要求為止。實(shí)驗(yàn)8:8255PA口控制PB口、8255控制交通燈一、實(shí)驗(yàn)?zāi)康?/p>
27、掌握單片機(jī)系統(tǒng)中擴(kuò)展外圍芯片的方法,了解8255芯片的結(jié)構(gòu)及編程方法。二、實(shí)驗(yàn)內(nèi)容用8255PA口作開(kāi)關(guān)量輸入口,PB口作輸出口。(2)8255控制交通燈三、程序框圖(1) 8255Pa口控制PB口四、實(shí)驗(yàn)電路(1)8255Pa口控制PB口(2) 8255控制交通燈五、實(shí)驗(yàn)步驟(1)8255Pa口控制PB口:8255PA口接K1-K8,PB口接L1-L8運(yùn)行程序,按Kl-K8,觀察L1-L8發(fā)光二極管是否對(duì)應(yīng)點(diǎn)亮。(2) 8255控制交通燈8255PA0-PA7 PB0-PB3接發(fā)光二極管L15-L13、L11-L9、L7-L5、L3-L1。 執(zhí)行程序,初始狀態(tài)為四個(gè)路口的紅燈全亮之后,東西路
28、口的綠燈亮,南北路口的紅燈亮,東西路口方向通車,延時(shí)一段時(shí)間后東西路口的綠燈熄滅,黃燈開(kāi)始閃爍,閃爍若干次后,東西路口紅燈亮,而同時(shí)南北路口的綠燈亮,南北路口方向開(kāi)始通車,延時(shí)一段時(shí)間后,南北路口的綠燈熄滅,黃燈開(kāi)始閃爍,閃爍若干次后,再切換到東西路口方向,之后重復(fù)以上過(guò)程。實(shí)驗(yàn)9:?jiǎn)纹瑱C(jī)鍵盤輸入、數(shù)碼管顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆?1系統(tǒng)中鍵盤和顯示器的接口方法。掌握中斷的使用方法。了解c51的編輯,編譯方法。二、實(shí)驗(yàn)內(nèi)容(1)用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0P1.3作輸入線,以P1.4P1.7作輸出線;在數(shù)碼管上顯示每個(gè)按鍵的“0F”序號(hào)。(2)4×
29、4矩陣鍵盤識(shí)別處理:每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開(kāi)關(guān)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。三、程序清單#include <AT89X51.H> unsigned ch
30、ar code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char temp; unsigned char key; unsigned char i,j; void main(void) while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-);
31、 temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f;
32、60; P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break
33、; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; swi
34、tch(temp) case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>
35、0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=
36、P3; temp=temp & 0x0f; 實(shí)驗(yàn)10:?jiǎn)纹瑱C(jī)D/A轉(zhuǎn)換實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?1)了解D/A轉(zhuǎn)換與單片機(jī)的接口方法;(2)了解D/A轉(zhuǎn)換芯片0832的性能及編程方法:(3)了解單片機(jī)系統(tǒng)中擴(kuò)展D/A轉(zhuǎn)換芯片的基本方法。二、實(shí)驗(yàn)內(nèi)容 利用0832輸出一個(gè)從0V開(kāi)始逐漸升至5V再降至0V的電壓,數(shù)碼管顯示送入的數(shù)字量值。三、程序框圖四、實(shí)驗(yàn)電路五、實(shí)驗(yàn)步驟 把0832譯碼線0832CS接至FFE0孔運(yùn)行程序,數(shù)碼管顯示不斷加大或減小的數(shù)字量,用萬(wàn)用表測(cè)試D/A輸出孔AOUT應(yīng)也能測(cè)出不斷加大或減小的電壓值。六、思考 修改程序,使能產(chǎn)生鋸齒被。實(shí)驗(yàn)11:?jiǎn)纹瑱C(jī)總線控制1602液晶一
37、、實(shí)驗(yàn)?zāi)康?.掌握單片機(jī)的總線功能和時(shí)序;2.掌握1602液晶的顯示原理;二、實(shí)驗(yàn)設(shè)備及器材自制開(kāi)發(fā)板,自制下載線,1602液晶屏等 三、實(shí)驗(yàn)內(nèi)容用總線方式實(shí)現(xiàn)單片機(jī)對(duì)1602液晶的控制,能夠用液晶屏顯示一串字符串,掌握ASCII碼表和液晶顯示的對(duì)照。四、實(shí)驗(yàn)線路總線控制液晶電路圖五、 參考程序清單#include<reg51.h>#include<stdio.h>#include<stdlib.h> #include<intrins.h>#include<absacc.h>#define busy 0x80 file:/用于檢測(cè)LC
38、D狀態(tài)字中的Busy標(biāo)識(shí)#define RSaddr 0x1000#define RWaddr 0x2000#define CSaddr 0x0400#define wc 0xcfff#define wd 0xdfff#define rc 0xefffunsigned char code homepage = "99999999999"unsigned char code email = "99999999999"void delay5ms(void) unsigned int TempCyc = 5552; while
39、(TempCyc-); void delay400ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-); void waitLcd() char temp; bit flag=1; while(flag=1)
40、60; temp=XBYTErc; if (temp>>7=0) flag=0; P1=temp; P1=0xff; void WC_Lcd(bit isCheck,char c) if (isCheck=1) waitLcd(); XBYTEwc=c; void WD_Lcd(char c) waitLcd(); XBYTEwd=
41、c; void LcdInit() delay5ms(); delay5ms(); delay5ms(); WC_Lcd(0,0x38); delay5ms(); WC_Lcd(0,0x38); delay5ms(); WC_Lcd(0,0x38); delay5ms(); WC_Lcd(1,0x38); WC_Lcd(1,0x08); WC_Lcd(1,0x01); WC_L
42、cd(1,0x06); / 顯示光標(biāo)移動(dòng)設(shè)置 WC_Lcd(1,0x0C); / 顯示開(kāi)及光標(biāo)設(shè)置 void displayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1; X &= 0xF; if (Y) X |= 0x40; X |= 0x80; WC_Lcd(0,X); WD_Lcd(DData);void displayL
43、istChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; while (DDataListLength>0x20) if (X <= 0xF) display
44、OneChar(X, Y, DDataListLength); ListLength+; X+; void main(void) delay400ms(); LcdInit(); displayListChar(0, 0, homepage); displayListChar(0, 1, email); while(1); 實(shí)驗(yàn)12:?jiǎn)纹瑱C(jī)設(shè)計(jì)簡(jiǎn)易計(jì)算器一、實(shí)驗(yàn)?zāi)康?.初步嘗試運(yùn)用單片機(jī)進(jìn)行系統(tǒng)設(shè)計(jì);2.掌握矩陣鍵盤的中斷掃描顯示;3.掌握
45、液晶或數(shù)碼管的動(dòng)態(tài)顯示。二、實(shí)驗(yàn)設(shè)備及器材自制開(kāi)發(fā)板,自制下載線,1602液晶屏,共陰極數(shù)碼管等三、實(shí)驗(yàn)內(nèi)容運(yùn)用4*4鍵盤進(jìn)行數(shù)據(jù)的輸入,運(yùn)用1602液晶或數(shù)碼管進(jìn)行顯示;要求有等號(hào)鍵和算法切換鍵;能夠?qū)崿F(xiàn)1+1=2的按鍵顯示,并實(shí)現(xiàn)加法,減法和乘除法之間的切換。若時(shí)間允許可以加上萬(wàn)年歷的拓展功能。四、實(shí)驗(yàn)線路 實(shí)驗(yàn)開(kāi)發(fā)板電路圖五、 參考程序清單#include<reg52.h> #include<stdio.h> /輸入輸出等#include<stdlib.h> /#include<intrins.h> /左移右移空操作等#include<absacc.h> /用戶直接訪問(wèn)不同的存儲(chǔ)區(qū)域#define uchar unsigned char#define uint unsigned int#define uchar unsigned char#
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026江蘇南京大學(xué)化學(xué)學(xué)院科研人員招聘?jìng)淇碱}庫(kù)附答案詳解(滿分必刷)
- 2026年叉車安全知識(shí)考試題庫(kù)及一套答案
- 2026年叉車寶典考試題庫(kù)及答案一套
- 2026年叉車崗位實(shí)操考試題庫(kù)及一套答案
- 2026年叉車工崗位考試題庫(kù)及完整答案一套
- 2026年叉車技能考試題庫(kù)及一套答案
- 2026年叉車操作工考試題庫(kù)及參考答案
- 2026年叉車電梯培訓(xùn)考試題庫(kù)及完整答案一套
- 2026年叉車考試題庫(kù)科目一帶答案
- 2026年雷州考叉車培訓(xùn)考試題庫(kù)帶答案
- 挖機(jī)、裝載機(jī)三級(jí)安全教育試卷(附答案)
- 人機(jī)共智?創(chuàng)變未來(lái):千夢(mèng)引擎AI內(nèi)容營(yíng)銷白皮書(shū)
- 2026年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)帶電作業(yè)機(jī)器人行業(yè)市場(chǎng)需求預(yù)測(cè)及投資規(guī)劃建議報(bào)告
- 2026年杭州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案解析
- 四川省瀘州市2025-2026學(xué)年高一上學(xué)期期末質(zhì)量監(jiān)測(cè)數(shù)學(xué)試題(含答案)
- 北京市豐臺(tái)區(qū)2026屆(年)高三年級(jí)(上)學(xué)期期末考試英語(yǔ)試題卷+答案
- 合伙公司退股協(xié)議書(shū)
- Ozon培訓(xùn)課件教學(xué)課件
- 2025年民航概論試題及答案判斷
- 46566-2025溫室氣體管理體系管理手冊(cè)
- 2023-2025年浙江中考數(shù)學(xué)試題分類匯編:概率與統(tǒng)計(jì)(解析版)
評(píng)論
0/150
提交評(píng)論