版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、試康訓(xùn)然去垮二O六二O七 學(xué)年第一學(xué)期信息科學(xué)與工程學(xué)院電子技術(shù)綜合設(shè)計(二)課程設(shè)計報告班 級:姓 名:學(xué) 號:指導(dǎo)教師:二O六年十二月一日1、課程設(shè)計內(nèi)容及要求:蜂鳴計算器設(shè)計利用普中科技HC6800-ES V2.0單片機(jī)開發(fā)板設(shè)計一款帶蜂鳴器的電子計算器。主要使用開發(fā)板上的數(shù)碼管、LED點(diǎn)陣、矩陣鍵盤、蜂鳴器等模塊功能。開發(fā)板配有光盤,里面有各個模塊的使用說明和程序范例可供參考。設(shè)計要求:«1*&遼1* *1)每2位同學(xué)分工協(xié)作。2)上電開機(jī)或者復(fù)位鍵按下之后,2個4位數(shù)碼管分別自動顯示 2個同學(xué)學(xué)號的后4位。3)定義矩陣鍵盤的 S1-S9代表數(shù)字按鍵1-9,鍵盤S10
2、代表數(shù)字按 鍵0,鍵盤S11-S16分別代表按鍵+、-、x、六=、C,其中C按鍵為計算 器清零按鍵,按下 C鍵計算器開始新的計算。4)計算器計算過程中,用LED點(diǎn)陣顯示+、-、X、+運(yùn)算符號,用8位數(shù)碼管顯示鍵入的數(shù)字和運(yùn)算的結(jié)果。鍵入時依次顯示并自動移位,例如 18+9=27,先鍵入 1,顯示 1,再鍵入 8, 1 自動左移一位顯示 18,鍵入 + , LED點(diǎn)陣顯示+,鍵入9,數(shù)碼管之前顯示的18消失并重新顯示為 9,鍵入 =,數(shù)碼管顯示運(yùn)算結(jié)果 27。5) 為這 16 個矩陣鍵盤的按鍵分配不同的蜂鳴器頻率, 使得按下不同 的按鍵蜂鳴器響聲不同,便于識別按鍵。6) 按鍵應(yīng)具有一定的消除抖動
3、功能。7) 所有單片機(jī)程序代碼都用 C 語言編寫,并燒寫到單片機(jī)中上電自 動運(yùn)行。報告要求 :(1) 在報告中應(yīng)對蜂鳴計算器系統(tǒng)的設(shè)計思想、設(shè)計方法用文字詳細(xì)說明。(2) 在報告中應(yīng)有完整的程序清單 ( 必需加注釋 ) 。(3) 在報告中應(yīng)有完整的程序流程框圖。(4) 在報告中應(yīng)有專門的段落說明 2 位同學(xué)各自的工作內(nèi)容。 2個同學(xué)合寫一個報 告即可,但封面要有 2 位同學(xué)的名字和學(xué)號、班級。(5) 談?wù)勛约和ㄟ^這次設(shè)計實(shí)踐的收獲和體會。2、課程考核方式考查要求: 提交課程設(shè)計報告,設(shè)計報告內(nèi)容包括設(shè)計任務(wù), 設(shè)計要求,軟件設(shè)計,程序結(jié)果描述。1) 每 2位同學(xué)合作完成題目的基本功能。包括設(shè)計
4、報告和程序清單(帶注釋 ),運(yùn)行結(jié)果及有關(guān)運(yùn)行說明。2) 程序檢查及功能演示。分優(yōu)、良、中、及格、不及格如為不及格,下學(xué)期需進(jìn)行重修。3) 課程設(shè)計報告,正規(guī)書寫打印,否則不計成績。4) 設(shè)計報告禁止雷同,驗收時每位同學(xué)現(xiàn)場演示設(shè)計結(jié)果,指導(dǎo)老師隨時針對電路設(shè)計、程序調(diào)試、代碼功能等各個方面進(jìn)行提問。5) 驗收時回收開發(fā)板及全部附屬設(shè)備,以備下一級同學(xué)使用,請不要損壞開發(fā)板設(shè)備。3、報告正文(1) 設(shè)計思想:計算器計算過程中,用LED點(diǎn)陣顯示+、-、X、十運(yùn)算符號,用8位數(shù)碼 管顯示鍵入的數(shù)字和運(yùn)算的結(jié)果。鍵入時依次顯示并自動移位,例如 18+9=27,先鍵入1,顯示1,再鍵入8,1自動左移一
5、位顯示18,鍵入+, LED點(diǎn)陣顯示+,鍵入9,數(shù)碼管之前顯示的18消失并重新顯示為9,鍵 入=27。數(shù)碼管顯示鍵入的數(shù)字和結(jié)果 0; LED點(diǎn)陣顯示加減乘除符號;4 >4矩陣鍵盤分別代表按鍵:按鍵S0S9代表數(shù)字按鍵1-9,按鍵S10代表 數(shù)字按鍵0,按鍵S11-S16代表+、一、>、十、二、C,其中C按鍵為計 算器清零按鍵;這16個矩陣鍵盤的按鍵分配不同的蜂鳴器頻率,使得其 按下時有不同的聲音以便分別。(2) 設(shè)計方法:( 、89C52單片機(jī)丿數(shù)碼管LED點(diǎn)陣矩陣鍵盤蜂鳴器編寫一段程序,在上電之后或按復(fù)位鍵之后 2個4位數(shù)碼管分別自動顯示2個同學(xué)學(xué)號的后4位。通過矩陣鍵盤,LE
6、D點(diǎn)陣,數(shù)碼管完成計算器 功能。數(shù)字及結(jié)果在數(shù)碼管上顯示,+、X、十、二在LED點(diǎn)陣上顯示, C鍵為清零鍵,每個按鍵對應(yīng)不同的音頻。(3) 程序流程圖:開始顯示學(xué)號*檜測鏈算89C52單片機(jī):C89C52有40個引腳,4個8位并行I/O 口,1個全雙工異步串行口,同時內(nèi)含5個中斷源,2個優(yōu)先級,2個16位定時/計數(shù)器。STC89C52勺存儲器系統(tǒng)由4K的程序存儲器(ROM)和128B的數(shù)據(jù)存儲器(RAM組成。STC89C5引腳圖:(T2)F1 0CrZEKjFl. 1Pl. 2 Pl. S fi.4 Fl 5Fl.6Fl. 7RESETRXD/P3. 0 rxD/ps,1 IHT0/F3.2
7、Im/F3. 3TQ/F.4 ri/pa. 5WF3. 7XT AL 2MTAL1VssL J VccFO O/.ADQPO. 1/jlDl PO. 2/AD2PO. 3/AD3J FO 4/AIMFO 5/AB5 PO. 6/AD&PO. 7/AD71 A:.E/F時J FSEKF2. 7/JID15P2. 6/014 F2. 5/AD1 3 J F2. 4/AB1 ?F2. 3/AB11F2. 2/AD1 0P2. 1/09P2. 0/AD8數(shù)碼管:這類數(shù)碼管可以分為共陽極與共陰極兩種,共陽極就是把所有LED的陽 極連接到共同接點(diǎn)com而每個LED的陰極分別為a、b、c、d、e、f
8、、g 及dp (小數(shù)點(diǎn));共陰極則是把所有LED的陰極連接到共同接點(diǎn)com而 每個LED的陽極分別為a、b、c、d、e、f、g及dp (小數(shù)點(diǎn)),如下圖 所示。圖中的8個LED分別與上面那個圖中的 ADP各段相對應(yīng),通過控制各個LED的亮滅來顯示數(shù)字DPo0 6IOV 5LED點(diǎn)陣:腎黒爲(wèi)LEO的正極屈列7列1列麗例2行 4行市00000T手A ooeo 一的5行丁行 &行術(shù)s行2列3刊 5列第一列D038S3NOPB-<i&9-G-SGe-Zoooo 0O0O / /pooo 0 ooo / /aooo 0oao / "pooo Ooo /矩陣鍵盤:-vcc首
9、先辨別鍵盤中有無鍵按下,有單片機(jī)I/O 口向鍵盤送全掃描字,然后 讀入行線狀態(tài)來判斷。方法是:向行線輸出全掃描字 00H,把全部列線置 為低電平,然后將列線的電平狀態(tài)讀入累加器 A中。如果有按鍵按下,總 會有一根行線電平被拉至低電平從而使行線不全為 1。判斷鍵盤中哪一個鍵被按下使通過將列線逐列置低電平后,檢查行輸入狀態(tài)來實(shí)現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài),如 果全為1,則所按下的鍵不在此列;如果不全為 1,則所按下的鍵必在此 列,而且是在與零電平行線相交的交點(diǎn)上的那個鍵。4、程序清單:/*實(shí)驗名 :計算器使用的 IO數(shù)碼管使用 P0,P2.2,P2.3,P2.4 鍵盤使用
10、P1 點(diǎn)陣使用 p3.6,p3.5,p3.4 蜂鳴器使用 p1.5* 實(shí)驗效果 :* 注 意 :*/#include<reg51.h>#include<string.h>#include<intrins.h>#include <math.h>#define GPIO_DIG P0#define GPIO_KEY P1sbit Beep = P1A5 ;sbit LSA=P2A2;sbit LSB=P2A3;sbit LSC=P2A4;sbit SRCLK=P3W;sbit RCLK=P3A5;sbit SER=P3A4;/- 列選通控制 -/TA
11、B8unsignedcharcode0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/- 點(diǎn)陣字碼 -/unsigned char code CHARCODE48=0x20,0x20,0xf8,0x20,0x20,0x00,0x00,0x00, /0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00, /0x88,0x50,0x20,0x50,0x88,0x00,0x00,0x00, /0x20,0x20,0xa8,0x20,0x20,0x00,0x00,0x00, /;unsigned char code tone =115,102,
12、91,86,77,68,61,57,50,45;/09 按鍵音unsigned char code DIG_CODE11= 0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f;/ 無顯示、 1、2、3、4、5、6、7、8、9、0 的顯示碼 unsigned char KeyValue;/ 用來存放讀取到的鍵值unsigned long shu;/ 存放顯示的數(shù)unsigned char KeyState; / 記錄按鍵的狀態(tài), 0 沒有, 1 有 unsigned char DisplayData8;延時 10ms/ 檢測按鍵函數(shù)動態(tài)顯
13、示函數(shù)/ 用來存放要顯示的 8 位數(shù)的值void Delay10ms(); /void KeyDown();void DigDisplay(); /存入數(shù)void xianshi(unsigned long shu); / void dian(unsigned int j); / 點(diǎn)陣顯示void delay(unsigned int time); / 延時void Hc595SendByte(unsigned char dat);/發(fā)送一個字節(jié)的數(shù)據(jù)void sound (unsigned char); / 發(fā)聲函數(shù)void delay8us (unsigned char); /發(fā)聲函數(shù)配套
14、延時函數(shù)/*函數(shù)名: main* 函數(shù)功能 : 主函數(shù)*輸入:無*輸出:無*/void main(void)unsigned char i,c,e;unsigned long num,a,b,d,n2,xuehao;xuehao=70057007; / 顯示學(xué)號xianshi(xuehao);KeyState=0;init:num=n2=0;i=0,e=0;while(1)KeyDown();numif(KeyState=1&&KeyValue<10&&i=0) / 將第一個數(shù)存入并顯示KeyState=0;switch(KeyValue)case(0):
15、num=num*10+1;sound(0);break;case(1):num=num*10+2;sound(1); break;case(2):num=num*10+3;sound(2); break; num=num*10+4;sound(3); break;case(4):num=num*10+5;sound(4); break;case(5):num=num*10+6;sound(5); break;case(6):num=num*10+7;sound(6); break;case(7):num=num*10+8;sound(7); break;case(8):num=num*10+9
16、;sound(8); break; case(9):num=num*10+0;sound(9); break;xianshi(num);if(KeyState=1&&KeyValue<10&&i=1)KeyState=0;switch(KeyValue)/ 將第一個數(shù)存入 n2 并顯示case(0):n2=n2*10+1;sound(0); break;case(1):n2=n2*10+2;sound(1); break;case(2):n2=n2*10+3;sound(2); break;case(3):n2=n2*10+4;sound(3); brea
17、k;case(4):n2=n2*10+5;sound(4); break;case(5):n2=n2*10+6;sound(5); break;case(6):n2=n2*10+7;sound(6); break;case(7):n2=n2*10+8;sound(7); break;case(8):n2=n2*10+9;sound(8); break;case(9):n2=n2*10+0;sound(9); break;xianshi(n2);else if(KeyState=1&&KeyValue<14)a=num;i=1;c=KeyValue;switch(c)cas
18、e(10):dian(0); break;/ 顯示加case(11):dian(1); break;/ 顯示減case(12):dian(2); break;/ 顯示乘case(13):dian(3); break;/ 顯示除else if(KeyState=1&&KeyValue=14)b=n2;switch(c)case(10):d=a+b; break;/ 計算加法case(11):if(b>a)d=b-a;e=1;else d=a-b;break;/ 計算減法case(12):d=a*b; break;/計算減法case(13):d=a/b; break;/ 計算
19、除法xianshi(d); / 顯示結(jié)果else if(KeyState=1&&KeyValue=15)/ 復(fù)位goto init;DigDisplay();/*函數(shù)名: sound* 函數(shù)功能 : 使用蜂鳴器發(fā)出聲音*輸入: 頻率*輸出: 無*/void sound(unsigned char x)unsigned char i;for(i=0;i<60;i+) / 執(zhí)行 60 次Beep=0;delay8us(tonex); / 蜂鳴器動作 Beep=1;delay8us(tonex); /蜂鳴器不動作 /* 函 數(shù) 名 : delay8us* 函數(shù)功能 : 延時*
20、輸入:時長* 輸出:無*/void delay8us (unsigned char x)unsigned char i,j;for(i=0;i<x;i+)for(j=0;j<1;j+);/* 函 數(shù) 名 : DigDisplay* 函數(shù)功能 : 使用數(shù)碼管顯示* 輸入:無* 輸出:無*/void DigDisplay()unsigned char i;unsigned int j;for(i=0;i<8;i+)switch(i) / 位選,選擇點(diǎn)亮的數(shù)碼管,case(0):LSA=0;LSB=0;LSC=0; break;/ 顯示第 0 位LSA=1;LSB=0;LSC=0;
21、 break;/ 顯示第 1 位 case(2):LSA=0;LSB=1;LSC=0; break;/ 顯示第 2 位case(3):LSA=1;LSB=1;LSC=0; break;/ 顯示第 3 位case(4):LSA=0;LSB=0;LSC=1; break;/ 顯示第 4 位case(5):LSA=1;LSB=0;LSC=1; break;/ 顯示第 5 位case(6):LSA=0;LSB=1;LSC=1; break;/ 顯示第 6 位 case(7):LSA=1;LSB=1;LSC=1; break;/ 顯示第 7 位 GPIO_DIG=DisplayDatai;/ 發(fā)送段碼j
22、=10; / 掃描間隔時間設(shè)定 while(j-);GPIO_DIG=0x00;/ 消隱* 函 數(shù) 名 : KeyDown* 函數(shù)功能 : 檢測有按鍵按下并讀取鍵值* 輸入:無* 輸出:無*/void KeyDown(void)unsigned int a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)Delay10ms();a+;a=0;if(GPIO_KEY!=0x0f)KeyState=1;/ 有按鍵按下/ 測試列GPIO_KEY=0X0F;/ Delay10ms();switch(GPIO_KEY)case(0X07): KeyValue=0;break;case
23、(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;/ default: KeyValue=17; / 檢測出錯回復(fù) 17 意思是把 數(shù)碼管全滅掉。/ 測試行 GPIO_KEY=0XF0;Delay10ms();switch(GPIO_KEY)case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe
24、0): KeyValue=KeyValue+12;break;/ default: KeyValue=17;while(a<500)&&(GPIO_KEY!=0xf0) / 按鍵松手檢測Delay10ms();a+;a=0;I* 函數(shù)名: Delay10ms* 函數(shù)功能: 延時函數(shù),延時 10ms* 輸 入: 無* 輸 出: 無*void Delay10ms(void) / 誤差 0usunsigned char a,b,c;for(c=1;c>0;c-)for(b=38;b>0;b-) for(a=130;a>0;a-);/*函數(shù)名: xianshi*
25、 函數(shù)功能 : 將數(shù)字存入*輸入: 數(shù)*輸出: 無*/void xianshi(unsigned long shu)unsigned char i,j;for(i=0;i<8;i+)j=shu%10;shu/=10;if(j=0&&shu!=0)j=10;DisplayDatai=DIG_CODEj;/* * 函數(shù)名 : delay* 函數(shù)功能 : 延時* 輸入 : 延時時長* 輸出 : 無*/void delay(unsigned int time) unsigned int i,j;for(i=0;i<time;i+)for(j=0;j<121;j+);* 函數(shù)名: Hc595SendByte(unsigned char dat)* 函數(shù)功能: 想 74H595 發(fā)送一個字節(jié)的數(shù)據(jù)* 輸入: 無* 輸出: 無*/void Hc595Sen
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 閩北職業(yè)技術(shù)學(xué)院《數(shù)據(jù)挖掘與數(shù)據(jù)分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 漯河職業(yè)技術(shù)學(xué)院《基礎(chǔ)日語(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 魯迅美術(shù)學(xué)院《結(jié)構(gòu)動力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 婁底幼兒師范高等專科學(xué)?!督ㄖb飾工程施工技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 柳州鐵道職業(yè)技術(shù)學(xué)院《飼料添加劑學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度電力線路巡檢班組長安全責(zé)任協(xié)議書3篇
- 遼寧政法職業(yè)學(xué)院《生態(tài)監(jiān)測與評價》2023-2024學(xué)年第一學(xué)期期末試卷
- 遼寧商貿(mào)職業(yè)學(xué)院《電影導(dǎo)演大師作品賞析》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年線上線下融合銷售服務(wù)合同范本3篇
- 二零二五版清潔行業(yè)市場分析咨詢服務(wù)協(xié)議2篇
- 產(chǎn)品共同研發(fā)合作協(xié)議范本5篇
- 風(fēng)水學(xué)的基礎(chǔ)知識培訓(xùn)
- 吸入療法在呼吸康復(fù)應(yīng)用中的中國專家共識2022版
- 1-35kV電纜技術(shù)參數(shù)表
- 信息科技課程標(biāo)準(zhǔn)測(2022版)考試題庫及答案
- 施工組織設(shè)計方案針對性、完整性
- 2002版干部履歷表(貴州省)
- DL∕T 1909-2018 -48V電力通信直流電源系統(tǒng)技術(shù)規(guī)范
- 2024年服裝制版師(高級)職業(yè)鑒定考試復(fù)習(xí)題庫(含答案)
- 門診部縮短就診等候時間PDCA案例-課件
評論
0/150
提交評論