![任務(wù)3-按鍵計(jì)分模塊_第1頁(yè)](http://file4.renrendoc.com/view/e60533029b71631fd8ac1251d384975b/e60533029b71631fd8ac1251d384975b1.gif)
![任務(wù)3-按鍵計(jì)分模塊_第2頁(yè)](http://file4.renrendoc.com/view/e60533029b71631fd8ac1251d384975b/e60533029b71631fd8ac1251d384975b2.gif)
![任務(wù)3-按鍵計(jì)分模塊_第3頁(yè)](http://file4.renrendoc.com/view/e60533029b71631fd8ac1251d384975b/e60533029b71631fd8ac1251d384975b3.gif)
![任務(wù)3-按鍵計(jì)分模塊_第4頁(yè)](http://file4.renrendoc.com/view/e60533029b71631fd8ac1251d384975b/e60533029b71631fd8ac1251d384975b4.gif)
![任務(wù)3-按鍵計(jì)分模塊_第5頁(yè)](http://file4.renrendoc.com/view/e60533029b71631fd8ac1251d384975b/e60533029b71631fd8ac1251d384975b5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)習(xí)情境2籃球計(jì)時(shí)計(jì)分控制系統(tǒng)的設(shè)計(jì)任務(wù)3按鍵計(jì)分模塊籃球計(jì)時(shí)計(jì)分控制系統(tǒng)中實(shí)時(shí)記錄兩隊(duì)的比分是系統(tǒng)的主要功能之一,正式的系統(tǒng)還會(huì)記錄每一個(gè)對(duì)員的得分情況。在本任務(wù)中,我們把功能簡(jiǎn)化,只記錄兩隊(duì)的得分。同時(shí),由于比賽時(shí)兩隊(duì)都會(huì)得分,所以需要按鍵,計(jì)時(shí)員通過(guò)按鍵來(lái)改變兩隊(duì)的得分情況。任務(wù)設(shè)計(jì)要求和設(shè)計(jì)原理最后我們?cè)O(shè)計(jì)籃球控制系統(tǒng)中按鍵計(jì)分模塊的設(shè)計(jì),本模塊主要包括各種按鍵的處理、以及分?jǐn)?shù)顯示模塊。根據(jù)籃球比賽的特點(diǎn),設(shè)計(jì)時(shí)使用了6個(gè)數(shù)碼管,用來(lái)實(shí)時(shí)顯示籃球比賽時(shí)兩個(gè)參賽隊(duì)伍的得分情況。比賽時(shí)比分的增減通過(guò)按鍵來(lái)實(shí)現(xiàn),設(shè)計(jì)了6個(gè)加分按鍵,分別為+1分、+2分、和+3分的按鍵,計(jì)時(shí)員難免會(huì)按錯(cuò)按鍵,所以還設(shè)計(jì)了兩個(gè)減分按鍵。為了和前面幾個(gè)任務(wù)的按鍵統(tǒng)一起來(lái),本任務(wù)的按鍵使用了矩陣鍵盤(pán)按鍵。硬件電路設(shè)計(jì)和前一任務(wù)的硬件電路比較,本任務(wù)除單片機(jī)最小系統(tǒng)電路之外,電路也是由按鍵電路和數(shù)碼顯示電路組成。按鍵電路由矩陣鍵盤(pán)電路構(gòu)成。數(shù)碼顯示電路則由2個(gè)三位一體的數(shù)碼管組成。具體電路如下圖所示:圖3-1按鍵計(jì)分模塊軟件設(shè)計(jì)在軟件設(shè)計(jì)方面,在這個(gè)電路模塊里,主要是矩陣鍵盤(pán)處理子程序的設(shè)計(jì)和數(shù)碼顯示模塊的設(shè)計(jì)。而其中的關(guān)鍵就是矩陣鍵盤(pán)處理子程序的設(shè)計(jì),其具體設(shè)計(jì)思想為:利用線(xiàn)掃描法得到健值,再利用得到的按鍵值進(jìn)行相應(yīng)的加分和減分程序的設(shè)計(jì)。線(xiàn)翻轉(zhuǎn)掃描法的具體思路為:先給行線(xiàn)(P1.4-P1.7)置零,低4位置1,即P1=0X0F;此時(shí)按鍵后,低4位的4個(gè)1中必有1個(gè)為0,其余的3個(gè)仍然為1。如,P1=00001111B,假設(shè)按下了5號(hào)?。ǜ鶕?jù)電路圖,5號(hào)鍵在P1.1所在列)。則P1=00001101B;然后我們可以利用異或指令得到列的鍵值,存放在一個(gè)變量Key_Num中,如P1和0X0F異或運(yùn)算后得:00000010,此時(shí)我們可以讓Key_Num=1;其次,給列線(xiàn)(P1.0-P1.3)置零,高4位置1,即P1=0XF0;按鍵后,高4位的4個(gè)1中必有一個(gè)為0,其余的3個(gè)仍為1,如,P1=11110000B,剛才按下5號(hào)鍵,則P1=11010000B(根據(jù)電路圖,5號(hào)鍵在P1.1所在列),為得到鍵的行值,需把P1向低位移4位得到P1=00001101,然后P1和0x0f進(jìn)行異或運(yùn)算,得到00000010,此時(shí)我們可以讓Key_Num=4,最后把行值和列值相加得到鍵值,Key_Num=4。下面為具體的矩陣鍵盤(pán)掃描程序:/*矩陣鍵盤(pán)掃描子程序*/voidKey_Scan(){ucharkey_temp; P1=0x0f; //高4位置1,放入4行 delay(1); //按鍵后00001111將變成0000XXXX,X中有1個(gè)為0,其余3個(gè)仍能為1. key_temp=P1^0x0f;//判斷按鍵發(fā)生在0~3列中的哪一列。 switch(key_temp) { case1:Key_Num=0;break; case2:Key_Num=1;break; case4:Key_Num=2;break; case8:Key_Num=3;break; default:Key_Num=16;//說(shuō)明沒(méi)有按鍵按下 } P1=0xf0;//低四位置零,放入四列 delay(1); //按鍵后11110000將變成XXXX0000,X中有1個(gè)為0,其余3個(gè)仍能為1. key_temp=P1>>4^0x0f;//將高4位移到低4位,并將其中唯一的0變?yōu)?,其余為0 switch(key_temp) { case1:Key_Num+=0;break; //對(duì)0~3行分別附加起始值0,4,8,12 case2:Key_Num+=4;break; case4:Key_Num+=8;break; case8:Key_Num+=12; }}得到了鍵值后,可以根據(jù)鍵值設(shè)計(jì)加分和減分程序,具體設(shè)計(jì)如下:/*加分按鍵處理子程序*/voidAdd_point(){//bitkey; Key_Scan(); switch(Key_Num){ case12:delay(200); if(Key_Num==12) {game_point1++; } break; case13:delay(200); if(Key_Num==13) {game_point1=game_point1+2;} break; case14:delay(200); if(Key_Num==14) {game_point1+=3; } break; case10:delay(200); if(Key_Num==10) {game_point2++;} break; case11:delay(200); if(Key_Num==11) {game_point2+=2;} break; case15:delay(200); if(Key_Num==15) {game_point2+=3;} break; }}/*減分按鍵處理子程序*/voidDec_point(){ Key_Scan(); switch(Key_Num) { case8:delay(200); if(Key_Num==8) {game_point1--;} break; case9:delay(200); if(Key_Num==9) {game_point2--;} break; }}數(shù)碼顯示模塊的設(shè)計(jì)相對(duì)較簡(jiǎn)單。設(shè)計(jì)時(shí)采用了動(dòng)態(tài)顯示技術(shù),編程時(shí)主要注意字形碼的輸入和位選碼的輸入。需要考慮硬件電路的連接情況。具體程序如下所示:/*顯示子程序*/voidDisplay(){ intj; ucharGroup1_ge,Group1_shi,Group1_bai,Group2_ge,Group2_shi,Group2_bai; Group1_bai=game_point1/100; Group1_shi=game_point1%100/10; Group1_ge=game_point1%100%10; Group2_bai=game_point2/100; Group2_shi=game_point2%100/10; Group2_ge=game_point2%100%10; for(j=0;j<10;j++) { P2=0x0f;//位選,選中百位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group1_bai];//段選,把百位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x01;//位選,選中十位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group1_shi];//段選,把十位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x02;//位選,選中個(gè)位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group1_ge];//段選,把個(gè)位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x03;//位選,選中百位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group2_bai];//段選,把百位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x04;//位選,選中十位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group2_shi];//段選,把十位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x05;//位選,選中個(gè)位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group2_ge];//段選,把個(gè)位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); }}除此之外,還有延時(shí)子程序(此處略),可用于按鍵消抖,動(dòng)態(tài)顯示等,為使主程序結(jié)構(gòu)簡(jiǎn)單,我們把一些變量的初值賦予工作全部放在初始化程序里。這兩個(gè)程序的具體設(shè)計(jì)如下所示:/*初始化子程序*/voidInitialization(){game_point1=100; game_point2=100; }小貼士:小貼士:表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句是最基本的一種語(yǔ)句。不同的程序設(shè)計(jì)語(yǔ)言都會(huì)有不一樣的表達(dá)式語(yǔ)句,如VB就是在表達(dá)式后面加入回車(chē)就構(gòu)成了VB的表達(dá)式語(yǔ)句,而在51單片機(jī)的C語(yǔ)言中則是加入分號(hào)“;”構(gòu)成表達(dá)式語(yǔ)句。舉例如下:b=b*10;Count++;X=A;Y=B;Page=(a+b)/a-1;以上的都是合法的表達(dá)式語(yǔ)句。在C語(yǔ)言中有一個(gè)特殊的表達(dá)式語(yǔ)句,稱(chēng)為空語(yǔ)句,它僅僅是由一個(gè)分號(hào)“;”組成。有時(shí)候?yàn)榱耸拐Z(yǔ)法正確,那么就要求有一個(gè)語(yǔ)句,但這個(gè)語(yǔ)句又沒(méi)有實(shí)際的運(yùn)行效果那么這時(shí)就要有一個(gè)空語(yǔ)句??照Z(yǔ)句通常用會(huì)以下兩種用法。(1)while,for構(gòu)成的循環(huán)語(yǔ)句后面加一個(gè)分號(hào),形成一個(gè)不執(zhí)行其它操作的空循環(huán)體。我們可以用它來(lái)寫(xiě)等待事件發(fā)生的程序。大家要注意的是“;”號(hào)作為空語(yǔ)句使用時(shí),要與語(yǔ)句中有效組成部分的分號(hào)相區(qū)分,如for(;a<50000;a++);第一個(gè)分號(hào)也應(yīng)該算是空語(yǔ)句,它會(huì)使a賦值為0(但要注意的是如程序前有a值,則a的初值為a的當(dāng)前值),最后一個(gè)分號(hào)則使整個(gè)語(yǔ)句行成一個(gè)空循環(huán)。若此時(shí)a=0,那么for(;a<50000;a++);就相當(dāng)于for(a=0;a<50000;a++);(2)在程序中為有關(guān)語(yǔ)句提供標(biāo)號(hào),標(biāo)記程序執(zhí)行的位置,使相關(guān)語(yǔ)句能跳轉(zhuǎn)到要執(zhí)行的位置。這會(huì)用在goto語(yǔ)句中。復(fù)合語(yǔ)句和條件語(yǔ)句在C語(yǔ)言中是有不少的括號(hào),如{},[],()等,確實(shí)會(huì)讓一些初入門(mén)的朋友不解。在VB等一些語(yǔ)言中同一個(gè)()號(hào)會(huì)有不同的作用,它可以用于組合若干條語(yǔ)句形成功能塊,可以用做數(shù)組的下標(biāo)等,而在C中括號(hào)的分工較為明顯,{}號(hào)是用于將若干條語(yǔ)句組合在一起形成一種功能塊,這種由若干條語(yǔ)句組合而成的語(yǔ)句就叫復(fù)合語(yǔ)句。復(fù)合語(yǔ)句之間用{}分隔,而它內(nèi)部的各條語(yǔ)句還是需要以分號(hào)“;”結(jié)束。復(fù)合語(yǔ)句是允許嵌套的,也是就是在{}中的{}也是復(fù)合語(yǔ)句。復(fù)合語(yǔ)句在程序運(yùn)行時(shí),{}中的各行單語(yǔ)句是依次順序執(zhí)行的。C語(yǔ)言中可以將復(fù)合語(yǔ)句視為一條單語(yǔ)句,也就是說(shuō)在語(yǔ)法上等同于一條單語(yǔ)句。對(duì)于一個(gè)函數(shù)而言,函數(shù)體就是一個(gè)復(fù)合語(yǔ)句,也許大家會(huì)因此知道復(fù)合語(yǔ)句中不單可以用可執(zhí)行語(yǔ)句組成,還可以用變量定義語(yǔ)句組成。要注意的是在復(fù)合語(yǔ)句中所定義的變量,稱(chēng)為局部變量,所謂局部變量就是指它的有效范圍只在復(fù)合語(yǔ)句中,而函數(shù)也算是復(fù)合語(yǔ)句,所以函數(shù)內(nèi)定義的變量有效范圍也只在函數(shù)內(nèi)部。下面用一段簡(jiǎn)單的例子簡(jiǎn)單說(shuō)明復(fù)合語(yǔ)句和局部變量的使用。#include<at89x51.h>#include<stdio.h>voidmain(void){unsignedinta,b,c,d;//這個(gè)定義會(huì)在整個(gè)main函數(shù)中?SCON=0x50;//串口方式1,允許接收TMOD=0x20;//定時(shí)器1定時(shí)方式2TH1=0xE8;//11.0592MHz1200波特率TL1=0xE8;TI=1;TR1=1;//啟動(dòng)定時(shí)器a=5;b=6;c=7;d=8;//這會(huì)在整個(gè)函數(shù)有效printf("0:%d,%d,%d,%d\n",a,b,c,d);{//復(fù)合語(yǔ)句1unsignedinta,e;//只在復(fù)合語(yǔ)句1中有效a=10,e=100;printf("1:%d,%d,%d,%d,%d\n",a,b,c,d,e);{//復(fù)合語(yǔ)句2unsignedintb,f;//只在復(fù)合語(yǔ)句2中有效b=11,f=200;printf("2:%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f);}//復(fù)合語(yǔ)句2結(jié)束printf("1:%d,%d,%d,%d,%d\n",a,b,c,d,e);}//復(fù)合語(yǔ)句1結(jié)束printf("0:%d,%d,%d,%d\n",a,b,c,d);while(1);}運(yùn)行結(jié)果:0:5,6,7,81:10,6,7,8,1002:10,11,7,8,100,2001:10,6,7,8,1000:5,6,7,8通過(guò)前面的學(xué)習(xí)我們對(duì)條件語(yǔ)句這個(gè)概念有了一定的認(rèn)識(shí)吧?是的,就如學(xué)習(xí)語(yǔ)文中的條件語(yǔ)句一樣,C語(yǔ)言也一樣是“如果XX就XX”或是“如果XX就XX否則XX”。也就是當(dāng)條件符合時(shí)就執(zhí)行語(yǔ)句。條件語(yǔ)句又被稱(chēng)為分支語(yǔ)句,也有人會(huì)稱(chēng)為判斷語(yǔ)句,其關(guān)鍵字是由if構(gòu)成,這和大多數(shù)的高級(jí)語(yǔ)言中都是基本相同的。C語(yǔ)言提供了3種形式的條件語(yǔ)句:1、if(條件表達(dá)式)語(yǔ)句當(dāng)條件表達(dá)式的結(jié)果為真時(shí),就執(zhí)行語(yǔ)句,否則就跳過(guò)。如if(a==b)a++;當(dāng)a等于b時(shí),a就加12、if(條件表達(dá)式)語(yǔ)句1else語(yǔ)句2當(dāng)條件表達(dá)式成立時(shí),就執(zhí)行語(yǔ)句1,否則就執(zhí)行語(yǔ)句2。如if(a==b)a++;elsea--;當(dāng)a等于b時(shí),a加1,否則a-1。3、if(條件表達(dá)式1)語(yǔ)句1elseif(條件表達(dá)式2)語(yǔ)句2elseif(條件表達(dá)式3)語(yǔ)句3elseif(條件表達(dá)式m)語(yǔ)句nelse語(yǔ)句m。這是由ifelse語(yǔ)句組成的嵌套,用來(lái)實(shí)現(xiàn)多方向條件分支,使用應(yīng)注意if和else的配對(duì)使用,要是少了一個(gè)就會(huì)語(yǔ)法出錯(cuò),記住else總是與最臨近的if相配對(duì)。一般條件語(yǔ)句只會(huì)用作單一條件或少數(shù)量的分支,如果多數(shù)量的分支時(shí)則更多的會(huì)用到開(kāi)關(guān)語(yǔ)句。如果使用條件語(yǔ)句來(lái)編寫(xiě)超過(guò)3個(gè)以上的分支程序的話(huà),會(huì)使程序變得不是那么清晰易讀。3.4軟件硬件的仿真調(diào)試1、首先利用ISIS-Professional軟件設(shè)計(jì)好硬件電路圖。2、其次,利用KEIL軟件建立工程項(xiàng)目,把用C語(yǔ)言編好的程序通過(guò)該軟件平臺(tái)進(jìn)行編譯,直至把C程序修改無(wú)錯(cuò)誤為止,并生成HEX文件。3、在ISIS-Professional軟件平臺(tái)下導(dǎo)入由KEIL軟件生成的HEX文件,進(jìn)行仿真,仔細(xì)觀察產(chǎn)生的現(xiàn)象和效果,根據(jù)仿真的效果,邊修改邊調(diào)試,直到仿真效果與我們對(duì)項(xiàng)目的要求一致為止。至此,我們分別設(shè)計(jì)好了計(jì)時(shí)模塊(24秒計(jì)時(shí)和單節(jié)時(shí)間計(jì)時(shí))和計(jì)分模塊,把各個(gè)模塊綜合起來(lái)就構(gòu)成了籃球計(jì)時(shí)計(jì)分控制系統(tǒng)。因?yàn)楦鱾€(gè)子模塊都經(jīng)過(guò)了調(diào)試,軟件和硬件都沒(méi)有什么問(wèn)題,在整合這些子模塊時(shí)只需做些簡(jiǎn)單的修改。3.5知識(shí)拓展-MCS-51單片機(jī)擴(kuò)展存儲(chǔ)器(二)程序存儲(chǔ)器的擴(kuò)展MCS-51的程序存儲(chǔ)器尋址空間為64KB,其中片內(nèi)包含4K的ROM/EPROM。當(dāng)片內(nèi)ROM不夠而需要擴(kuò)展程序存儲(chǔ)器時(shí),MCS-51的EA管腳應(yīng)接地。可用紫外線(xiàn)擦除、由電編程的只讀存儲(chǔ)器EPROM芯片常用作MCS-51應(yīng)用系統(tǒng)的外部程序存儲(chǔ)器。常用的EPROM芯片有2716、2732、2764、27128、27256、27512等,這些芯片的窗口在專(zhuān)門(mén)的紫外線(xiàn)燈光照射下,經(jīng)20min后,存儲(chǔ)器所有單元的信息全部變?yōu)?,從而擦去了程序指令代碼。用戶(hù)可用專(zhuān)門(mén)的EPROM編程(寫(xiě)入)電路將程序固化在這些EPROM芯片之中。一、外部程序存儲(chǔ)器擴(kuò)展概述目前單片機(jī)有ROM型、EPROM型和無(wú)ROM型芯片。不管使用哪種芯片,當(dāng)片內(nèi)程序存儲(chǔ)器容量滿(mǎn)足不了要求時(shí),均需進(jìn)行系統(tǒng)擴(kuò)展。擴(kuò)展時(shí)要注意以下幾點(diǎn):(1)程序存儲(chǔ)器有單獨(dú)的地址編號(hào)(0000H~FFFFH),可尋址64KB范圍。雖然與數(shù)據(jù)存儲(chǔ)器地址重疊,但不會(huì)被占用。程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器共用地址總線(xiàn)和數(shù)據(jù)總線(xiàn)。(2)對(duì)片內(nèi)有ROM(EPROM)的單片機(jī),片內(nèi)EPROM與片外EPROM采用相同的操作指令,片內(nèi)與片外程序存儲(chǔ)器的選擇靠硬件結(jié)構(gòu)實(shí)現(xiàn),即由的高低電平來(lái)選擇。(3)程序存儲(chǔ)器使用單獨(dú)的控制信號(hào)和指令,其數(shù)據(jù)讀取控制及指令不用數(shù)據(jù)存儲(chǔ)器的信號(hào)和MOVX指令,而是由控制,讀取數(shù)據(jù)用MOVC查表指令。(4)隨著大規(guī)模集成電路的發(fā)展,單片程序存儲(chǔ)器的容量越來(lái)越大,構(gòu)成系統(tǒng)時(shí)所使用的EPROM芯片數(shù)量越來(lái)越少,因此地址選擇大多采用線(xiàn)選法,而不用地址譯碼法。MCS-51系列單片機(jī)外部EPROM擴(kuò)展原理如圖3-2所示。圖3-2外部EPROM擴(kuò)展原理由圖可見(jiàn),P0口和P2口提供16位地址碼。其中P0口作為分時(shí)復(fù)用的地址/數(shù)據(jù)總線(xiàn)。當(dāng)從外部EPROM取指令時(shí),從P0口輸出低8位地址,由ALE地址鎖存允許信號(hào)的下降沿將低8位地址碼打入地址鎖存器,它的輸出與存儲(chǔ)器的低8位地址A7~A0相連。存儲(chǔ)器的8位數(shù)據(jù)線(xiàn)D7~D0與P0口相連,以便輸入讀取的指令代碼。在一個(gè)只讀存儲(chǔ)器讀周期中,P0口前半周期輸出低8位地址碼,后半周期輸入讀取的指令代碼。由P2口輸出高8位地址碼。由于P2口輸出由鎖存功能,而且在整個(gè)讀指令周期內(nèi)不作它用,故直接與存儲(chǔ)器的高8位地址A15~A8相連。主機(jī)的為外部程序存儲(chǔ)器選通信號(hào),它與存儲(chǔ)器的(指令代碼輸出選通)信號(hào)相連。EPROM芯片的片選端如何連接,與單片機(jī)系統(tǒng)的地址分配和硬件結(jié)構(gòu)有關(guān)??梢灾苯咏拥?;可以與P2口某位以線(xiàn)選法直接將來(lái);也可以通過(guò)譯碼器的輸出進(jìn)行相連,應(yīng)視具體設(shè)計(jì)情況而定。目前常用于單片機(jī)的程序存儲(chǔ)器為紫外線(xiàn)可擦除的只讀存儲(chǔ)器EPROM,這種存儲(chǔ)器在斷電狀態(tài)下能保存所寫(xiě)入的數(shù)據(jù),在需要寫(xiě)入新程序代碼之前,需要使用紫外線(xiàn)對(duì)芯片上石英玻璃窗口進(jìn)行光照,將原有程序擦除,再寫(xiě)入新程序即可。需要說(shuō)明的是,對(duì)于EPROM型的存儲(chǔ)器,要寫(xiě)入程序數(shù)據(jù)時(shí),應(yīng)使用專(zhuān)門(mén)的寫(xiě)入器。這類(lèi)芯片在單片機(jī)應(yīng)用系統(tǒng)中以2716、2732、2764、27128、27256使用較多。二、8051/8751的程序存儲(chǔ)器擴(kuò)展8051/8751是片內(nèi)有ROM/EPROM的供應(yīng)狀態(tài)。一般來(lái)說(shuō),采用8051/8751的單片機(jī)應(yīng)用系統(tǒng)中,很少再用到外部程序存儲(chǔ)器擴(kuò)展,這是因?yàn)橥瑫r(shí)使用片內(nèi)、片外程序存儲(chǔ)器時(shí)會(huì)失去選用8051/8751的優(yōu)點(diǎn),不如轉(zhuǎn)而采用單純的外部程序存儲(chǔ)器的8031應(yīng)用系統(tǒng)。8051/8751外部擴(kuò)展4kEPROM程序存儲(chǔ)器的應(yīng)用系統(tǒng)如圖3-3所示。在有外部程序存儲(chǔ)器的8051/8751系統(tǒng)中,程序存儲(chǔ)器的選擇線(xiàn)的輸入電平會(huì)影響程序存儲(chǔ)器的結(jié)構(gòu)。當(dāng)圖中為高電平時(shí),該系統(tǒng)具有8K字節(jié)程序存儲(chǔ)器。8051/8751內(nèi)部4k字節(jié)ROM/EPROM程序存儲(chǔ)器地址為0000H~0FFFH;外部4k字節(jié)2732EPROM程序存儲(chǔ)器地址為1000H~1FFFH。當(dāng)程序計(jì)數(shù)器PC值在0000H~0FFFH時(shí),指向片內(nèi)程序存儲(chǔ)器,當(dāng)PC值大于0FFFH時(shí),則指向片外程序存儲(chǔ)器。當(dāng)為低電平時(shí),8051/8751內(nèi)部程序存儲(chǔ)器無(wú)效,系統(tǒng)只有外部程序存儲(chǔ)器4k字節(jié),其地址為0000H~0FFFH。此時(shí),8051/8751相當(dāng)于8031。圖3-3擴(kuò)展4k字節(jié)EPROM的8051/8751三、8031的程序存儲(chǔ)器擴(kuò)展圖3-4為使用一片EPROM27256和鎖存器74LS373構(gòu)成的8031程序存儲(chǔ)器擴(kuò)展電路。圖中8031的無(wú)關(guān)電路部分均未畫(huà)出。圖3-4一片27256的EPROM的擴(kuò)展電路對(duì)于需要較大程序存儲(chǔ)器容量的單片機(jī)應(yīng)用系統(tǒng)則要進(jìn)行片外存儲(chǔ)器的進(jìn)一步擴(kuò)展。擴(kuò)展時(shí),可以采用多個(gè)小容量存儲(chǔ)芯片組合擴(kuò)展方式或者直接選用大容量存儲(chǔ)芯片進(jìn)行擴(kuò)展。接下來(lái)我們結(jié)合單片機(jī)時(shí)序圖簡(jiǎn)單分析擴(kuò)展電路的工作原理。圖3-5存儲(chǔ)器擴(kuò)展時(shí)單片機(jī)引腳時(shí)序圖單片機(jī)取指令是各個(gè)部件相互協(xié)調(diào)工作的一個(gè)過(guò)程.主要是以下幾步.第一步,送16位地址,指明要取的指令的存放位置。高8位地址通過(guò)P2送到27256的A8-A14和片選端\CE。低8位地址由P0口提供,是通過(guò)373連接到27256的A7-A0上的。這里要注意:高8位地址是由A8-A14和片選端\CE共同組成的。片選端\CE為最高位。真正的地址范圍為0000H-7FFFH.第二步,等待ALE第一次有效(高電平)。此時(shí),373通道被打開(kāi),低8位地址被送入A7-A0。與此同時(shí),\PSEN為高電平,因此27256的數(shù)據(jù)輸出端還未打開(kāi),即數(shù)據(jù)沒(méi)有送出。第三步,ALE出現(xiàn)下降沿。此時(shí),373的門(mén)被關(guān)?。ㄦi存數(shù)據(jù)),與此同時(shí),\PSEN出現(xiàn)低電平,27256的數(shù)據(jù)輸出端被打開(kāi),要取的指令代碼通過(guò)O0-O7端口送入數(shù)據(jù)總線(xiàn)。第四步,ALE第二次有效,此時(shí),總線(xiàn)上的代碼通過(guò)P0口讀入單片機(jī)。雖然此時(shí)373被打開(kāi),但是由于此時(shí)\PSEN為高電平,把27256關(guān)掉了。因此,即使剛才的代碼通過(guò)373被送到A7-A0,也不會(huì)送入27256中。附錄:完整程序代碼#include<reg51.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint/*數(shù)碼管顯示代碼*/ucharcodeshuma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF};//共陽(yáng)//ucharcodeshuma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//共陰ucharKey_Num=16;uchark_count,s_count;sbitattack_pause=P3^1;// 暫停按鍵K2sbitset_point=P3^3;bitk2,k4,ka,kb;//定義一些標(biāo)志位uintgame_point1,game_point2;//比賽比分變量/*子程序聲明*/voiddelay(uintK);//延時(shí)子程序voidDisplay();//顯示子程序voidInitialization();//初始化子程序voidKey_Scan();//矩陣鍵盤(pán)掃描子程序voidAdd_point(); // 加分按鍵處理子程序voidDec_point();//減分按鍵處理子程序//*主程序*/voidmain(void){Initialization();while(1) { Display();//顯示子程序 Key_Scan(); // 矩陣鍵盤(pán)掃描子程序 Add_point(); // 加分按鍵處理子程序 Dec_point(); //減分按鍵處理子程序 } }/*延時(shí)子程序*/voiddelay(uintK){uinti,j;for(i=K;i>0;i--)for(j=120;j>0;j--);}/*顯示子程序*/voidDisplay(){ intj; ucharGroup1_ge,Group1_shi,Group1_bai,Group2_ge,Group2_shi,Group2_bai; Group1_bai=game_point1/100; Group1_shi=game_point1%100/10; Group1_ge=game_point1%100%10; Group2_bai=game_point2/100; Group2_shi=game_point2%100/10; Group2_ge=game_point2%100%10; for(j=0;j<10;j++) { P2=0x0f;//位選,選中百位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group1_bai];//段選,把百位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x01;//位選,選中十位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group1_shi];//段選,把十位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x02;//位選,選中個(gè)位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group1_ge];//段選,把個(gè)位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x03;//位選,選中百位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group2_bai];//段選,把百位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x04;//位選,選中十位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group2_shi];//段選,把十位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); P2=0x05;//位選,選中個(gè)位數(shù)對(duì)應(yīng)的那個(gè)數(shù)碼管 P0=shuma[Group2_ge];//段選,把個(gè)位數(shù)的字形碼送到上面選通的數(shù)碼管中 delay(1); }}/*初始化子程序*/voidInitialization(){ game_point1=100; game_point2=100;}/*矩陣鍵盤(pán)掃描子程序*/voidKey_Scan(){ucharkey_temp; P1=0x0f; //高4位置1,放入4行 delay(1);//按鍵后00001111將變成0000XXXX,X中有1個(gè)為0,其余3個(gè)仍能為1. key_temp=P1^0x0f;//判斷按鍵發(fā)生在0~3列中的哪一列。 switch(key_temp) { case1:Key_Num=0;break; case2:Key_Num=1;break; case4:Key_Num=2;break; case8:Key_Num=3;break; default:Key_Num=16;//說(shuō)明沒(méi)有按鍵按下 } P1=0xf0;//低四位置零,放入四列 delay(1);//按鍵后11110000將變成XXXX0000,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商務(wù)合同范本
- 兩人股份合作合同范本
- 中藥材種苗購(gòu)銷(xiāo)合同
- 目標(biāo)決定未來(lái)
- 房屋買(mǎi)賣(mài)合同協(xié)議書(shū)26609
- 房產(chǎn)買(mǎi)賣(mài)中介合同
- 吊籃設(shè)備租賃合同書(shū)
- 中級(jí)財(cái)務(wù)會(huì)計(jì)案例講課教案
- 風(fēng)電項(xiàng)目主吊車(chē)裝拆方案
- 基于CiteSpace的AED配置國(guó)內(nèi)外研究現(xiàn)狀與進(jìn)展的可視化分析
- 中學(xué)安全辦2024-2025學(xué)年工作計(jì)劃
- 2024年山東省東營(yíng)市中考數(shù)學(xué)試題 (解析版)
- 2024年陜西西安亮麗電力集團(tuán)有限責(zé)任公司招聘筆試沖刺題(帶答案解析)
- 2024年鄉(xiāng)村振興(產(chǎn)業(yè)、文化、生態(tài))等實(shí)施戰(zhàn)略知識(shí)考試題庫(kù)與答案
- 網(wǎng)絡(luò)安全基礎(chǔ)知識(shí)入門(mén)教程
- AI智慧物流園區(qū)整體建設(shè)方案
- 2024年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 無(wú)痛人工流產(chǎn)術(shù)課件
- 心力衰竭業(yè)務(wù)學(xué)習(xí)護(hù)理課件
- 美發(fā)學(xué)徒助理職業(yè)規(guī)劃書(shū)
- 法醫(yī)病理學(xué)課件
評(píng)論
0/150
提交評(píng)論