




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、科技大學(xué)信息科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)(32位微機(jī)原理與接口技術(shù))班級(jí) : 姓名 : 課題名稱(chēng) : 7段數(shù)碼管電子鬧鐘一、設(shè)計(jì)要求:利用試驗(yàn)箱資源,自行設(shè)定一個(gè)7段數(shù)碼管電子鬧鐘,完成電路設(shè)計(jì)、電路連線、軟件編程、系統(tǒng)調(diào)試等工作。所實(shí)現(xiàn)的電梯模擬系統(tǒng)主要功能如下。用7段數(shù)碼管或液晶顯示當(dāng)前的時(shí)間。允許設(shè)置響鈴時(shí)間。允許設(shè)施當(dāng)前時(shí)間。用發(fā)光二極管的閃爍表示響鈴。按某個(gè)按鈕后,鬧鐘停止響應(yīng)。二、設(shè)計(jì)原理:1、設(shè)計(jì)所用到的芯片:8086CPU中央處理器、8255A并行接口芯片、74LS244三態(tài)緩沖器2、硬件電路設(shè)計(jì)電路圖3、硬件電路設(shè)計(jì)原理用8255芯片實(shí)現(xiàn)4位共陽(yáng)數(shù)碼管的動(dòng)態(tài)掃描,就是將數(shù)碼管的段碼由
2、8255PB口送到數(shù)碼管的段選端,數(shù)碼管的位碼由8255PA口送到數(shù)碼管的位選端,這樣每一時(shí)刻就可以利用8255讓4個(gè)數(shù)碼管當(dāng)中的一位顯示一個(gè)特定的數(shù),再設(shè)計(jì)相應(yīng)的驅(qū)動(dòng)程序來(lái)控制8255,就可以實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示,能顯示4位數(shù)。另外通過(guò)PC口來(lái)控制三個(gè)LED的亮滅,以表示相應(yīng)的信息。用74HC244將數(shù)據(jù)有數(shù)據(jù)總線送給CPU。244的四個(gè)輸入端與四個(gè)彈跳按鍵相接,當(dāng)其中某一個(gè)按鈕按下時(shí),對(duì)應(yīng)數(shù)據(jù)總線中的那一位的數(shù)據(jù)就是0,否則為1,因此,我們可以通過(guò)244來(lái)改變電子鬧鐘的工作模式。4、軟件設(shè)計(jì)流程圖 開(kāi)始初始化檢測(cè)鬧鐘顯示數(shù)碼管及LED燈掃描檢測(cè)按鍵 5、總體設(shè)計(jì)用數(shù)碼管的動(dòng)態(tài)掃描來(lái)作為顯示
3、部分,用四個(gè)按鍵來(lái)作為操控部分,CPU接收用戶(hù)輸入的控制信號(hào)并進(jìn)行分析,切換到相應(yīng)的狀態(tài)。按鍵部分是通過(guò)循環(huán)從244讀取數(shù)據(jù)到CPU,然后進(jìn)行分析,若從四個(gè)按鍵讀回的數(shù)據(jù)均為1,表示沒(méi)有按鍵被按下,因此不做任何額外操作。若第一個(gè)按鍵被按下,表示對(duì)分進(jìn)行加操作,如果當(dāng)前是模式0,則對(duì)實(shí)時(shí)時(shí)間分鐘進(jìn)行加1操作,否則對(duì)鬧鐘定時(shí)時(shí)間的分鐘進(jìn)行加1操作;若第二個(gè)按鍵被按下,當(dāng)前模式為0時(shí)對(duì)實(shí)時(shí)秒進(jìn)行加1操作,當(dāng)前模式為1時(shí)對(duì)鬧鐘的定時(shí)時(shí)間秒進(jìn)行加1操作;若第三個(gè)鍵被按下,模式0和1進(jìn)行切換;按下第四個(gè)按鍵時(shí),若當(dāng)前鬧鐘正在響鈴,及LED燈D3在閃爍,按下此按鍵后停止響鈴,即關(guān)掉LED燈,不讓其閃爍,若當(dāng)
4、前沒(méi)有處在響鈴時(shí)段,按下此按鍵不做任何操作。顯示部分。一是通過(guò)四位數(shù)碼管的動(dòng)態(tài)掃描來(lái)顯示當(dāng)前的時(shí)間,二是通過(guò)三個(gè)LED燈來(lái)表示當(dāng)前所處的模式,若D1亮,表示處在模式0,即實(shí)時(shí)時(shí)間顯示及調(diào)節(jié)模式,若D2亮,表示處在模式1,即定時(shí)時(shí)間顯示及調(diào)節(jié)模式。若D3在閃爍,表示當(dāng)前正處在鬧鐘響的時(shí)間段,若為滅表示當(dāng)前不處在鬧鈴時(shí)段。計(jì)時(shí)部分。主要是通過(guò)8086內(nèi)部產(chǎn)生的每秒產(chǎn)生18.2次的中斷來(lái)計(jì)時(shí),先設(shè)置好兩個(gè)變量second,minute,改變?cè)瓉?lái)18.2次中斷的服務(wù)子程序的入口地址,改為自己編寫(xiě)的中斷服務(wù)子程序的入口地址。設(shè)置一個(gè)變量count,每次中斷時(shí)count就自加1,當(dāng)count加到18時(shí)將其
5、清零并使second加1,表示已計(jì)時(shí)1秒,類(lèi)似的,當(dāng)second加到60的時(shí)候?qū)⑵淝辶悴⑹筸inute加1。中斷服務(wù)子程序主要的內(nèi)容就是實(shí)現(xiàn)count、second、minute的自加及清零。有了計(jì)時(shí)部分,顯示部分,操控部分,將它們組合起來(lái)就完成了鬧鐘的設(shè)計(jì)。用計(jì)時(shí)部分來(lái)計(jì)時(shí)并通過(guò)顯示部分將用于計(jì)時(shí)的兩個(gè)變量顯示出來(lái),用操控部分來(lái)設(shè)置定時(shí)時(shí)間和實(shí)時(shí)時(shí)間,這樣就實(shí)現(xiàn)了設(shè)計(jì)的需求。三、測(cè)試結(jié)果:程序運(yùn)行后,數(shù)碼管開(kāi)始計(jì)時(shí),波動(dòng)開(kāi)關(guān)3可以調(diào)整狀態(tài),在狀態(tài)1下,led燈1亮,此時(shí)可以設(shè)定當(dāng)前時(shí)間,撥動(dòng)開(kāi)關(guān)1調(diào)整分鐘,撥動(dòng)開(kāi)關(guān)2調(diào)整秒;在狀態(tài)2下,led燈2亮,此時(shí)可以設(shè)定鬧鐘時(shí)間,撥動(dòng)開(kāi)關(guān)1調(diào)整分鐘,
6、撥動(dòng)開(kāi)關(guān)2調(diào)整秒;當(dāng)前時(shí)間到達(dá)鬧鈴時(shí)間時(shí)led燈3閃爍,閃爍頻率為每秒3次,撥動(dòng)開(kāi)關(guān)4可以結(jié)束鬧鈴,led燈結(jié)束閃爍。四、設(shè)計(jì)總結(jié)本設(shè)計(jì)成功的設(shè)計(jì)并實(shí)現(xiàn)了設(shè)計(jì)的需求。附件:程序源代碼: #include<stdio.h> #include<dos.h> #include<conio.h> #include<bios.h> char table_dula=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /段碼 char table_wela=0x01,0x02,0x04,0x08;/位碼 cha
7、r minute=0,second=1; /記錄當(dāng)前時(shí)間的分和秒 char minute1=0,second1=0;/記錄鬧鐘時(shí)間的分和秒 int count=0; int mode=0; /控制方式標(biāo)志位,為是顯示當(dāng)前時(shí)間,為時(shí)調(diào)節(jié)當(dāng)前時(shí)間,為時(shí)調(diào)節(jié)定時(shí)時(shí)間 char clock_led=0xff,clock_button=0;/clock_led為控制鬧鐘鬧鈴時(shí)閃爍的led,主要利用最低位 void interrupt far(interrupt far *OldAsyncInt)(.); void interrupt far AsyncInt(.);/聲明中斷服務(wù)子程序 void del
8、ay(unsigned int t);/延時(shí)函數(shù)聲明 void display(char wei,char num);/顯示第wei位為數(shù)num的顯示函數(shù)的聲明 void ComInit();/端口初始化函數(shù)聲明 void KeyScan();/按鍵掃描的函數(shù)的聲明 void displayAll();/總顯示函數(shù)的聲明 void clock_check();/檢查鬧鐘是否需要響鈴的函數(shù)的聲明 void mian() int c=0;outportb(0x183,0x80);/初始化的控制字outportb(0x180,0x01);outportb(0x181,0x0c);ComInit();
9、 /初始化端口while(1)clock_check(); /循環(huán)檢測(cè)鬧鐘是否需要響displayAll();/顯示數(shù)碼管if(second>=60) /控制秒向分的進(jìn)位second=0;minute+;if(minute>=60)minute=0;KeyScan();/循環(huán)檢測(cè)按鍵c=bioskey(1);/按Esc鍵退出程序if(c=283)break; void delay(unsigned int t) /粗略延時(shí)函數(shù) while(t-)unsigned int i = 600;while(i-); void display(char wei,char num)/在第wei
10、位上顯示數(shù)num outportb(0x180,0);outportb(0x181,table_dulanum);/往B口上送段碼outportb(0x180,table_welawei);/往A口上送位碼 void interrupt far AsyncInt(.)/中斷服務(wù)子程序 disable();/關(guān)閉中斷 count+;/每秒中斷.2秒的中斷 if(count=18)second+; else if(count=36)second+; else if(count=54)second+; else if(count=72)second+; else if(count=91) count
11、=0;second+; if(count%6=0&&clock_button=1)clock_led=clock_led; void ComInit() /替換.2秒中斷原來(lái)的服務(wù)子程序 unsigned char IntVectNum = 0x1c;disable();OldAsyncInt=getvect(IntVectNum);setvect(IntVectNum,AsyncInt);enable(); void KeyScan()/鍵盤(pán)掃描函數(shù)char key;key=inportb(0x190);if(mode=0)/當(dāng)為方式的時(shí)候if(!(key&0x000
12、1) delay(100); key = inportb(0x190); if(!(key&0x0001) while(!(key&0x0001) key = inportb(0x190);delay(100);minute+;if(minute>=60) minute=0; else if(!(key&0x0002) delay(100); key = inportb(0x190); if(!(key&0x0002) while(!(key&0x0002) key = inportb(0x190);delay(100);second+;if(se
13、cond>=60) second=0; else if(mode=1)if(!(key&0x0001) delay(100); key = inportb(0x190); if(!(key&0x0001) while(!(key&0x0001) key = inportb(0x190);delay(100);minute1+;if(minute1>=60) minute1=0; else if(!(key&0x0002) delay(100); key = inportb(0x190); if(!(key&0x0002) while(!(ke
14、y&0x0002) key = inportb(0x190);delay(100);second1+;if(second1>=60) second1=0; if(!(key&0x0004) delay(100); key = inportb(0x190); if(!(key&0x0004) while(!(key&0x0004) key = inportb(0x190);delay(100);mode+;if(mode=2)mode=0; if(!(key&0x0008) delay(100); key = inportb(0x190); if(!
15、(key&0x0008) while(!(key&0x0008) key = inportb(0x190);delay(100);clock_button=0;clock_led=0xff; void displayAll()if(mode=0)display(0,minute/10);delay(1);display(1,minute%10);delay(1);display(2,second/10);delay(1);display(3,second%10);delay(1);outportb(0x182,0xfd); else if(mode=1) display(0,minute1/10);delay(1);display(1,minute1%10);delay(1);display(2,second1/10);delay(1);display(3,second1%10
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司新增入股合同協(xié)議書(shū)
- 2025年超精過(guò)濾設(shè)備項(xiàng)目合作計(jì)劃書(shū)
- 廣東省廣州市華僑、協(xié)和、增城中學(xué)等三校2024~2025學(xué)年高一下學(xué)期期中考試數(shù)學(xué)試卷(原卷版)
- 2025年CATV QAM調(diào)制器合作協(xié)議書(shū)
- 2025年防雷工程項(xiàng)目建議書(shū)
- 珠寶設(shè)計(jì)師創(chuàng)意策劃項(xiàng)目勞務(wù)合同
- 醫(yī)藥行業(yè)藥品供應(yīng)鏈融資服務(wù)合同
- 學(xué)前教育機(jī)構(gòu)選擇權(quán)委托合同
- 基坑自動(dòng)化監(jiān)測(cè)預(yù)警系統(tǒng)施工與環(huán)保措施合同
- 全屋定制家具設(shè)計(jì)與施工監(jiān)理合同
- 起重吊裝與履帶起重機(jī)的安全使用課件
- 人力資源管理師二級(jí)理論知識(shí)要點(diǎn)
- 出貨檢驗(yàn)報(bào)告
- 科研成果研制任務(wù)書(shū)
- 完整版:美制螺紋尺寸對(duì)照表(牙數(shù)、牙高、螺距、小徑、中徑外徑、鉆孔)
- 市政道路綜合整治工程施工部署方案
- 無(wú)機(jī)材料科學(xué)基礎(chǔ)-第3章-晶體結(jié)構(gòu)與晶體中的缺陷
- 泄漏擴(kuò)散模型及其模擬計(jì)算
- 返工返修處理流程
- 橋梁工程施工工藝標(biāo)準(zhǔn)圖集
- 米往返接力跑教案
評(píng)論
0/150
提交評(píng)論