版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 第1章 背景介紹及設(shè)計(jì)目的1</p><p> 1.1背景介紹:1</p><p><b> 1.2設(shè)計(jì)目的2</b></p><p> 第2章 設(shè)計(jì)方案及基本原理3</p><p> 2.1系
2、統(tǒng)設(shè)計(jì)方案3</p><p> 2.2實(shí)驗(yàn)原理:3</p><p><b> 2.3系統(tǒng)連接7</b></p><p> 第3章 程序設(shè)計(jì)9</p><p> 3.1主函數(shù)流程如圖所示9</p><p><b> 3.2程序代碼9</b></p&g
3、t;<p> 第4章 程序運(yùn)行及結(jié)果分析10</p><p><b> 參考文獻(xiàn)11</b></p><p><b> 附 錄12</b></p><p> 第1章 背景介紹及設(shè)計(jì)目的</p><p><b> 1.1背景介紹:</b>&l
4、t;/p><p><b> 一.預(yù)備知識(shí): </b></p><p> 1.熟悉凌陽單片機(jī)的工作原理。 </p><p> ?。?)I/O口的原理和使用設(shè)置; </p><p> (2)時(shí)基中斷的原理和使用設(shè)置; </p><p> 2.熟悉 µ’nSP? IDE 環(huán)境及在該環(huán)境下用
5、匯編和 C 語言編寫的應(yīng)用程序。 </p><p> 3.以A口和B口為例,學(xué)會(huì)使用 SPCE061A單片機(jī) I/O口的基本輸出和輸入功能。 </p><p><b> 二.實(shí)驗(yàn)設(shè)備: </b></p><p> 1.裝有Windows系統(tǒng)和µ’nSP? IDE仿真環(huán)境的PC機(jī)一臺(tái)。 </p><p>
6、; 2.61板一套,LED鍵盤模組一套,10針排線兩根。</p><p><b> 三.實(shí)驗(yàn)說明:</b></p><p> 1.61板的I/O輸出實(shí)驗(yàn)主要以IOA0~7接LED鍵盤模組上的8個(gè)發(fā)光二極管,IOA8IOA15 接鍵盤K1~K8的輸入。因61板核心芯片SPCE061A已內(nèi)置上下拉電阻,所以端口直接連接發(fā)光二極管的驅(qū)動(dòng)端。</p>&l
7、t;p> 2.實(shí)驗(yàn)結(jié)果是按鍵后相應(yīng)發(fā)光二極管點(diǎn)亮。</p><p> 3.代碼編寫上,主要涉及SPCE061A的端口寄存器IOA和IOB。</p><p><b> 四.實(shí)驗(yàn)要求: </b></p><p> 1.編程要求:主程序由C語言編寫。</p><p> 2.實(shí)現(xiàn)功能:通過µ’nSP?
8、IDE 環(huán)境及在該環(huán)境下用匯編語言和 C語言編寫的應(yīng)用程序,實(shí)現(xiàn)仿真功能,從而完成用按鍵控制二極管的發(fā)光與關(guān)閉功能。</p><p> 3. 實(shí)驗(yàn)現(xiàn)象:通過 IOA口輸出的數(shù)據(jù)控制8個(gè)發(fā)光二極管的點(diǎn)亮與熄滅。8個(gè)發(fā)光二極管動(dòng)態(tài)點(diǎn)亮和熄滅,點(diǎn)亮與熄滅狀態(tài)順序如下表 1-1所示。其中,“●”表示二極管是點(diǎn)亮狀態(tài),“○”表示二極管是熄滅狀態(tài)。表中D4~D11為實(shí)驗(yàn)箱上發(fā)光二極管電路模塊中從左到右的 8 個(gè)發(fā)光二極管。
9、</p><p> 表 1-1 8個(gè)發(fā)光二極管狀態(tài)</p><p><b> 1.2設(shè)計(jì)目的:</b></p><p> 隨著單片機(jī)應(yīng)用的日益廣泛,在校學(xué)生加強(qiáng)對(duì)單片機(jī)的認(rèn)識(shí)和動(dòng)手能力,已經(jīng)是非常重要的一項(xiàng)鍛煉。課程設(shè)計(jì)就是為加強(qiáng)實(shí)踐機(jī)會(huì)、培養(yǎng)學(xué)生動(dòng)手能力的一個(gè)重要環(huán)節(jié),將理論知識(shí)與實(shí)際聯(lián)系起來的一個(gè)關(guān)鍵機(jī)會(huì)。 </p>
10、<p> 本課程設(shè)計(jì)的基本要求是: </p><p> 1.熟悉編程環(huán)境及在該環(huán)境下用匯編和 C 語言編寫的應(yīng)用程序。</p><p> 2. 熟悉簡(jiǎn)單的匯編語言指令。 </p><p> 3. 以 A口和 B 口為例,學(xué)會(huì)使用 SPCE061A單片機(jī) I/O口的基本輸出和輸入功能。</p><p> 第2章 設(shè)計(jì)方案及基
11、本原理 </p><p> 2.1系統(tǒng)設(shè)計(jì)方案 </p><p> 根據(jù)設(shè)計(jì)要求給出系統(tǒng)框圖如圖2-1:</p><p><b> 圖2-1 系統(tǒng)框圖</b></p><p><b> 2.2實(shí)驗(yàn)原理:</b></p><p> 2.2.1 數(shù)碼管工作原理</
12、p><p> 實(shí)驗(yàn)箱的 6 位 8 段數(shù)碼管電路采用“共陰”連接,陰極公共端(COM)由晶體管推動(dòng)。實(shí)驗(yàn)箱上的數(shù)碼管共有兩種,如圖 2-2。 </p><p> 圖2-2 兩種數(shù)碼管圖</p><p> 首先介紹兩個(gè)基本概念:段碼和位碼,段碼即段選信號(hào) SEG,它負(fù)責(zé)數(shù)碼管顯示的內(nèi)容,圖 2-3中 a~g、dp組成的數(shù)據(jù)(a 為最低位,dp 為最高位)就是段碼。比
13、如 1的段碼“0x06”(b=1,c=1,其他都為 0,即段碼為 00000110b),8 的段碼為“0x7f” ;位碼即位選信號(hào) DIG,它決定哪個(gè)數(shù)碼管工作,哪個(gè)數(shù)碼管不工作,比如僅使能 DIG4,那么 6 個(gè) LED 只有 LED4 工作,而其它的五個(gè)都不工作。</p><p> 當(dāng)需要某一位數(shù)碼管顯示數(shù)字時(shí),只需要先選中這位數(shù)碼管的位信號(hào),再給顯示數(shù)字的段碼。比如當(dāng)在第一個(gè)數(shù)碼管上顯示一個(gè)“6”時(shí),如圖
14、 2.3,先選中第一位數(shù)碼管的位信號(hào)(實(shí)驗(yàn)箱上標(biāo)號(hào)是“1” ) ,即先給和“1”相連接的 I/O 口送 1;再把段碼設(shè)置為 0x007d,即在 a、c、d、e、f、g各段引出的端口檢測(cè)到高電平,就可以顯示一個(gè)“6”出來。 </p><p> 圖2-3數(shù)碼管顯示“6”</p><p> 2.2.2實(shí)驗(yàn)箱上 SPCE061A控制數(shù)碼管的顯示 </p><p> 實(shí)
15、驗(yàn)箱在6位8段數(shù)碼管的上面有 16 對(duì)排針,其中有 7 個(gè)“a\b\c\d\e\f\g\”是控制此位 8 段數(shù)碼管的段碼選擇的,另有 6 個(gè)“1\2\3\4\5\6”是控制6位8 段數(shù)碼管位選擇的,“DD”控制“點(diǎn)”或“分隔符號(hào)”,“DP”控制小數(shù)點(diǎn)。把實(shí)驗(yàn)箱上JP4和JP5 的引針用跳線全部短接??驁D如圖 2-4。 </p><p> 圖2-4實(shí)驗(yàn)箱上SPCE061A和6位LED顯示電路模塊的連接<
16、/p><p> 按照上面數(shù)碼管的顯示原理,當(dāng)要在第四個(gè)數(shù)碼管上顯示一個(gè)“E”時(shí),先要通過 IOB12 端口給“4”端口送一個(gè) 1,選中第四個(gè)數(shù)碼管;由圖 4-1 可以看出,顯示“E”時(shí),需要 a、d、e、f、g段被點(diǎn)亮,所以給 IOA0、IOA3、IOA4、IOA5、IOA6 端口各送一個(gè) 1,則在 a、d、e、f、g 端口各能檢測(cè)到一個(gè)高電平,就可以點(diǎn)亮 a、d、e、f、g 段,顯示一個(gè)“E” 。</p&g
17、t;<p> 2.2.3 µ’nSP? IDE指令系統(tǒng)</p><p> µ’nSP?的指令系統(tǒng)算術(shù)邏輯操作符與 ANSI-C 算符大同小異,如表 1-1。</p><p> 表 2-1 µ’nSP?指令的算術(shù)邏輯操作符</p><p> µ’nSP?支持 ANSI-C 中使用的基本數(shù)據(jù)類型,如表 1-2
18、。</p><p> 表2-2µ’nSP?對(duì) ANSI-C 中基本數(shù)據(jù)類型的支持</p><p> 2.2.4 I/O口的設(shè)置</p><p> SPCE061A有32個(gè)可編程I/O端口,分為兩組:IOA0~15口和IOB0~15口,其中每一個(gè)端口都可以被單獨(dú)設(shè)置為輸入或者輸出口。SPCE061A的I/O口的輸入輸出方式是通過方向控制向量Dir、屬性
19、向量Attrib和數(shù)據(jù)向量Data三個(gè)向量合控制的。I/O口的組合控制設(shè)置如表 2-3所示</p><p> 表2-3 I/O 端口的組合控制設(shè)置</p><p> 注:端口位默認(rèn)為帶下拉電阻的輸入管腳。 </p><p> 按照上面的組合控制設(shè)置,當(dāng)IOA的低八位設(shè)置為同相低電平輸出口時(shí),Dir、Attrib和Data 三個(gè)向量的設(shè)置如下表2-4所示。&l
20、t;/p><p> 表2-4IOA的低8位設(shè)置為同相低電平輸入口</p><p> 在 SPCE061A的 I/O口被設(shè)置為輸出口時(shí),當(dāng)Data 寄存器中的某一位寫入“1”時(shí),該位所對(duì)應(yīng)的端口輸出高電平;寫入“0”時(shí),輸出低電平。</p><p><b> 2.3系統(tǒng)連接 </b></p><p> 用 10 針排線
21、將61板的 J8 接口IOA低8位連接到LED鍵盤模組的SEG接口管腳上,將J6接口 IOB 低 8 位連接到 LED 鍵盤模組的 DIG 接口管腳上,將 J9 接口 IOA 高 8 位連接到LED鍵盤模組1*8KEY接口管腳上,將 1*8KEY接口中ROW1接至DGND 上。如圖2-5J8接口圖。</p><p> 圖2-5 J8接口圖</p><p> IOA低 8 位接至SEG接
22、口控制LED的導(dǎo)通,IOA高 8 位連接到 LED鍵盤模組的 1*8KEY接口管腳上,讀取相應(yīng)按鍵值,1*8key中 ROW1與DGND相連,IOB6 連至 DIG7 通過ULN2003A控制8 個(gè)LED的共陰極電平狀態(tài),也可將DIG7直接連至VDD,直接將LED共陰極接地,不用程序控制。</p><p><b> 第3章 程序設(shè)計(jì) </b></p><p> 3
23、.1主函數(shù)流程如圖所示</p><p> 圖3-1主函數(shù)流程圖</p><p><b> 3.2程序代碼 </b></p><p><b> 程序如附錄所示。</b></p><p> 第4章 程序運(yùn)行及結(jié)果分析</p><p><b> 參考文獻(xiàn)<
24、/b></p><p> [1]胡宴如.模擬電子技術(shù)[M].北京: 高等教育出版社,2000.3.</p><p> [2]彭介華.電子技術(shù)課程設(shè)計(jì)指導(dǎo)[M].北京:高等教育出版社,1997.</p><p> [3]羅亞非.凌陽16位單片機(jī)[M].應(yīng)用基礎(chǔ)北京航空航天大學(xué)出版社,2005.</p><p> [4]邱關(guān)源.羅先
25、覺,電路[M].北京:高等教育出版社,2006.5.</p><p> [5]閻石.數(shù)字電子技術(shù)基礎(chǔ)[M].北京高等教育出版社,2006.5.</p><p><b> 附錄</b></p><p><b> 匯編語言版:</b></p><p> .include hardware.in
26、c </p><p> .external F_GetKey </p><p><b> .ram </b></p><p> .var R_key </p><p><b> .code </b></p><p> .publi
27、c _main </p><p><b> _main: </b></p><p> r1 = 0x00FF </p><p> [P_IOA_Dir] = r1 </p><p> [P_IOA_Attrib] = r1 </p><p> r1 = 0xff0
28、0 </p><p> [P_IOA_Data] = r1 </p><p> r1=0x0040 </p><p> [P_IOB_Dir]=r1 </p><p> [P_IOB_Attrib]=r1 </p><p> [P_IOB_Data]=r1 </p>
29、<p> L_MainLoop: </p><p> call F_GetKey </p><p> [R_key] = r1 </p><p> r1 = r1 lsr 4 </p><p> r1 = r1 lsr 4
30、 </p><p> [P_IOA_Data] = r1</p><p> jmp L_MainLoop </p><p> .include hardware.inc </p><p> .define KEY_ALL 0xff00 </p><p> .public F_GetKey; <
31、/p><p><b> .code </b></p><p> F_GetKey: </p><p> push r2 to [sp] </p><p> r1=[P_IOA_Dir] </p><p> r1&=~KEY_ALL </p><p> [
32、P_IOA_Dir]=r1 </p><p> r1=[P_IOA_Attrib] </p><p> r1&=~KEY_ALL </p><p> [P_IOA_Attrib]=r1 </p><p> r1=[P_IOA_Buffer] </p><p> r1|=KEY_ALL </p
33、><p> [P_IOA_Buffer]=r1 </p><p> L_WaitKeyDown: </p><p><b> r1=1 </b></p><p> [P_Watchdog_Clear]=r1 </p><p> r1=[P_IOA_Data] </p>&l
34、t;p> r1&=KEY_ALL </p><p> r1^=KEY_ALL </p><p> jz L_WaitKeyDown </p><p> L_WaitKeyUp: </p><p><b> r2=1 </b></p><p> [P_Watch
35、dog_Clear]=r2 </p><p> r2=[P_IOA_Data] </p><p> r2&=KEY_ALL </p><p> r2^=KEY_ALL </p><p> jnz L_WaitKeyUp </p><p> pop r2 from [sp] </p>&l
36、t;p><b> retf </b></p><p><b> C 語言版: </b></p><p> #define P_IOA_Data (volatile unsigned int *)0x7000 </p><p> #define P_IOA_Buffer (volatile unsigne
37、d int *)0x7001 </p><p> #define P_IOA_Dir (volatile unsigned int *)0x7002 </p><p> #define P_IOA_Attrib (volatile unsigned int *)0x7003 </p><p> #define P_IOB_Data (volatile
38、 unsigned int *)0x7005 </p><p> #define P_IOB_Buffer (volatile unsigned int *)0x7006 </p><p> #define P_IOB_Dir (volatile unsigned int *)0x7007 </p><p> #define P_IOB_Attrib
39、(volatile unsigned int *)0x7008 </p><p> #define P_Watchdog_Clear (volatile unsigned int *)0x7012 </p><p> extern unsigned GetKey(void); </p><p> int main() </p><p>
40、;<b> { </b></p><p> unsigned Key = 0x0000; </p><p> *P_IOA_Dir = 0x00ff; </p><p> *P_IOA_Attrib = 0x00ff; </p><p> *P_IOA_Data =
41、0xff00; </p><p> *P_IOB_Dir=0x0040; </p><p> *P_IOB_Attrib=0x0040; </p><p> *P_IOB_Data=0x0040; </p><p> while(1) </p><p><b>
42、; { </b></p><p> Key = GetKey(); </p><p> Key = Key >> 8; </p><p> *P_IOA_Data = Key; </p><p><b> } } </b></p><p> #
43、define P_IOA_Data (volatile unsigned int *)0x7000 </p><p> #define P_IOA_Buffer (volatile unsigned int *)0x7001 </p><p> #define P_IOA_Dir (volatile unsigned int *)0x7002 </p><
44、;p> #define P_IOA_Attrib (volatile unsigned int *)0x7003 </p><p> #define P_Watchdog_Clear (volatile unsigned int *)0x7012 </p><p> #define KEY_ALL 0xff00 // 使用IOA8~IOA15作為鍵盤輸入口 </p&g
45、t;<p> unsigned GetKey(void) </p><p><b> { </b></p><p> unsigned KeyValue = 0x0000;</p><p> *P_IOA_Dir&=~KEY_ALL; </p><p> *P_IOA_Attrib&
46、;=~KEY_ALL; </p><p> *P_IOA_Buffer|=KEY_ALL; </p><p> while(KeyValue==0) </p><p><b> { </b></p><p> KeyValue=(*P_IOA_Data & KEY_ALL)^KEY_ALL; </p
47、><p> *P_Watchdog_Clear=1; </p><p> } KeyValue=(*P_IOA_Data&KEY_ALL)^KEY_ALL; </p><p> while((*P_IOA_Data&KEY_ALL)^KEY_ALL) </p><p><b> { </b&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)——單片機(jī)控制步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 基于單片機(jī)的電梯控制系統(tǒng)
- 單片機(jī)的控制系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的水位控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)溫度控制系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)水位控制系統(tǒng)課程設(shè)計(jì)
- 冷庫單片機(jī)控制系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--單片機(jī)溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)(溫度控制系統(tǒng))
- 單片機(jī)課程設(shè)計(jì)--溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)控制的交通燈控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)(洗衣機(jī)控制系統(tǒng))
- 單片機(jī)控制系統(tǒng)課程設(shè)計(jì)--基于單片機(jī)的電壓測(cè)量系統(tǒng)的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制系統(tǒng)
- 《單片機(jī)課程設(shè)計(jì)》---水塔水位控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--水塔水位控制系統(tǒng)
評(píng)論
0/150
提交評(píng)論