版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
5.1I/O端口的輸入/輸出特性5.2I/O端口的應(yīng)用5.3LCM1602字符型液晶顯示模塊5.4雙LED數(shù)碼管動(dòng)態(tài)顯示模塊的設(shè)計(jì)第5章I/O接口及簡(jiǎn)單應(yīng)用5.1.1P1口
圖5.1是P1口其中一位的結(jié)構(gòu)原理圖。P1口由8個(gè)這樣的電路組成。圖中的鎖存器起輸出鎖存作用。場(chǎng)效應(yīng)管V1與上拉電阻組成輸出驅(qū)動(dòng)器,以增大負(fù)載能力。三態(tài)門1是輸入緩沖器,三態(tài)門2在端口操作時(shí)使用。5.1I/O端口的輸入/輸出特性為了便于理解,首先介紹三態(tài)門和鎖存器的功能。
(1)三態(tài)門:有三個(gè)狀態(tài),即高電平、低電平和高阻狀態(tài)(或稱為禁止?fàn)顟B(tài))。圖5.1中,鎖存器的上端有緩沖器2,要讀取D鎖存器輸出端Q的數(shù)據(jù),就得使這個(gè)緩沖器的三態(tài)控制端“讀鎖存器”有效(“1”為有效,“0”為無(wú)效,下同)。鎖存器的下端有緩沖器1,要讀取P1.x引腳上的狀態(tài),就必須使“讀引腳”的三態(tài)緩沖器的控制端有效,這樣引腳上的狀態(tài)才會(huì)傳輸?shù)絾纹瑱C(jī)的內(nèi)部數(shù)據(jù)總線上。
(2)鎖存器:由D觸發(fā)器構(gòu)成。一個(gè)D觸發(fā)器可以保存一位二進(jìn)制數(shù)(即具有保持功能),51單片機(jī)的32根I/O口線都是用一個(gè)D觸發(fā)器來(lái)構(gòu)成鎖存器的。圖5.1中的D鎖存器,D端是數(shù)據(jù)輸入端,CP是控制端(即時(shí)序控制信號(hào)輸入端),Q是輸出端,是反向輸出端。當(dāng)D輸入端有一個(gè)輸入信號(hào)時(shí),如果控制端CP的時(shí)序脈沖沒(méi)有到來(lái),則輸入端D的數(shù)據(jù)是無(wú)法傳輸?shù)捷敵龆薗及反向輸出端Q的。一旦控制端CP的時(shí)序脈沖到來(lái),D端輸入的數(shù)據(jù)就會(huì)傳輸?shù)絈及Q端。此后,CP的時(shí)序脈沖將消失,但輸出端還會(huì)保持上次輸入端D的數(shù)據(jù)(即把上次的數(shù)據(jù)鎖存起來(lái)了)。當(dāng)下一個(gè)CP時(shí)序控制脈沖信號(hào)到來(lái)時(shí),D端的數(shù)據(jù)才再次傳送到Q端,改變Q端的狀態(tài)。
P1口作為通用I/O使用,具有輸出、讀引腳和讀鎖存器三種工作方式。
(1)輸出方式。單片機(jī)執(zhí)行寫P1口的指令,如“MOVP1,#data”時(shí),P1口工作于輸出方式。此時(shí)數(shù)據(jù)經(jīng)內(nèi)部總線送入鎖存器鎖存。如果某位的數(shù)據(jù)為1,則該位鎖存器輸出端Q=1,Q=0,使V1截止,從而在引腳P1.x上出現(xiàn)高電平;反之,如果數(shù)據(jù)為0,則Q=0,Q=1,使V1導(dǎo)通,P1.x上出現(xiàn)低電平。
(2)讀引腳方式。單片機(jī)執(zhí)行讀引腳的指令一般都是以I/O端口為源操作數(shù)的指令,如“MOVA,P1”。這時(shí)“讀引腳”端有效,控制器打開(kāi)三態(tài)門1,引腳P1.x上的數(shù)據(jù)經(jīng)三態(tài)門1進(jìn)入芯片的內(nèi)部總線,并送到累加器A。因此,讀引腳輸入時(shí)無(wú)鎖存功能。當(dāng)單片機(jī)執(zhí)行讀引腳操作時(shí),如果鎖存器原來(lái)寄存的數(shù)據(jù)Q=0,那么由于Q=?1,將使V1導(dǎo)通,引腳P1.x被始終鉗位在低電平,無(wú)法讀到引腳輸入的高電平。為此,用戶在使用讀引腳指令前,必須先用輸出指令置Q=1、Q=0,使V1截止,這時(shí)才能讀到引腳的真實(shí)狀態(tài)。這就是P1被稱為“準(zhǔn)雙向口”的含義(即輸出可直接操作,但輸入前需先置“1”再輸入)。
(3)讀鎖存器方式。MCS-51系列單片機(jī)有不少指令可以直接進(jìn)行端口操作,如ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOVPX.x,C、CLRPX.x、SETBPX.x。這些指令的執(zhí)行過(guò)程分成“讀—修改—寫”三步,即先將端口的數(shù)據(jù)讀入CPU,在ALU中進(jìn)行運(yùn)算,運(yùn)算結(jié)果再送回端口。執(zhí)行“讀—修改—寫”類指令時(shí),CPU實(shí)際上是通過(guò)三態(tài)門2讀回鎖存器Q端的數(shù)據(jù)。這種讀鎖存器的方式是為了避免可能出現(xiàn)的一種錯(cuò)誤。例如,用一根口線直接去驅(qū)動(dòng)端口外的一個(gè)NPN晶體管基極,當(dāng)向口線寫“1”時(shí),該晶體管導(dǎo)通,導(dǎo)通的三極管集極與發(fā)射極間電壓接近0V,會(huì)把端口引腳的高電平拉低,這樣直接讀引腳就會(huì)把本來(lái)的“1”誤讀為“0”。但若從鎖存器Q端讀,就能避免這樣的錯(cuò)誤,得到正確的數(shù)據(jù)。也就是說(shuō),當(dāng)某位輸出為1時(shí),若有外接器件拉低電平,就有區(qū)別了,讀鎖存器狀態(tài)是1,讀引腳狀態(tài)是0,鎖存器狀態(tài)取決于單片機(jī)試圖輸出什么電平,引腳狀態(tài)則是引腳的實(shí)際電平。因此,當(dāng)作為讀引腳方式使用時(shí),應(yīng)先對(duì)該口寫“1”,使場(chǎng)效應(yīng)管截止,再進(jìn)行讀操作,以防止場(chǎng)效應(yīng)管處于導(dǎo)通狀態(tài),使引腳為“0”,而引起誤讀。
P1口能驅(qū)動(dòng)四個(gè)LSTTL負(fù)載。P1每位口最大灌入電流為10?mA,8位總共不能超過(guò)15?mA。P1口有內(nèi)部上拉電阻,因此在輸入時(shí),由集電極開(kāi)路或漏極開(kāi)路電路驅(qū)動(dòng),也無(wú)需外接上拉電阻。輸出方式
單片機(jī)執(zhí)行寫P1口的指令,如MOVP1,#data時(shí),P1口工作于輸出方式。此時(shí)數(shù)據(jù)data經(jīng)內(nèi)部總線送入鎖存器存儲(chǔ)。如果某位的數(shù)據(jù)為1,則該位鎖存器輸出端
Q=1,=0,使V1截止,從而在引腳P1.x上出現(xiàn)高電平;反之,如果數(shù)據(jù)為0,則Q=0,?=1,在P1.x上出現(xiàn)低電平。
讀引腳方式單片機(jī)有些指令用于讀引腳,它們一般都是以I/O端口為源操作數(shù)的指令,如MOVA,P1。這時(shí)控制器打開(kāi)三態(tài)門1,引腳P1.x上數(shù)據(jù)經(jīng)三態(tài)門1進(jìn)入芯片的內(nèi)部總線,并送到累加器A。因此輸入時(shí)無(wú)鎖存功能。圖5.1P1口結(jié)構(gòu)5.1.2P3口
圖5.2是P3口其中一位的結(jié)構(gòu)原理圖。P3口為多功能口。圖5.2P3口結(jié)構(gòu)當(dāng)P3口作為第一功能即通用I/O口使用時(shí),第二功能輸出端應(yīng)保持“1”。這時(shí)通過(guò)與非門3使得P3口的結(jié)構(gòu)完全與P1相同,而且是一個(gè)準(zhǔn)雙向I/O口,其功能與P1相同。當(dāng)P3口作為第二功能(見(jiàn)表5.1)使用時(shí),相應(yīng)的口鎖存器Q端必須為“1”,這時(shí)與非門3的輸出狀態(tài)完全由第二功能輸出端決定,從而反映第二功能的輸出狀態(tài)。當(dāng)P3口作為第二功能輸入端使用時(shí),相應(yīng)的口鎖存器Q端必須為“0”,從而使場(chǎng)效應(yīng)管截止,第二功能輸入取自緩沖器4得到引腳的輸入信號(hào)。表5.1P3口第二功能定義
在應(yīng)用中,P3口的各位如不設(shè)定為第二功能,則自動(dòng)處于第一功能。在更多情況下,根據(jù)需要可將幾條口線設(shè)置為第二功能,其余口線作為第一功能使用,此時(shí)宜采用位操作形式。
圖5.2下方的輸入通道中有兩個(gè)緩沖器1和4。第二功能輸入信號(hào)取自緩沖器4;而通用輸入信號(hào)取自“讀引腳”緩沖器1的輸出端。
P3口的負(fù)載能力和P1口相同,能驅(qū)動(dòng)四個(gè)LSTTL負(fù)載。每位口最大灌入電流為10mA,8位總共不能超過(guò)15mA。5.1.3P0口
圖5.3是P0口其中一位的結(jié)構(gòu)原理圖。
P0口的輸出驅(qū)動(dòng)電路由上拉場(chǎng)效應(yīng)管V2和驅(qū)動(dòng)場(chǎng)效應(yīng)管V1組成,控制電路包括一個(gè)與門、一個(gè)非門和多路開(kāi)關(guān)MUX。
P0口既可以作為通用的I/O口進(jìn)行數(shù)據(jù)的輸入/輸出,也可以作為單片機(jī)系統(tǒng)的地址/數(shù)據(jù)線使用,為此在P0口的電路中有一個(gè)多路轉(zhuǎn)接電路MUX。在控制信號(hào)的作用下,多路轉(zhuǎn)接電路可以分別接通鎖存器輸出或地址/數(shù)據(jù)線輸出。圖5.3P0口結(jié)構(gòu)
P0口的輸出驅(qū)動(dòng)電路由上拉場(chǎng)效應(yīng)管V2和驅(qū)動(dòng)場(chǎng)效應(yīng)管V1組成,控制電路包括一個(gè)與門、一個(gè)非門和多路控制開(kāi)關(guān)MUX。
P0口既可以作為通用I/O口進(jìn)行數(shù)據(jù)的輸入/輸出,也可以作為單片機(jī)系統(tǒng)的地址/數(shù)據(jù)線使用,為此在P0口的電路中有一個(gè)多路控制開(kāi)關(guān)MUX。在控制信號(hào)的作用下,多路控制電路可以分別接通鎖存器輸出或地址/數(shù)據(jù)線。
P0作為通用I/O口使用時(shí),CPU內(nèi)部發(fā)出控制電平0封鎖與門,即與門的輸出為0(不會(huì)受另一條輸入端狀態(tài)的限制),多路控制開(kāi)關(guān)與接通,上拉場(chǎng)效應(yīng)管V2處于截止?fàn)顟B(tài),此時(shí),輸出級(jí)是漏極開(kāi)路電路,這時(shí),P0口與P1口一樣,有三種工作方式:
(1)輸出方式。當(dāng)寫脈沖加在鎖存器時(shí)鐘端CP端上時(shí),與內(nèi)部總線相連的D端數(shù)據(jù)取反后出現(xiàn)在Q端,又經(jīng)輸出V1反相,在P0引腳上出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線的數(shù)據(jù)。當(dāng)從P0口輸入數(shù)據(jù)時(shí),引腳信息仍經(jīng)輸入緩沖器1進(jìn)入內(nèi)部總線。在輸出數(shù)據(jù)時(shí),由于V2截止,輸出級(jí)是漏極開(kāi)路電路,要使“1”信號(hào)能正常輸出,必須外接上拉電阻,上拉電阻的阻值一般為4.7?kΩ~10?kΩ。
(2)讀引腳方式。P0口作為通用I/O口使用時(shí),是準(zhǔn)雙向口。其特點(diǎn)是在輸入數(shù)據(jù)時(shí),應(yīng)先把端口置1,此時(shí)鎖存器的Q端為0,使得輸出級(jí)的兩個(gè)場(chǎng)效應(yīng)管V1、V2均截止,引腳處于懸浮狀態(tài),這時(shí)才可作高阻輸入。原因是,從P0口引腳輸入數(shù)據(jù)時(shí),V2一直處于截止?fàn)顟B(tài),引腳上的外部信號(hào)既加在三態(tài)緩沖器1的輸入端,又加在V1的漏極。若在此前曾給鎖存器輸出過(guò)數(shù)據(jù)0,則V1是導(dǎo)通的,這樣引腳上的電位就始終被鉗位在低電平,使輸入高電平無(wú)法讀入。因此,在輸入數(shù)據(jù)時(shí),應(yīng)先向端口引腳寫“1”,使得V1、V2均截止,方可得到正確的引腳信息。
(3)讀鎖存器方式。此時(shí)V2截止,與P1口在讀鎖存器方式時(shí)“讀—修改—寫”工作過(guò)程一樣。當(dāng)P0作為地址/數(shù)據(jù)總線分時(shí)復(fù)用功能連接外部存儲(chǔ)器時(shí),由于訪問(wèn)外部存儲(chǔ)器期間,CPU會(huì)自動(dòng)向P0口的鎖存器寫入FFH,對(duì)用戶而言,P0口此時(shí)才是真正的三態(tài)雙向口。當(dāng)訪問(wèn)片外存儲(chǔ)器而需從P0口輸出地址或數(shù)據(jù)信號(hào)時(shí),控制信號(hào)應(yīng)為高電平“1”,使多路控制開(kāi)關(guān)MUX把反相器的輸出端與V2連通,為打開(kāi)與門做好準(zhǔn)備。當(dāng)?shù)刂坊驍?shù)據(jù)為“1”時(shí),經(jīng)反相器使V1截止,而經(jīng)與門又使V2導(dǎo)通,P0.x引腳上出現(xiàn)相應(yīng)的高電平“1”;當(dāng)?shù)刂坊驍?shù)據(jù)為“0”時(shí),經(jīng)反相器使V1導(dǎo)通而V2截止,引腳上出現(xiàn)相應(yīng)的低電平“0”,將地址/數(shù)據(jù)的信號(hào)輸出。綜上所述,P0口在有外部擴(kuò)展存儲(chǔ)器時(shí)被作為地址/數(shù)據(jù)總線口,此時(shí)是一個(gè)真正的雙向口;在沒(méi)有外部擴(kuò)展存儲(chǔ)器時(shí),P0口也可作為通用I/O接口,但必須接上拉電阻,此時(shí)是一個(gè)準(zhǔn)雙向口。另外,P0口能驅(qū)動(dòng)八個(gè)LSTTL負(fù)載。P0每位口最大灌入電流為10mA,8位總共不能超過(guò)26mA。5.1.4P2口
圖5.4是P2口其中一位的結(jié)構(gòu)原理圖。P2口既可以作為通用I/O口使用也可作為地址總線使用,所以它的位結(jié)構(gòu)比P1口多了一個(gè)多路控制開(kāi)關(guān)MUX。
當(dāng)P2口作為通用I/O口使用時(shí),多路開(kāi)關(guān)MUX倒向鎖存器的輸出端Q,構(gòu)成一個(gè)準(zhǔn)雙向口。其功能與P1口相同,有輸出、讀引腳、讀鎖存器三種工作方式。圖5.4P2口結(jié)構(gòu)
P2口的另一功能是作系統(tǒng)擴(kuò)展的地址總線口。當(dāng)單片機(jī)從片外ROM中取指令,或者執(zhí)行訪問(wèn)片外RAM、片外ROM的指令時(shí),多路開(kāi)關(guān)MUX接通“地址”,P2口出現(xiàn)程序指針PC的高8位地址或數(shù)據(jù)指針DPTR的高8位地址。以上操作對(duì)鎖存器的內(nèi)容不受影響,所以,取指令或訪問(wèn)外部存儲(chǔ)器結(jié)束后,由于多路開(kāi)關(guān)MUX又與鎖存器Q端接通,引腳上將恢復(fù)原來(lái)的數(shù)據(jù)。
P2口的負(fù)載能力和P1口相同,能驅(qū)動(dòng)四個(gè)LSTTL負(fù)載。5.2.1I/O的簡(jiǎn)單控制
下面舉兩個(gè)例子說(shuō)明I/O的簡(jiǎn)單控制。
例1:編制一個(gè)燈光循環(huán)閃爍程序。通過(guò)P3口連接八個(gè)發(fā)光二極管,其中一個(gè)發(fā)光二極管閃爍三次后,轉(zhuǎn)移到下一個(gè)發(fā)光二極管閃爍三次,如此循環(huán)不止。電路原理圖如圖5.5
所示。5.2I/O端口的應(yīng)用圖5.5燈光循環(huán)閃爍電路分析:八個(gè)發(fā)光二極管LED連接在P3口上。要讓發(fā)光二極管閃爍,只需隔一段時(shí)間,P3口輸出的高低電平轉(zhuǎn)換一次。為避免發(fā)光二極管燒壞,需加430Ω左右的限流電阻。
程序如下:此例中,用到一個(gè)430Ω左右的限流電阻R,其計(jì)算公式如下:R
=
式中:UCC為電源電壓;ULED為發(fā)光二極管壓降(取1.2~1.8V);UDRI為驅(qū)動(dòng)器壓降(取0.3~0.5V);ILED為發(fā)光二極管工作電流(取8~20mA)。本例中取UCC=5V,ULED=1.3V,UDRI未使用,ILED=8mA,因此≈430Ω
ILED為發(fā)光二極管工作電流,其值越大,二極管越亮。為了提高亮度,可減少限流電阻,常用限流電阻的阻值為200~500Ω。也可以選用驅(qū)動(dòng)器件以提供更大的電流,常用的驅(qū)動(dòng)器件有74LS06、74LS07、小功率三極管等。5.2.2LED數(shù)碼管顯示
1.LED顯示器及其工作原理
LED有著顯示亮度高、響應(yīng)快的特點(diǎn)。最常用的是七段LED顯示器,又稱數(shù)碼管。七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成。這種顯示器分共陽(yáng)極和共陰極兩種:共陽(yáng)極LED顯示器的發(fā)光二極管的所有陽(yáng)極連接在一起,為公共端,如圖5.6(a)所示;共陰極LED顯示器發(fā)光二極管的所有陰極連接在一起,為公共端,如圖5.6(b)所示。單個(gè)數(shù)碼管的引腳配置如圖5.6(c)所示。其中com為公共端。圖5.6LED顯示器
(a)共陽(yáng)極;(b)共陰極;(c)數(shù)碼管引腳表5.2LED數(shù)碼管段碼表續(xù)表
2.應(yīng)用單片機(jī)I/O口的LED數(shù)碼管顯示接口及程序設(shè)計(jì)
數(shù)碼管的接口有靜態(tài)顯示接口和動(dòng)態(tài)顯示接口之分。
靜態(tài)顯示接口為固定顯示方式,無(wú)閃爍,其電路可采用一個(gè)并行口接一個(gè)數(shù)碼管。采用這種接法,n個(gè)數(shù)碼管就需要n個(gè)8位的接口,占用資源多。將MCS-51單片機(jī)的四個(gè)口全部利用也只能接四個(gè)LED數(shù)碼管。這里只舉一個(gè)用P1口和P3口顯示2位數(shù)的例子,圖5.7為電路原理圖,程序初始顯示為00,每秒鐘加1,至99,如此循環(huán)。圖5.7兩位LED數(shù)碼管靜態(tài)顯示程序清單:動(dòng)態(tài)顯示采用各數(shù)碼管循環(huán)顯示的方法。當(dāng)循環(huán)顯示的時(shí)間間隔較小時(shí)(如10ms),利用人眼的暫留特性,看不出閃爍的現(xiàn)象。這種顯示方式是將各個(gè)段碼管的各段腳分別并接在一個(gè)端口上,輸出段碼;各個(gè)數(shù)碼管的公共端分別由其它端口控制,完成數(shù)位的選擇,控制各數(shù)碼管輪流點(diǎn)亮。圖5.8是2位數(shù)碼管動(dòng)態(tài)顯示的簡(jiǎn)單例子。因公共端的電流較大(最大為點(diǎn)亮8個(gè)發(fā)光二極管所需要的電流),加了一個(gè)三極管作為驅(qū)動(dòng)。因動(dòng)態(tài)顯示,限流電阻選200Ω。程序?qū)@示“86”。圖5.8兩位LED數(shù)碼管動(dòng)態(tài)顯示圖5.9兩位數(shù)碼管動(dòng)態(tài)顯示程序框圖
以上程序Proteus仿真運(yùn)行結(jié)果如圖5.10所示,其中Proteus所使用的元件見(jiàn)表5.3。圖5.10兩位LED數(shù)碼管動(dòng)態(tài)仿真圖表5.3元件列表元件編號(hào)元件名Proteus中元件名值U151單片機(jī)AT89C51LED共陽(yáng)極兩位數(shù)碼管7SEG-MPX-CAR?×?8排阻R?×?8200ΩR1~R4電阻RES2kΩ~5kΩV1、V2小功率三極管NPN5.2.3鍵盤
鍵盤是由若干個(gè)按鍵組成的,它是單片機(jī)最簡(jiǎn)單的輸入設(shè)備。操作員通過(guò)鍵盤輸入數(shù)據(jù)命令,實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話。按鍵就是一個(gè)簡(jiǎn)單的開(kāi)關(guān),當(dāng)按鍵按下時(shí),相當(dāng)于開(kāi)關(guān)閉合;當(dāng)按鍵松開(kāi)時(shí),相當(dāng)于開(kāi)關(guān)斷開(kāi)。按鍵在閉合和斷開(kāi)時(shí),會(huì)存在抖動(dòng)現(xiàn)象。按鍵的抖動(dòng)時(shí)間一般為5~10ms,抖動(dòng)可能造成一次按鍵的多次處理問(wèn)題。應(yīng)采用措施消除抖動(dòng)的影響。單片機(jī)應(yīng)用常采用軟件延時(shí)10ms的辦法來(lái)消除抖動(dòng)的影響。如圖5.11所示,當(dāng)單片機(jī)檢測(cè)到有鍵按下時(shí),先延時(shí)10ms,然后再檢測(cè)按鍵的狀態(tài),若仍是閉合狀態(tài),則認(rèn)為真正有鍵按下。當(dāng)需要檢測(cè)到按鍵釋放時(shí),也需做同樣的處理。圖5.11按鍵抖動(dòng)的波形
1.獨(dú)立式鍵盤
獨(dú)立式鍵盤中,每個(gè)按鍵占用一根I/O口線,每個(gè)按鍵電路相對(duì)獨(dú)立,如圖5.12所示,I/O口通過(guò)按鍵與地連接,鍵閉合時(shí),I/O口與地接通。在讀取I/O口狀態(tài)時(shí),需先向I/O口送“1”。如I/O口無(wú)內(nèi)部上拉電阻需外部加上拉電阻。
下面是一個(gè)處理圖5.12的獨(dú)立式鍵盤的程序,在檢測(cè)按鍵是否按下時(shí),采用了軟件延時(shí)消抖的處理,但未加鍵釋放時(shí)的消抖處理。圖5.12
獨(dú)立式鍵盤電路原理圖程序如下:
2.行列式鍵盤
獨(dú)立式鍵盤只適合按鍵較少的場(chǎng)合,否則占用的端口太多。當(dāng)按鍵較多時(shí),可采用行列式鍵盤電路。但行列式鍵盤的管理程序較復(fù)雜,需要采用鍵盤掃描技術(shù)。常用的鍵盤掃描方式有掃描法、線反轉(zhuǎn)法、狀態(tài)矩陣法等。
本節(jié)只介紹線反轉(zhuǎn)法(Line-Reverse),圖5.13描述了其編程原理。圖5.13線反轉(zhuǎn)法接線與鍵號(hào)圖線反轉(zhuǎn)法掃描的步驟如下:
(1)從P2口的高4位輸出低電平(列),低4位輸出高電平(行),即MOVP2,#0FH,再?gòu)腜2口讀取鍵盤狀態(tài)。這時(shí),如低4位中有一位出現(xiàn)“0”,說(shuō)明此行中有鍵按下。各行有鍵按下時(shí),從P2口讀取的數(shù)值依次為0EH、0DH、0BH、07H。
(2)從P2口的低4位輸出低電平(行),高4位輸出高電平(列),即MOVP2,#0F0H,再?gòu)腜2口讀取鍵盤狀態(tài)。這時(shí),如高4位中有一位出現(xiàn)“0”,說(shuō)明此列中有鍵按下。各列有鍵按下時(shí),從P2口讀取的數(shù)值依次為E0H、D0H、B0H、70H。
(3)將兩次讀取的特征值根據(jù)圖5.13進(jìn)行組合,即采用將兩次讀取的特征值“或”的方法,獲得當(dāng)前“按鍵的特征碼”。以下是按此過(guò)程編寫的程序:
ORG0000H
MOV30H,#0FFH ;最終獲得的鍵號(hào)0~15存放在30H,如 ;(30H)=0FFH,表示無(wú)按鍵按下
MAIN:MOVP2,#0FH ;線反轉(zhuǎn)法掃描中的第(1)步
MOVA,P2
MOVP2,#0F0H ;線反轉(zhuǎn)法掃描中的第(2)步
MOVB,P2
ORLA,B ;線反轉(zhuǎn)法掃描中的第(3)步
KEY0:CJNEA,#0EEH,KEY1 ;特征碼如為“0EEH”,鍵號(hào)為0
MOV30H,#00H
KEY1:CJNEA,#0DEH,KEY2 ;特征碼如為“0DEH”,鍵號(hào)為1
MOV30H,#01H
KEY2:CJNEA,#0BEH,KEY3 ;特征碼如為“0BEH”,鍵號(hào)為2
MOV30H,#02H
KEY3:CJNEA,#7EH,KEY4 ;特征碼如為“07EH”,鍵號(hào)為3
MOV30H,#03H
KEY4:CJNEA,#0EDH,KEY5 ;特征碼如為“0EDH”,鍵號(hào)為4
MOV30H,#04H
KEY5:CJNEA,#0DDH,KEY6 ;特征碼如為“0DDH”,鍵號(hào)為5
MOV30H,#05H
KEY6:CJNEA,#0BDH,KEY7 ;特征碼如為“0BDH”,鍵號(hào)為6
MOV30H,#06H
KEY7:CJNEA,#7DH,KEY8 ;特征碼如為“07DH”,鍵號(hào)為7
MOV30H,#07H
KEY8:CJNEA,#0EBH,KEY9 ;特征碼如為“0EBH”,鍵號(hào)為8
MOV30H,#08H
KEY9:CJNEA,#0DBH,KEY10 ;特征碼如為“0DBH”,鍵號(hào)為9
MOV30H,#09H
KEY10:CJNEA,#0BBH,KEY11 ;特征碼如為“0BBH”,鍵號(hào)為0AH=10
MOV30H,#0AH
KEY11:CJNEA,#7BH,KEY12 ;特征碼如為“07BH”,鍵號(hào)為0BH=11
MOV30H,#0BH
KEY12:CJNEA,#0E7H,KEY13 ;特征碼如為“0E7H”,鍵號(hào)為0CH=12
MOV30H,#0CH
KEY13:CJNEA,#0D7H,KEY14 ;特征碼如為“0D7H”,鍵號(hào)為0DH=13
MOV30H,#0DH
KEY14:CJNEA,#0B7H,KEY15 ;特征碼如為“0B7H”,鍵號(hào)為0EH=14
MOV30H,#0EH
KEY15:CJNEA,#77H,KEYEND ;特征碼如為“077H”,鍵號(hào)為0FH=15
MOV30H,#0FH
KEYEND:MOVP3,30H;將鍵號(hào)送P2口,由BCD碼LED數(shù)碼管顯示
AJMPMAIN
END圖5.144×4鍵盤的仿真效果圖接在P3口的BCD碼LED數(shù)碼管顯示按鍵的鍵號(hào),其中BCD碼LED數(shù)碼管(在Proteus中的元件名為7SEG-BCD)有四根數(shù)據(jù)線,對(duì)應(yīng)二進(jìn)制的4位,可以不經(jīng)譯碼顯示0~F。如它的四只引腳為0111,則顯示“7”;若為1010,則顯示“A”。在Proteus中可方便地用兩個(gè)BCD數(shù)碼管顯示一個(gè)字節(jié)的數(shù)據(jù)而不需譯碼,調(diào)試程序非常方便,但在實(shí)際電路中很少使用。 5.3LCM1602字符型液晶顯示模塊
LCM是將LCD(LiquidCrystalDisplay,液晶顯示器)、驅(qū)動(dòng)和控制電路組合成的模塊(LCM,LiquidCrystaldisplayMould)。LCM的種類繁多,最常用的有段式LCM、字符型LCM和點(diǎn)陣型LCM。段式LCM與LED數(shù)碼管類似,只是每一段由液晶段組成。字符型的每個(gè)字符一般由5?×?7點(diǎn)陣組成(所以又稱為“點(diǎn)陣字符型”),可以顯示數(shù)字和英文字母、標(biāo)點(diǎn)符號(hào)等,一般自帶顯示符號(hào)庫(kù)。點(diǎn)陣型LCM全部由點(diǎn)陣的液晶組成(如64?×?64、128?×?64、256?×?128、320?×?240等),可以顯示漢字和圖形。本節(jié)介紹最常用的字符型LCM1602模塊(有時(shí)也稱為L(zhǎng)CD1602),如圖5.15所示,其中圖(a)為引腳圖,圖(b)為L(zhǎng)CM實(shí)物照片的正面,圖(c)為其背面。圖5.15LCM1602液晶顯示器及實(shí)物圖5.3.1字符型LCM1602介紹
1.LCM1602的內(nèi)部寄存器
LCM1602帶有以下內(nèi)部寄存器。
(1)具有字符發(fā)生器ROM(CharacterGeneratorROM,CGROM),用來(lái)寄存固定的字符圖形,可顯示192個(gè)5?×?7點(diǎn)陣字符,如表5.4所示(絕大多數(shù)與ASCII碼相同)??梢钥闯觯?602顯示的數(shù)字和字母的碼值,與ASCII碼表中的數(shù)字和字母的碼值相同。
(2)具有64B的自定義字符RAM(CharacterGeneratorRAM,CGRAM),用來(lái)寄存用戶自定義的字符圖形,可自行定義8個(gè)5?×?7點(diǎn)陣字符。
(3)具有80B的數(shù)據(jù)顯示存儲(chǔ)器RAM(DisplayDataRAM,DDRAM),用來(lái)寄存待顯示的字符代碼。表5.4LCM1602顯示字符表2.LCM1602引腳功能LCM1602引腳功能見(jiàn)表5.5。3.LCM1602顯示器地址
LCM1602能顯示兩行,每行16個(gè)字符。需要顯示的字符需存入DDRAM,每個(gè)顯示字符與DDRAM地址的映射關(guān)系如下(用十六進(jìn)制表示):
也就是說(shuō),若想在LCD1602屏幕的第一行第一列顯示一個(gè)“A”字,則只需向DDRAM的80H地址寫入“A”字的代碼“01000001?=?41H”(如表5.4所示,與ASCII碼相同)即可。但寫入時(shí)要按LCD模塊的指令格式來(lái)進(jìn)行。
4.LCM1602的指令集對(duì)LCM1602的操作,就是對(duì)它內(nèi)部寄存器的操作。其寄存器的選擇控制如下:LCM1602的指令共11條。(1)清屏指令。指令字描述如下:功能:①清屏,即將DDRAM的內(nèi)容全部填入“空白”的ASCII碼20H;②光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;③將地址計(jì)數(shù)器(AC)的值設(shè)為0。
(2)光標(biāo)歸位指令。指令字描述如下:功能:①把光標(biāo)撤回到顯示器的左上方;
?②把地址計(jì)數(shù)器(AC)的值設(shè)置為0;
?③保持DDRAM的內(nèi)容不變。
(3)模式設(shè)置指令。指令字描述如下:
功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下:功能:①讀取忙信號(hào)BF(BusyFlag)的內(nèi)容,BF?=?1表示液晶顯示器忙,暫時(shí)無(wú)法接收單片機(jī)送來(lái)的數(shù)據(jù)或指令;BF=0表示液晶顯示器可以接收單片機(jī)送來(lái)的數(shù)據(jù)或指令。②讀取地址計(jì)數(shù)器(AC)的內(nèi)容。
(10)數(shù)據(jù)寫入DDRAM或CGRAM指令。指令字描述如下:功能:①將字符碼寫入DDRAM,以使液晶顯示屏顯示相對(duì)應(yīng)的字符。
②將使用者自己設(shè)計(jì)的圖形存入CGRAM。
(11)從CGRAM或DDRAM讀出數(shù)據(jù)的指令。指令字描述如下:功能:讀取DDRAM或CGRAM中的內(nèi)容。基本操作時(shí)序如下:5.LCM1602的時(shí)序
LCM1602的時(shí)序如圖5.16、圖5.17和表5.6所示。不同廠家的LCM1602的時(shí)序可能略有差異。圖5.16LCM1602讀操作時(shí)序圖5.17LCM1602寫操作時(shí)序表5.6LCM1602時(shí)序參數(shù)5.3.2LCM1602與單片機(jī)的接口
LCM1602與51單片機(jī)的接口原理圖如圖5.18所示,其中10kΩ可調(diào)電阻的作用是調(diào)節(jié)LCD的背光亮度。P0口接了一個(gè)10kΩ的排阻,此排阻的內(nèi)部結(jié)構(gòu)和實(shí)物照片如圖5.19所示,它是作為P0口的上拉電阻使用的。圖5.18LCM1602與51單片機(jī)的接口原理圖圖5.1910kΩ排阻的內(nèi)部結(jié)構(gòu)和實(shí)物5.3.3LCM1602顯示模塊的應(yīng)用
1.模塊化編程模塊化編程是一種軟件設(shè)計(jì)方法。各模塊程序分別編寫、編譯和調(diào)試,最后模塊一起連接/定位,可以把一個(gè)復(fù)雜的程序分解成若干個(gè)簡(jiǎn)單的、功能單一的程序模塊,每個(gè)模塊完成一個(gè)明確的任務(wù),實(shí)現(xiàn)某個(gè)具體功能,如對(duì)數(shù)據(jù)的處理、鍵盤管理、顯示、A/D轉(zhuǎn)換、D/A轉(zhuǎn)換等。模塊化編程有以下優(yōu)點(diǎn):
(1)程序共享,即一個(gè)模塊中的程序可以被其他模塊引用。
(2)模塊化編程使得要解決的問(wèn)題與特定的模塊分離,很容易發(fā)現(xiàn)程序的錯(cuò)誤,大大方便了程序的調(diào)試。模塊化編程將一個(gè)大的程序按功能分割成一些小模塊。各模塊相對(duì)獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡(jiǎn)單,大大降低了程序設(shè)計(jì)的復(fù)雜性。模塊化編程縮短了程序開(kāi)發(fā)周期,避免了程序開(kāi)發(fā)的重復(fù)勞動(dòng),易于維護(hù)和功能擴(kuò)充。
2.LCD1602.a51程序模塊的框架匯編語(yǔ)言的模塊化程序設(shè)計(jì)采用可重定位的匯編器(ASM51),要牽涉到許多宏匯編的偽指令。本節(jié)只介紹能完成匯編語(yǔ)言模塊設(shè)計(jì)的基本偽指令的兩種框架模式。
1)聲明公用子程序框架下面先給出一個(gè)LCD1602.a51程序模塊的聲明公用子程序框架,并給出詳細(xì)的解釋。
1NAMELCD1602
2;LCM1602與89C51接口的定義:
3...
4PUBLICLCD_INITIAL ;聲明LCD_INITIAL為公用子程序
5?PR?LCD_INITIALSEGMENTCODE
6RSEG?PR?LCD_INITIAL
7LCD_INITIAL:
8...
9PUBLICLCD_PRINT_CHAR;聲明LCD_PRINT_CHAR為公用子程序
10?PR?LCD_PRINT_CHAR SEGMENTCODE
11RSEG?PR?LCD_PRINT_CHAR
12LCD_PRINT_CHAR:
13...
14PUBLICLCD_PRINT_S ;聲明LCD_PRINT_S為公用子程序
15?PR?LCD_PRINT_SSEGMENTCODE
16RSEG?PR?LCD_PRINT_S
17LCD_PRINT_S:
18...
19CHECK_BUSY: ;查詢忙標(biāo)志信號(hào)子程序
20...
21WRITE_COM: ;寫指令到LCM1602子程序
22...
23WRITE_DATA: ;寫數(shù)據(jù)到LCM1602子程序
24...
25LCD_CLS: ;清除顯示屏子程序
26...
27DELAY: ;延時(shí)子程序
28...
29END解釋如下:第1行:通常會(huì)把一個(gè)程序分成多個(gè)模塊,每個(gè)模塊的源代碼放在一個(gè)文件中,該文件的文件名就是模塊名。本模塊的文件名為L(zhǎng)CD1602.a51,其后綴可以是a51或asm,但為了與主程序區(qū)別常用a51,主程序的后綴用asm。NAME描述了模塊名。不過(guò)NAME不是必需的偽指令,可以省略。第2、3行,描述本模塊中LCM1602與89C51接口管腳的定義。第4行,聲明LCD_INITIAL為公用子程序。
PUBLIC偽指令說(shuō)明本模塊中的某些符號(hào)(包括子程序的名)是公共的,即這些符號(hào)可以提供給將被連接在一起的其他模塊使用。第5行,聲明LCD_INITIAL的段名。
SEGMENT
用于聲明一個(gè)段名,其前面的符號(hào)表示段名,后面的符號(hào)為段的類型,如CODE為程序代碼段,DATA代表內(nèi)部RAM段。?PR?為程序段名的前綴,后面緊跟著程序名。第6行,用RSEG說(shuō)明后面的段?PR?LCD_INITIAL是可重定位的。
RSEGxxx聲明以下的語(yǔ)句應(yīng)位于可重定位的xxx段,在編譯時(shí)不進(jìn)行定位,只有在鏈接時(shí)才確定其固定地址。如果xxx是程序名,也要用??PR??作為程序段名的前綴。第7、8行,子程序LCD_INITIAL的匯編代碼。第9~13行,關(guān)于公用子程序LCD_PRINT_CHAR的聲明和匯編代碼。第14~18行,關(guān)于公用子程序LCD_PRINT_S的聲明和匯編代碼。第19~28行,模塊中其他子程序的匯編代碼。由于沒(méi)有用PUBLIC進(jìn)行聲明,所以只能在本模塊的文件中引用,不能被其他模塊(包括主程序)引用。第29行,用END標(biāo)志一個(gè)模塊文件的結(jié)束。
2)包含模塊程序框架按4.1.1節(jié)所提供的格式編寫所需要的子程序模塊,但不要用偽指令“ORG”指定地址。然后主程序的最后用宏指令
$INCLUDE(xxxx.a51)把xxxx.a51包含進(jìn)去,就可以在主程序中引用xxxx.a51中的所有子程序。本書第12章12.2.6節(jié)就采用了這種包含模塊程序的方法,讀者可以參考。包含模塊程序的框架形式把模塊中所有的子程序都包含了,而聲明公用子程序框架僅就需要使用的子程序進(jìn)行聲明,使程序更為清晰,本書大多采用這種框架。
3.LCD1602.a51模塊程序清單
LCD1602.a51的程序清單如下,清單中對(duì)所有公用子程序都給出了詳細(xì)的注釋,包括如何使用的舉例。這是一個(gè)模塊程序的范例,希望讀者學(xué)習(xí)這種風(fēng)格。模塊中對(duì)LCM1602所進(jìn)行的指令、數(shù)據(jù)的操作,是按LCM1602的時(shí)序(見(jiàn)圖5.16、圖5.17和表5.6)完成的。
NAMELCD1602;--------------------------------------------------------------;模塊名:LCD1602.a51;功能:LCM1602的驅(qū)動(dòng)模塊;初始化LCM1602、在指定的位置顯示字符或字符串;--------------------------------------------------------------;LCM1602與89C51接口的定義:
RSEQUP2.0
R_WEQUP2.1
EEQUP2.2
DB0_DB7EQUP0;--------------------------------------------------------------;子程序名:LCD_INITIAL;功能:初始化LCM1602;--------------------------------------------------------------
PUBLICLCD_INITIAL ;聲明LCD_INITIAL為公用子程序
?PR?LCD_INITIALSEGMENTCODE;注意:LCD_INITIAL前加了一個(gè)“?PR?”
RSEG?PR?LCD_INITIAL
LCD_INITIAL:
MOVA,#38H ;顯示功能
ACALLWRITE_COM
MOVA,#0CH ;顯示開(kāi)關(guān)控制
CALLWRITE_COM
ACALLLCD_CLS ;清顯示屏
RET;--------------------------------------------------------------;子程序名:LCD_PRINT_CHAR;功能:在指定的位置顯示字符;參數(shù):A—顯示的位置,第1行為80H~8FH,第2行為C0H~CFH;R5—顯示數(shù)據(jù)的個(gè)數(shù);R1—顯示數(shù)據(jù)的首地址;注意:顯示的數(shù)據(jù)必須用ASCII碼表示;占用寄存器:A、DPTR、R1、R5;Examp:在第2行第5~7列顯示“156”;MOVA,#0C5H ;在第2行第6列開(kāi)始顯示;MOVR5,#3 ;要顯示3個(gè)字符;MOVR1,#20H ;第1個(gè)字符存放的首地址為20H;MOV20H,#31H ;“1”的ASCII碼為31H;MOV21H,#35H ;“5”的ASCII碼為35H;MOV22H,#36H ;“6”的ASCII碼為36H;ACALLLCD_PRINT_CHAR ;調(diào)用顯示字符子程序;--------------------------------------------------------------
PUBLICLCD_PRINT_CHAR;聲明LCD_PRINT_CHAR為公用子程序
?PR?LCD_PRINT_CHAR SEGMENTCODE
RSEG?PR?LCD_PRINT_CHAR
LCD_PRINT_CHAR:
ACALLWRITE_COM
LOOP:MOVA,@R1
ACALLWRITE_DATA
INCR1
MOVA,R1
DJNZR5,LOOP
RET
;--------------------------------------------------------------;功能:在指定的位置顯示字符串;參數(shù):A—顯示的位置,第1行為80H~8FH,第2行為C0H~CFH;DPTR—顯示固定字符串表格首地址;占用寄存器:A、DPTR;Examp:在第2行第0~15列顯示“WelcomeToStuelab”;MOVA,#0C0H;MOVDPTR,#TABLE;LCALLLCD_PRINT_S;TABLE:DB"WelcomeToStuelab",00H;;注意:定義的字符串后要加“00H”。;--------------------------------------------------------------
PUBLICLCD_PRINT_S ;聲明LCD_PRINT_S為公用子程序
?PR?LCD_PRINT_SSEGMENTCODE
RSEG?PR?LCD_PRINT_S
LCD_PRINT_S:
ACALLWRITE_COM
MOVR1,#00H
LOOPS: CLRA
MOVCA,@A+DPTR
ACALLWRITE_DATA
INCDPTR
CLRA
MOVCA,@A+DPTR
CJNEA,#00H,LOOPS
RET
CHECK_BUSY: ;查詢忙標(biāo)志信號(hào)子程序
PUSHACC
BUSY_LOOP:
CLRE
SETBR_W
CLRRS
SETBE
ACALLDELAY;
MOVA,DB0_DB7
CLRE
JBACC.7,BUSY_LOOP
POPACC
ACALLDELAY
RET
WRITE_COM: ;寫指令到LCM1602子程序
ACALLCHECK_BUSY
CLRE
CLRRS
CLRR_W
SETBE
ACALLDELAY
MOVDB0_DB7,A
CLRE
RET
WRITE_DATA: ;寫數(shù)據(jù)到LCM1602子程序
ACALLCHECK_BUSY
CLRE
SETBRS
CLRR_W
SETBE
ACALLDELAY
MOVDB0_DB7,A
CLRE
RET
LCD_CLS:MOVA,#01H ;清除顯示屏子程序
ACALLWRITE_COM
RET
DELAY: MOVR6,#5 ;延時(shí)子程序
DELAY1: MOVR7,#0FFH
DJNZR7,$
DJNZR6,DELAY1
RET
END
4.LCM1602驅(qū)動(dòng)程序的應(yīng)用下面是LCM1602在指定的位置顯示數(shù)據(jù)“156”的演示程序的主程序清單。程序中對(duì)所引用的公共子程序用“EXTRN”進(jìn)行了聲明。
EXTRN是宏匯編的偽指令,它說(shuō)明本程序中所用的符號(hào)(包括子程序的名)是外部的,但這些符號(hào)要在將被連接在一起的其他模塊中定義并用PUBLIC聲明過(guò)。;------------------------------------------------;文件名:LCD1602demo.asm;功能:LCM1602在指定的位置顯示數(shù)據(jù)的演示程序的主程序;------------------------------------------------
EXTRN CODE(LCD_INITIAL) ;對(duì)需調(diào)用的LCD1602模塊中公用子程序的聲明
EXTRN CODE(LCD_PRINT_S)
EXTRN CODE(LCD_PRINT_CHAR)
ORG0000H
AJMPMAIN
ORG0030H
MAIN: ACALLLCD_INITIAL;LCM1602初始化
MOVA,#81H ;在第1行第1列顯示字符串
MOVDPTR,#TABLE ;字符串首址放DPTR
ACALLLCD_PRINT_S;調(diào)用顯示字符串子程序
MOVA,#0C6H ;在第2行第6列顯示
MOVR5,#3 ;顯示3個(gè)字符
MOVR1,#20H ;第1個(gè)字符存放的首地址為20H
MOV20H,#31H ;顯示“1”的ASCII碼
MOV21H,#35H ;顯示“5”的ASCII碼
MOV22H,#36H ;顯示“6”的ASCII碼
ACALLLCD_PRINT_CHAR ;調(diào)用顯示字符子程序
SJMP$
TABLE: DB“THENU
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 預(yù)付款資產(chǎn)轉(zhuǎn)讓
- 質(zhì)量問(wèn)題先行賠付
- 混凝土供應(yīng)協(xié)議
- 財(cái)務(wù)咨詢服務(wù)協(xié)議樣本
- 服務(wù)改進(jìn)方案合同
- 校園印刷購(gòu)銷合同
- 鴨毛購(gòu)銷合同
- 誠(chéng)信為本杜絕曠工
- 嚴(yán)守校規(guī)我的承諾
- 井位建設(shè)合同范本
- 電子技術(shù)基礎(chǔ)練習(xí)題庫(kù)(含參考答案)
- 兒童流感診療及預(yù)防指南(2024醫(yī)生版)
- 語(yǔ)文中考《非連續(xù)性文本閱讀》專題精練(含答案解析)
- 沐足行業(yè)嚴(yán)禁黃賭毒承諾書
- 科幻小說(shuō)賞析與創(chuàng)意寫作智慧樹(shù)知到期末考試答案2024年
- 沖上云霄-飛機(jī)鑒賞智慧樹(shù)知到期末考試答案2024年
- 年處理5000噸芒果工廠設(shè)計(jì)
- 關(guān)于大學(xué)生生活習(xí)慣對(duì)身體健康狀況影響的調(diào)查報(bào)告
- 冬季施工方案(管道)(完整版)
- 審計(jì)風(fēng)險(xiǎn)外文文獻(xiàn)
- 動(dòng)漫動(dòng)畫制作合同
評(píng)論
0/150
提交評(píng)論