版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
一、原理圖設(shè)計說明 11.1數(shù)碼管硬件電路設(shè)計 11.2矩陣鍵盤電路設(shè)計: 2二、程序設(shè)計說明 32.1鍵盤掃描程序設(shè)計 32.2算術(shù)運(yùn)算程序設(shè)計 42.3顯示程序設(shè)計 5三、工作原理圖及程序流程圖 6四、程序清單 9五、參考文獻(xiàn) 15一、原理圖設(shè)計說明1.1數(shù)碼管硬件電路設(shè)計數(shù)碼管數(shù)據(jù)顯示的硬件電路由單片機(jī)、4位共陽極數(shù)碼管、位驅(qū)動電路、限流電阻等組成。實驗板中用杜邦線將P7與單片機(jī)IO口相連(這里以P0口為例)。用跳線將P8與單片機(jī)P2低四位相連,P0口送出數(shù)碼管段選碼,P2送出位選碼。圖1-1數(shù)碼管硬件電路原理圖1.2矩陣鍵盤電路設(shè)計:4*4矩陣鍵盤行輸入接單片機(jī)P1.0-P1.3,列輸入接單片機(jī)P1.4-P1.7,通過掃描方式檢測是否有鍵按下,并確定鍵值,使用矩陣鍵盤時注意給P10矩陣鍵盤選擇端使能。對鍵盤進(jìn)行編號,S3-S18,按下相應(yīng)按鍵,在數(shù)碼管上顯示相應(yīng)鍵值(0-F)。例如按下S10鍵,顯示A,按下S0鍵,顯示0。圖1-2矩陣鍵盤電路原理圖二、程序設(shè)計說明2.1鍵盤掃描程序設(shè)計鍵盤掃描程序的過程為:開始時,先判斷是否有鍵閉合,無鍵閉合時,返回繼續(xù)判斷,有鍵閉合時,先去抖動,然后確定是否有鍵按下,若無鍵按下,則返回繼續(xù)判斷是否有鍵閉合,若有鍵按下,則判斷鍵號,然后釋放,若釋放按鍵完畢,則返回,若沒有釋放按鍵,則返回繼續(xù)釋放。其流程圖如圖2-1所示。圖2-1鍵盤掃描程序流程圖2.2算術(shù)運(yùn)算程序設(shè)計算術(shù)運(yùn)算程序的過程為:先判斷輸入的運(yùn)算符是+、-、*、/中的哪一個,若是+或-,則要判斷運(yùn)算結(jié)果是否溢出,溢出則顯示錯誤信息,沒溢出就顯示運(yùn)算結(jié)果,若是/,則要先判斷除數(shù)是否為零,為零就顯示錯誤信息,不為零則顯示運(yùn)算結(jié)果,若是-,則直接顯示運(yùn)算結(jié)果。其流程圖如圖2.2所示。圖2-2算術(shù)運(yùn)算程序設(shè)計流程圖2.3顯示程序設(shè)計先是程序的過程為:顯示開始時,先進(jìn)行LED的初始化,判斷是否顯示,若不顯示,則返回,若顯示,則進(jìn)行相應(yīng)功能的設(shè)置,然后送地址和數(shù)據(jù),再判斷是否顯示完,顯示完則返回,沒有顯示完則繼續(xù)送地址。圖2-3顯示程序流程圖三、工作原理圖及程序流程圖圖3-1仿真工作原理電路圖圖3-2系統(tǒng)組成及總體框圖圖3-3-1PCB原理圖圖3-3-2PCB原理圖圖3-3-33D效果圖圖3-4程序流程圖四、程序清單mian.c://簡單的數(shù)碼管顯示按鍵編碼0到9#include<reg52.h>typedefunsignedcharuint8;uint8num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共陰極數(shù)碼管uint8s[4]={0,10,10,10};uint8T0RH=0;//重載初值uint8T0RL=0;//重載初值uint8step=0;//步驟標(biāo)號uint8oprt=0;//運(yùn)算符標(biāo)志longnum1=0;//運(yùn)算數(shù)1longnum2=0;//運(yùn)算數(shù)2longnum3=0;//結(jié)果voidInit_times(uint8ms);externvoid KeyDriver();//定義鍵盤驅(qū)動externvoid KeyScan();//定義鍵盤掃描voidmain(){ EA=1;//中斷總允許位 Init_times(1);//配置T0定時1ms while(1) { KeyDriver(); //調(diào)用鍵盤驅(qū)動 } }voidInit_times(uint8ms)//配置并啟動T0,ms-T0定時時間{unsignedlongtmp;tmp=11059200/12;//定時器計數(shù)頻率tmp=(tmp*ms)/1000;//計算所需的計數(shù)值tmp=65536-tmp;//計算定時器重載值tmp=tmp+12;//修正中斷響應(yīng)延時造成的誤差T0RH=(unsignedchar)(tmp>>8);//取高八位T0RL=(unsignedchar)tmp;//取第八位TMOD&=0xF0;//定義計時器工作狀態(tài)TMOD|=0x01;TH0=T0RH;//初始值TH0(變量帶入)TL0=T0RL;//初始值TL0ET0=1;//中斷允許TR0=1;}//啟動計時器/*數(shù)碼管動態(tài)掃描函數(shù)*/voidfun(){ staticuint8i; switch(i)//數(shù)碼管的位選和段選 { case0:P2=0xfe;P0=num[s[0]];break; case1:P2=0xfd;P0=num[s[1]];break; case2:P2=0xfb;P0=num[s[2]];break; case3:P2=0xf7;P0=num[s[3]];break; } i++; i&=0x03;}/*T0中斷服務(wù)函數(shù),執(zhí)行按鍵掃描*/voidtime0()interrupt1{ TH0=T0RH; TL0=T0RL; KeyScan(); fun();}/*把數(shù)值的各個位分別存儲在數(shù)組是s[4]中*/voidfuzhi(longn){ uint8i=0; if(n<0)//小于零為負(fù)數(shù) { s[3]=11; n=-n; } else { s[3]=10; } do{ s[i++]=n%10; n/=10; }while(n!=0); while(i<=2) { s[i++]=10; }}/*復(fù)位*/voidReset(){ num1=0; num2=0; step=0; fuzhi(0);}/*讀取運(yùn)算數(shù)*/voidNumKeyAction(uint8n){ if(step>1){ Reset(); } if(step==0){ num1=num1*10+n; fuzhi(num1); } elseif(step==1){ num2=num2*10+n; fuzhi(num2); }}/*讀取運(yùn)算符*/voidOprtKeyAction(uint8n)//用于判斷按鍵加、減、乘、除{ if(step==0){ fuzhi(0); s[0]=10; step=1; oprt=n; } } /*做運(yùn)算*/voidGetResult()//加、減、乘、除函數(shù)運(yùn)算{ if(step==1){ switch(oprt){ case0:num3=num1+num2;break; case1:num3=num1-num2;break; case2:num3=num1*num2;break; case3:num3=num1/num2;break; default:break; } fuzhi(num3); step=2; } }key.c:鍵盤按鍵程序#include<reg52.h>typedefunsignedcharuint8;sbitkeyout_1=P1^4;//定義鍵盤按鍵sbitkeyout_2=P1^5;sbitkeyout_3=P1^6;sbitkeyout_4=P1^7;sbitkeyin_1=P1^0;sbitkeyin_2=P1^1;sbitkeyin_3=P1^2;sbitkeyin_4=P1^3;externvoidReset();externvoid GetResult();externvoid NumKeyAction(uint8dat);externvoid OprtKeyAction(uint8dat);externuint8num[];uint8keysta[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};//全部矩陣鍵盤的當(dāng)前狀態(tài)uint8keycode[4][4]={{'7','8','9','+'},//矩陣按鍵編號到標(biāo)準(zhǔn)鍵盤鍵碼的映射表 {'4','5','6','-'}, {'1','2','3','*'}, {0x11,'0','=','/'}};voidKeyAction(uint8dat)//用于判斷按鍵運(yùn)算法則{ if((dat>='0')&&(dat<='9')){//判斷按下鍵是否為數(shù)值 NumKeyAction(dat-'0'); } elseif(dat=='+'){ OprtKeyAction(0);//加法 } elseif(dat=='-'){ OprtKeyAction(1);//減法 } elseif(dat=='*'){ OprtKeyAction(2);//乘法 } elseif(dat=='/'){ OprtKeyAction(3);//除法 } elseif(dat=='='){ GetResult();//等于 } elseif(dat==0x11){//清零 Reset(); }}/*按鍵驅(qū)動函數(shù),檢測按鍵動作,調(diào)度相應(yīng)動作函數(shù),需在主循環(huán)中調(diào)用*/voidKeyDriver()/{uint8i,j;staticuint8backup[4][4]={{1,1,1,1},{1,1,1,1},//按鍵值備份,保存前一次的值 {1,1,1,1},{1,1,1,1}}; for(i=0;i<4;i++)//循環(huán)檢測4*4的矩陣按鍵 for(j=0;j<4;j++) if(keysta[i][j]!=backup[i][j]){//檢測按鍵動作 if(backup[i][j]!=0) //按鍵按下時執(zhí)行動作 KeyAction(keycode[i][j]); //調(diào)用按鍵動作函數(shù) backup[i][j]=keysta[i][j]; //刷新前一次的備份值 } }/*按鍵掃描函數(shù),需在定時中斷中調(diào)用,調(diào)用間隔1ms*/voidKeyScan(){ uint8i; staticuint8keyout=0; //矩陣按鍵掃描輸出索引 staticuint8keybuf[4][4]={ //矩陣按鍵掃描緩沖區(qū) {0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff}, {0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff}};keybuf[keyout][0]=(keybuf[keyout][0]<<1)|keyin_1;//將一行的4個按鍵值移入緩沖區(qū) keybuf[keyout][1]=(keybuf[keyout][1]<<1)|keyin_2; keybuf[keyout][2]=(keybuf[keyout][2]<<1)|keyin_3; keybuf[keyout][3]=(keybuf[keyout][3]<<1)|keyin_4;//消抖后更新按鍵狀態(tài) for(i=0;i<4;i++){//每行4個按鍵,所以循環(huán)4次 if(keybuf[keyout][i]==0x00){ //連續(xù)4次掃描值為0,即4*4ms內(nèi)都是按下狀態(tài)時,可認(rèn)為按鍵已穩(wěn)定的按下 keysta[keyout][i]=0; } elseif(keybuf[keyout][i]==0x
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度虛擬現(xiàn)實(VR)技術(shù)產(chǎn)品研發(fā)與銷售正規(guī)購銷合同3篇
- 二零二五年度建筑工程施工班組中途退場合同終止協(xié)議3篇
- 中藥提取設(shè)備項目可行性研究報告申請立項
- 二零二五年度變頻器產(chǎn)業(yè)鏈上下游合作框架協(xié)議
- 廣西來賓市(2024年-2025年小學(xué)六年級語文)部編版綜合練習(xí)(上學(xué)期)試卷及答案
- 二零二五年度家庭裝修門窗安裝服務(wù)合同范本6篇
- 2025年度創(chuàng)新園區(qū)辦公樓租賃協(xié)議書3篇
- 2025版軟件許可及服務(wù)合同詳細(xì)條款和條件3篇
- 二零二五年度化妝品OEM委托生產(chǎn)及研發(fā)合同范本12篇
- 智研咨詢發(fā)布:中國導(dǎo)電塑料行業(yè)現(xiàn)狀分析、市場運(yùn)行態(tài)勢及發(fā)展趨勢預(yù)測報告
- 《上帝擲骰子嗎:量子物理史話》超星爾雅學(xué)習(xí)通章節(jié)測試答案
- Unit13 同步教學(xué)設(shè)計2023-2024學(xué)年人教版九年級英語全冊
- 2023-2024學(xué)年河北省保定市滿城區(qū)八年級(上)期末英語試卷
- 2024成都中考數(shù)學(xué)第一輪專題復(fù)習(xí)之專題四 幾何動態(tài)探究題 教學(xué)課件
- 2024合同范本之太平洋保險合同條款
- 萬用表的使用
- 合伙經(jīng)營合作社協(xié)議書
- TDT1062-2021《社區(qū)生活圈規(guī)劃技術(shù)指南》
- GB/T 12959-2024水泥水化熱測定方法
- 廊坊市區(qū)普通住宅區(qū)物業(yè)服務(wù)等級標(biāo)準(zhǔn)
- 《商務(wù)禮儀》試題及答案大全
評論
0/150
提交評論