版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE20《微處理器系統(tǒng)與接口技術(shù)》課程實(shí)踐報(bào)告計(jì)算器班級(jí):學(xué)號(hào):學(xué)生姓名:指導(dǎo)老師:日期:2014.7.5******電子與信息工程學(xué)院目錄1、設(shè)計(jì)題目:計(jì)算器 32、設(shè)計(jì)目的 33、計(jì)算器總體設(shè)計(jì)框圖 34、計(jì)算器詳細(xì)設(shè)計(jì)過程 44.1輸入模塊 44.2鍵盤輸入電路 54.3主程序模塊 65、分析與調(diào)試 67、運(yùn)行結(jié)果 88、結(jié)束語 88、參考文獻(xiàn) 89、源程序附錄 99.1主程序 99.2延時(shí)函數(shù)delay 129.3顯示函數(shù)display 129.4鍵盤掃描函數(shù) 149.5預(yù)定義函數(shù) 151、設(shè)計(jì)題目:計(jì)算器2、設(shè)計(jì)目的此次課程實(shí)踐題目是基于單片機(jī)簡(jiǎn)單計(jì)數(shù)器的設(shè)計(jì),本此設(shè)計(jì)使用的是Intel公司MCS-51系列的8051AH單片機(jī)。設(shè)計(jì)的計(jì)算器可以實(shí)現(xiàn)2位小數(shù)的加、減、乘、除運(yùn)算以及整數(shù)的乘方運(yùn)算,其中用4*4矩陣鍵盤來輸入待參與運(yùn)算的數(shù)據(jù)和運(yùn)算符;八位數(shù)碼管動(dòng)態(tài)顯示輸入待參與運(yùn)算的數(shù)據(jù)以及運(yùn)算后產(chǎn)生的結(jié)果,每個(gè)硬件模塊的調(diào)用過程中涉及到了函數(shù)入口及出口參數(shù)說明,函數(shù)調(diào)用關(guān)系描述等。3、計(jì)算器總體設(shè)計(jì)框圖計(jì)算器以MCS-51系列的8051AH單片機(jī)作為整個(gè)系統(tǒng)的控制核心,應(yīng)用其強(qiáng)大的I/O功能和計(jì)算速度,構(gòu)成整個(gè)計(jì)算器。通過矩陣鍵盤輸入運(yùn)算數(shù)據(jù)和符號(hào),送入單片機(jī)進(jìn)行數(shù)據(jù)處理。經(jīng)單片機(jī)運(yùn)算后控制LED數(shù)碼管的輸出。整體框圖如圖1所示:圖3整體框圖本系統(tǒng)硬件主要由矩陣鍵盤、獨(dú)立鍵盤I/O輸入輸出、數(shù)碼管顯示等主要部分組成。各模塊的主要功能如下:(1)矩陣鍵盤將十六進(jìn)制編碼的數(shù)字送到單片機(jī)。(2)單片機(jī)掃描鍵盤信號(hào)并接收,對(duì)輸入的鍵盤信號(hào)進(jìn)行處理(3)LED以動(dòng)態(tài)掃描的方式移位顯示每次輸入的數(shù)據(jù)和最后的運(yùn)算結(jié)果。實(shí)踐設(shè)計(jì)的具體流程圖如下圖2所示:圖3整體流程圖4、計(jì)算器詳細(xì)設(shè)計(jì)過程(處理器型號(hào)型號(hào):IntelMCS-51系列8051AH)計(jì)算器設(shè)計(jì)原理圖4.1輸入模塊計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O口資源,因此在很多情況下都不采用這種方式。為此,我們引入了矩陣鍵盤的應(yīng)用,采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤。在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O口的利用率,如圖3所示:圖3鍵盤按鍵4.2鍵盤輸入電路每個(gè)按鍵都有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地;另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過軟件查表,查出該鍵的功能。當(dāng)無按鍵閉合時(shí),P1.0-P1.3與P1.4-P1.7之間開路;當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O口線之間短路。判斷有無按鍵按下的方法是:第一步,置行線P1.4-P1.7為輸入狀態(tài),從列線P1.0-P1.3輸出高電平,讀入列線數(shù)據(jù),若某一列線為高電平,則該列線上有鍵閉合。第二步,讀入列線值,將該值輸出到列線值,之后再讀出列線值。綜合一二兩步的結(jié)果,最后鍵盤最后組合碼值可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。4.3主程序模塊這次設(shè)計(jì)共涉及到了處理器、矩陣鍵盤、獨(dú)立鍵盤、數(shù)碼管顯示等主要的模塊,在軟件主程序中,通過函數(shù)的調(diào)用實(shí)現(xiàn)相應(yīng)的功能模塊處理。通過num=KeyPro()函數(shù)的調(diào)用實(shí)現(xiàn)了將通過4*4矩陣行列反轉(zhuǎn)掃描法得到的數(shù)據(jù)送入單片機(jī),用于處理器進(jìn)一步處理數(shù)據(jù)。因?yàn)樵撜n程實(shí)踐要求計(jì)數(shù)器具有2位小數(shù)的加減乘除運(yùn)算,所以我們?cè)谧x取矩陣鍵盤之后,使用語句sscanf(temp,"%f",&a),該語句的意思是將字符串?dāng)?shù)組temp中的字符以浮點(diǎn)數(shù)的形式輸出到變量a,因此鍵盤輸?shù)牡臄?shù)據(jù)都被轉(zhuǎn)換成了浮點(diǎn)數(shù),所以可以很方便的實(shí)現(xiàn)帶小數(shù)的加減乘除運(yùn)算,運(yùn)算所得結(jié)果也是浮點(diǎn)數(shù)的形式。在對(duì)輸出結(jié)果輸出到數(shù)碼管的過程中,使用語句sprintf(temp,"%f",a);,該語句的意思是把浮點(diǎn)數(shù)變量a輸出到字符串?dāng)?shù)組temp中,此時(shí)就可以調(diào)用顯示函數(shù)對(duì)字符形式的計(jì)算結(jié)果進(jìn)行輸出。5、分析與調(diào)試在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法。設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按整體功能劃分成若干相對(duì)獨(dú)立的程序模塊,各模塊可以單獨(dú)設(shè)計(jì)、編程和調(diào)試,然后組合起來。這種方法便于設(shè)計(jì)和調(diào)試,容易實(shí)現(xiàn)多個(gè)程序共存,但各個(gè)模塊之間的連接有一定的難度。根據(jù)需要我們可以采用自上而下的程序設(shè)計(jì)方法,此方法先從主程序開始設(shè)計(jì),然后再編制各從屬程序和子程序,層層細(xì)化逐步求精,最終完成一個(gè)復(fù)雜程序的設(shè)計(jì)。這種方法比較符合人們的日常思維,缺點(diǎn)是一級(jí)的程序錯(cuò)誤會(huì)對(duì)整個(gè)程序產(chǎn)生影響。本次課程設(shè)計(jì)的計(jì)算器主要完成了矩陣鍵盤的數(shù)據(jù)或符號(hào)輸入、數(shù)碼管動(dòng)態(tài)顯示輸入值、單片機(jī)處理輸入的數(shù)據(jù)、數(shù)碼管動(dòng)態(tài)顯示計(jì)算結(jié)果。在整個(gè)的設(shè)計(jì)電路中,輸入輸出的數(shù)據(jù)均采用字符的形式(temp[i]=num+'0'(鍵盤輸入)sprintf(temp,"%f",a)(數(shù)碼管輸出));使用在單片機(jī)進(jìn)行數(shù)值運(yùn)算的過程中,數(shù)據(jù)使用函數(shù)sscanf(temp,"%f",&a),即將數(shù)據(jù)緩沖區(qū)的字符型數(shù)據(jù)轉(zhuǎn)換成浮點(diǎn)型并存到a變量所對(duì)應(yīng)的地址,這樣之后在對(duì)變量進(jìn)行加減乘除運(yùn)算。因?yàn)槭歉↑c(diǎn)數(shù)運(yùn)算,所以結(jié)果也是浮點(diǎn)數(shù),在輸出的時(shí)候,小數(shù)點(diǎn)也能夠輸出,從而免去在運(yùn)算結(jié)果中對(duì)小數(shù)的定位工作。按照上面的思想,在進(jìn)行小數(shù)運(yùn)算時(shí),輸入輸出小數(shù)并不能正常顯示。后來通過和組員一起仔細(xì)研究,發(fā)現(xiàn)數(shù)碼管段碼中并沒有小數(shù)點(diǎn),所以我們?cè)谳斎霐?shù)據(jù)時(shí)將每一個(gè)輸入的與小數(shù)點(diǎn)的ASCII碼進(jìn)行比較(if(num=='.')),一旦條件成立,將小數(shù)點(diǎn)存入數(shù)據(jù)緩沖temp[8]數(shù)組中,同時(shí)也將小數(shù)點(diǎn)的ASCII碼存入顯示緩沖區(qū)TempData[8]中(定義小數(shù)點(diǎn)的段碼0x98)。這樣之后關(guān)于小數(shù)點(diǎn)顯示問解決題。本次實(shí)踐所設(shè)計(jì)的計(jì)算器的操作數(shù)為浮點(diǎn)型,當(dāng)兩個(gè)數(shù)參與運(yùn)算之后,運(yùn)算結(jié)果如果出現(xiàn)小數(shù)部分全為0的情況,根據(jù)實(shí)際應(yīng)該只顯示整數(shù)部分,但是實(shí)驗(yàn)結(jié)果是小數(shù)0全顯示。但是由于時(shí)間關(guān)系我們沒有調(diào)試成功?,F(xiàn)提供一個(gè)思路:在顯示小數(shù)點(diǎn)的時(shí)候,設(shè)置一個(gè)for循環(huán),將小數(shù)點(diǎn)后的各位與'0'進(jìn)行比較,如果該位等于0,設(shè)置一個(gè)新變量自加一次,之后依次比較,新變量記錄小數(shù)點(diǎn)后0的個(gè)數(shù)。循環(huán)結(jié)束之后,將變量值與小數(shù)點(diǎn)后的總位數(shù)進(jìn)行比較,如果相等說明小數(shù)點(diǎn)后全為0.之后設(shè)置一個(gè)for循環(huán)將小數(shù)點(diǎn)后的數(shù)據(jù)的ASCII全部賦值0。部分程序如下:sprintf(temp,"%f",a);//以字符的形式打印浮點(diǎn)數(shù)到臨時(shí)緩沖區(qū)字符數(shù)組temp中 for(s=0;s<8;s++)//由于打印的是ASCII碼值 { if(temp[s]==0x2d)//表示負(fù)號(hào),數(shù)碼管顯示負(fù)號(hào)0x40 TempData[s]=0x40; elseif(temp[s]==0x2e)//表示小數(shù)點(diǎn),數(shù)碼管顯示小數(shù)點(diǎn)0x98 { for(j=s+1;j<8;j++) { if(temp[j]==48) k++; } if(k==7-s) { for(;s<8;s++) TempData[s]=0; break; } else TempData[s]=0x98; } else TempData[s]=dofly_DuanMa[temp[s]-'0'];//其他0-9則進(jìn)行ASCII到數(shù)字處理,如當(dāng)前是'3',用'3'-'0'=3 //'3'的16進(jìn)制是0x33,'0'的16進(jìn)制是0x30 }7、運(yùn)行結(jié)果8、結(jié)束語經(jīng)過近一周的努力,終于順利完成了單片機(jī)課程實(shí)踐-計(jì)數(shù)器的設(shè)計(jì)。剛開始,我們頭緒不是很清楚,不知道從哪里入手,但通過老師的耐心指導(dǎo)并和同學(xué)認(rèn)真研究設(shè)計(jì)課題,跑圖書館查資料、確定基本設(shè)計(jì)方案、對(duì)所用芯片功能進(jìn)行查找、調(diào)試、上機(jī)仿真等,經(jīng)歷了一次次的困難,卻積累了很多寶貴的經(jīng)驗(yàn)。在整個(gè)設(shè)計(jì)的過程中遇到的問題主要有以下二點(diǎn),第一:基礎(chǔ)知識(shí)掌握的不牢固,主要表現(xiàn)在一些常用的電路的形式和功能不清楚,對(duì)書本上的內(nèi)容理解不夠透徹。第二:相關(guān)知識(shí)掌握的不夠全面,缺少系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn)。這次設(shè)計(jì)進(jìn)一步端了我的學(xué)習(xí)態(tài)度,學(xué)會(huì)了實(shí)事求是,嚴(yán)謹(jǐn)?shù)淖黠L(fēng),對(duì)自己要嚴(yán)格要求,不能夠一知半解,要力求明明白白。急于求成是不好的,我有所感受。如果省略了那些必要的步驟,急于求成,不僅會(huì)浪費(fèi)時(shí)間,還會(huì)適得其反。我覺得動(dòng)手之前,頭腦里必須清楚該怎么做,這一點(diǎn)是很重要的。就目前來說,我的動(dòng)手能力雖然差一點(diǎn),但我想,通過我的不懈努力,在這方面,我總會(huì)得到提高。8、參考文獻(xiàn)[1]C語言程序設(shè)計(jì)教程/張宗杰主編.-北京:電子工業(yè)出版社,2013.8[2]增強(qiáng)型51單片機(jī)與仿真技術(shù)/肖金球,馮驥編著.-北京:清華大學(xué)出版社,2011.10[3]/view/1295144.htm?fr=aladdin[4]/link?url=Uo7SyME1Kcu8ZVH6OJzw2m9JdiOVh-toHZbqW6SneiaFwvoWFZfPxWn7Cec29PIiSelKdcg40-svLlkQaDCYf_9、源程序附錄9.1主程序/*內(nèi)容:整數(shù)之間運(yùn)算,含小數(shù)運(yùn)算,有負(fù)號(hào)運(yùn)算,*/#include<reg52.h>//包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#include<stdio.h>#include<math.h>#include"display.h"#include"delay.h"#include"keyboard.h"sbitCF=P2^5;//unsignedcharTempData[8];存儲(chǔ)顯示值的全局變量/*主程序*/main(){unsignedcharnum,i=0,sign;unsignedchartemp[8];//最大輸入8個(gè)bitfirstflag;floata=0,b=0;unsignedchars,j,k=0;Init_Timer0();//初始化定時(shí)器0while(1)//主循環(huán){ if(CF==0) num=0x5e; else num=KeyPro();//掃描鍵盤 if(num!=0xff)//如果掃描是按鍵有效值則進(jìn)行處理 { if(i==0)//輸入是第一個(gè)字符的時(shí)候需要把該行清空,方便觀看 { for(s=0;s<8;s++)//賦值完成后把緩沖區(qū)清零,防止下次輸入影響結(jié)果 TempData[s]=0; } if((num=='+')||(i==8)||(num=='-')||(num=='x')||(num=='/')||(num=='=')||(num=='^'))//輸入數(shù)字最大位數(shù)為8或輸入符號(hào)表示輸入結(jié)束 { i=0;//計(jì)數(shù)器復(fù)位 if(firstflag==0)//如果是輸入的第一個(gè)數(shù)據(jù),賦值給a,并把標(biāo)志位置1,到下一個(gè)數(shù)據(jù)輸入時(shí)可以跳轉(zhuǎn)賦值給b { sscanf(temp,"%f",&a); //將字符串?dāng)?shù)組temp中的字符以浮點(diǎn)數(shù)的形式輸出到變量a firstflag=1; } else sscanf(temp,"%f",&b); //b中存放temp字符數(shù)組的各自對(duì)應(yīng)的ASCII碼 for(s=0;s<8;s++)//賦值完成后把緩沖區(qū)清零,防止下次輸入影響結(jié)果 temp[s]=0; if(num!='=')//判斷當(dāng)前符號(hào)位并做相應(yīng)處理 sign=num;//如果不是等號(hào)記下標(biāo)志位 else { firstflag=0;//檢測(cè)到輸入=號(hào),判斷上次讀入的符合 switch(sign) { case'+':a=a+b; break; case'-':a=a-b; break; case'x':a=a*b; break; case'/':a=a/b; break; case'^':a=pow(a,b); break; default:break; } sprintf(temp,"%f",a);//以字符的形式打印浮點(diǎn)數(shù)到臨時(shí)緩沖區(qū)字符數(shù)組temp中 for(s=0;s<8;s++)//由于打印的是ASCII碼值 { if(temp[s]==0x2d)//表示負(fù)號(hào),數(shù)碼管顯示負(fù)號(hào)0x40 TempData[s]=0x40; elseif(temp[s]==0x2e)//表示小數(shù)點(diǎn),數(shù)碼管顯示小數(shù)點(diǎn)0x98 { for(j=s+1;j<8;j++) { if(temp[j]==48) k++; } if(k==7-s) { for(;s<8;s++) TempData[s]=0; break; } else TempData[s]=0x98; } else TempData[s]=dofly_DuanMa[temp[s]-'0'];//其他0-9則進(jìn)行ASCII到數(shù)字處理,如當(dāng)前是'3',用'3'-'0'=3 //'3'的16進(jìn)制是0x33,'0'的16進(jìn)制是0x30 } sign=0;a=b=0;//用完后所有數(shù)據(jù)清零 for(s=0;s<8;s++) temp[s]=0; } } elseif(i<8) { if(num=='.') { temp[i]=num; TempData[i]=0x98; i++; } else { temp[i]=num+'0'; // TempData[i]=dofly_DuanMa[num];//輸出數(shù)據(jù) i++; }//輸入數(shù)值累加 }} }}9.2延時(shí)函數(shù)delay#include"delay.h"/*uS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)長(zhǎng)度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(--t);}/*mS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編*/voidDelayMs(unsignedchart){while(t--){//大致延時(shí)1mSDelayUs2x(245); DelayUs2x(245);}}9.3顯示函數(shù)display#include"display.h"#include"delay.h"#defineDataPortP0//定義數(shù)據(jù)端口程序中遇到DataPort則用P0替換unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示段碼值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsignedcharTempData[8];//存儲(chǔ)顯示值的全局變量/*顯示函數(shù),用于動(dòng)態(tài)掃描數(shù)碼管輸入?yún)?shù)FirstBit表示需要顯示的第一位,如賦值2表示從第三個(gè)數(shù)碼管開始顯示如輸入0表示從第一個(gè)顯示。Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){staticunsignedchari=0; DataPort=0;//清空數(shù)據(jù),防止有交替重影LATCH1=1;//段鎖存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];//取位碼LATCH2=1;//位鎖存LATCH2=0;DataPort=TempData[i];//取顯示數(shù)據(jù),段碼LATCH1=1;//段鎖存LATCH1=0; i++;if(i==Num) i=0;}/*定時(shí)器初始化子程序*/voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 //TH0=0x00; //給定初值//TL0=0x00;EA=1;//總中斷打開ET0=1;//定時(shí)器中斷打開TR0=1;//定時(shí)器開關(guān)打開}/*定時(shí)器中斷子程序*/voidTimer0_isr(void)interrupt1{TH0=(65536-2000)/256; //重新賦值2msTL0=(65536-2000)%256;Display(0,8);}9.4鍵盤掃描函數(shù)/*內(nèi)容:矩陣鍵盤讀入*/#include<reg52.h>//包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#include"keyboard.h"#include"delay.h"#defineKeyPortP1/*按鍵掃描函數(shù),返回掃描鍵值*/unsignedcharKeyScan(void)//鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法{unsignedcharcord_h,cord_l;//行列值中間變量 KeyPort=0x0f;//行線輸出全為0 cord_h=KeyPort&0x0f;//讀入列線值if(cord_h!=0x0f)//先檢測(cè)有無按鍵按下{DelayMs(10);//去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f;//讀入列線值KeyPort=cord_h|0xf0;//輸出當(dāng)前列線值cord_l=KeyPort&0xf0;//讀入行線值while((KeyPort&0xf0)!=0xf0);//等待松開并輸出return(cord_h+cord_l);//鍵盤最后組合碼值}}return(0xff);//返回該值}/*按鍵值處理函數(shù),返回掃鍵值可以根據(jù)需要改變返回值 |1|2|3|+| |4|5|6|-| |7|8|9|*| |0|.|=|/|*/unsignedcharKeyPro(void){switch(KeyScan()){case0x7e:return1;break;//0按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值case0x7d:return2;break;//1case0x7b:return3;break;//2case0x77:return'+';break;//3case0xbe:return4;break;//4case0xbd:return5;break;//5case0xbb:return6;break;//6case0xb7:return'-';break;//7case0xde:return7;break;//8case0xdd:return8;break;//9case0xdb:return9;break;//acase0xd7:return'x';break;//bcase0xee:return0;break;//ccase0xed:return'.';break;//dcase0xeb:return'=';break;//ecase0xe7:return'/';break;//fdefault:return0xff;break;}}9.5預(yù)定義函數(shù)#include<reg52.h>#ifndef__DISPLAY_H__#define__DISPLAY_H__#defineDataPortP0//定義數(shù)據(jù)端口程序中遇到DataPort則用P0替換sbitLATCH1=P2^2;//定義鎖存使能端口段鎖存sbitLATCH2=P2^3;//位鎖存externunsignedcharTempData[8];//存儲(chǔ)顯示值的全局變量externunsignedcharcodedofly_DuanMa[10];/*顯示函數(shù),用于動(dòng)態(tài)掃描數(shù)碼管輸入?yún)?shù)FirstBit表示需要顯示的第一位,如賦值2表示從第三個(gè)數(shù)碼管開始顯示如輸入0表示從第一個(gè)顯示。Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*定時(shí)器初始化子程序*/voidInit_Timer0(void);#endif/*REG52.HHeaderfileforgeneric80C52and80C32microcontroller.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.*/#ifndef__REG52_H__#define__REG52_H__/*BYTERegisters*/sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x89;sfrTL0=0x8A;sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;/*8052Extensions*/sfrT2CON=0xC8;sfrRCAP2L=0xCA;sfrRCAP2H=0xCB;sfrTL2=0xCC;sfrTH2=0xCD;/*BITRegisters*//*PSW*/sbitCY=PSW^7;sbitAC=PSW^6;sbitF0=PSW^5;sbitRS1=PSW^4;sbitRS0=PSW^3;sbitOV=PSW^2;sbitP=PSW^0;//8052only/*TCON*/sbitTF1=TCON^7;sbitTR1=TCON^6;sbitTF0=TCON^5;sbitTR0=TCON^4;sbitIE1=TCON^3;sbitIT1=TCON^2;sbitIE0=TCON^1;sbitIT0=TCON^0;/*IE*/sbitEA=IE^7;sbitET2=IE^5;//8052onlysbitES=IE^4;sbitET1=IE^3;sbitEX1=IE^2;sbitET0=IE^1;sbitEX0=IE^0;/*IP*/sbitPT2=IP^5;sbitPS=IP^4;sbitPT1=IP^3;sbitPX1=IP^2;sbitPT0=IP^1;sbitPX0=IP^0;/*P3*/sbitRD=P3^7;sbitWR=P3^6;sbitT1=P3^5;sbitT0=P3^4;sbitINT1=P3^3;sbitINT0=P3^2;sbitTXD=P3^1;sbitRXD=P3^0;/*SCON*/sbitSM0=SCON^7;sbitSM1=SCON^6;sbitSM2=SCON^5;sbitREN=SCON^4;sbitTB8=SCON^3;sbitRB8=SCON^2;sbitTI=SCON^1;sbitRI=SCON^0;/*P1*/sbitT2EX=P1^1;//8052onlysbitT2=P1^0;//8052only/*T2CON*/sbitTF2=T2CON^7;sbitEXF2=T2CON^6;sbitRCLK=T2CON^5;sbitTCLK=T2CON^4;sbitEXEN2=T2CON^3;sbitTR2=T2CON^2;sbitC_T2=T2CON^1;sbitCP_RL2=T2CON^0;#endif#ifndef__DELAY_H__#define__DELAY_H__/*uS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)長(zhǎng)度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart);/*mS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編*/voidDelayMs(unsignedchart);#endif/*名稱:矩陣鍵盤頭文件*/#ifndef__KEYBOARD_H__#define__KEYBOARD_H__/*按鍵掃描函數(shù),返回掃描鍵值*/unsignedcharKeyScan(void);//鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法/*按鍵值處理函數(shù),返回掃鍵值*/unsignedcharKeyPro(void);#endif/*MATH.HPrototypesformathematicfunctions.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.*/#ifndef__MATH_H__#define__MATH_H__#pragmaSAVE#pragmaREGPARMSexterncharcabs(charval);externintabs
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年農(nóng)機(jī)維修服務(wù)合同草案
- 糖尿病患者的日常護(hù)理要點(diǎn)
- 遼寧師范高等??茖W(xué)?!吨袊?guó)近代史綱要》2023-2024學(xué)年第一學(xué)期期末試卷
- 公司員工管理規(guī)章制度(五篇)
- 英日雙語就業(yè)前景分析
- 市三醫(yī)院招聘考試題目及答案
- 塔羅牌公務(wù)員考試試題及答案
- 2025 九年級(jí)數(shù)學(xué)上冊(cè)概率復(fù)雜事件的概率分步計(jì)算課件
- 2025年農(nóng)產(chǎn)品分級(jí)技術(shù)五年市場(chǎng)趨勢(shì)報(bào)告
- 2025年直播電商社交電商五年報(bào)告
- 2025中原農(nóng)業(yè)保險(xiǎn)股份有限公司招聘67人筆試備考重點(diǎn)試題及答案解析
- 2025中原農(nóng)業(yè)保險(xiǎn)股份有限公司招聘67人備考考試試題及答案解析
- 2025年度河北省機(jī)關(guān)事業(yè)單位技術(shù)工人晉升高級(jí)工考試練習(xí)題附正確答案
- 交通運(yùn)輸布局及其對(duì)區(qū)域發(fā)展的影響課時(shí)教案
- 2025年中醫(yī)院護(hù)理核心制度理論知識(shí)考核試題及答案
- GB/T 17981-2025空氣調(diào)節(jié)系統(tǒng)經(jīng)濟(jì)運(yùn)行
- 比亞迪儲(chǔ)能項(xiàng)目介紹
- 2025年9月廣東深圳市福田區(qū)事業(yè)單位選聘博士11人備考題庫附答案
- 糖尿病足潰瘍VSD治療創(chuàng)面氧自由基清除方案
- 《公司治理》期末考試復(fù)習(xí)題庫(含答案)
- 自由職業(yè)者項(xiàng)目合作合同協(xié)議2025年
評(píng)論
0/150
提交評(píng)論