引言
在電子測(cè)量領(lǐng)域中,頻率測(cè)量的精確度是最高的,可達(dá)10至10
1.001.jpg (946 Bytes, 下載次數(shù): 54)
下載附件
2017-2-11 03:25 上傳
數(shù)量級(jí)。因此,在生產(chǎn)過(guò)程中許多物理量,例如溫度、壓力、流量、液位、PH值、振動(dòng)、位移、速度、加速度,乃至各種氣體的百分比成分等均用傳感器轉(zhuǎn)換成信號(hào)頻率,然后用數(shù)字頻率計(jì)來(lái)測(cè)量,以提高精確度。
國(guó)際上數(shù)字頻率計(jì)的分類很多。按功能分類,因計(jì)數(shù)式頻率計(jì)的測(cè)量功能很多,用途很廣。所以根據(jù)儀器具有的功能,電子計(jì)數(shù)器有通用和專用之分。一、通用型計(jì)數(shù)器:通用型計(jì)數(shù)器是一種具有多種測(cè)量功能、多種用途的萬(wàn)能計(jì)數(shù)器。它可測(cè)量頻率、周期、多周期平均值、時(shí)間間隔、累加計(jì)數(shù)、計(jì)時(shí)等;若配上相應(yīng)插件,就可測(cè)相位、電壓、電流、功率、電阻等電量;配上適當(dāng)?shù)膫鞲衅鳎可進(jìn)行長(zhǎng)度、重量、壓力、溫度、速度等非電量的測(cè)量。二、專用計(jì)數(shù)器:專用計(jì)數(shù)器指專門用來(lái)測(cè)量某種單一功能的計(jì)數(shù)器。如頻率計(jì)數(shù)器,只能專門用來(lái)測(cè)量高頻和微波頻率;時(shí)間計(jì)數(shù)器,是以測(cè)量時(shí)間為基礎(chǔ)的計(jì)數(shù)器,其測(cè)時(shí)分辨力和準(zhǔn)確度很高,可達(dá)ns數(shù)量級(jí);特種計(jì)數(shù)器,它具有特種功能,如可逆計(jì)數(shù)器、閾值計(jì)數(shù)器、差值計(jì)數(shù)器、倒數(shù)計(jì)數(shù)器等,用于工業(yè)和自控技術(shù)等方面。數(shù)字頻率計(jì)按頻段分類:①低速計(jì)數(shù)器:最高計(jì)數(shù)頻率<10MHz;②中速計(jì)數(shù)器:最高計(jì)數(shù)頻率10—100MHz;③高速計(jì)數(shù)器:最高計(jì)數(shù)頻率>100MHz;④微波頻率計(jì)數(shù)器:測(cè)頻范圍1—80GHz或更高。
由于大規(guī)模和超大規(guī)模數(shù)字集成電路技術(shù)、數(shù)據(jù)通信技術(shù)與單片機(jī)技術(shù)的結(jié)合,數(shù)字頻率計(jì)發(fā)展進(jìn)入了智能化和微型化的新階段。其功能進(jìn)一步擴(kuò)大,除了測(cè)量頻率、頻率比、周期、時(shí)間、相位、相位差等基本功能外,還具有自撿、自校、自診斷、數(shù)理統(tǒng)計(jì)、計(jì)算方均根值、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)通信等功能。可見,頻率計(jì)是很有工業(yè)價(jià)值的。本作品即為一個(gè)基于單片機(jī)的數(shù)字頻率計(jì),它通過(guò)74HC390芯片進(jìn)行分頻,克服了單片機(jī)難以處理高頻信號(hào)的困難,并使用LCD1602液晶顯示進(jìn)行輸出,精確度為20萬(wàn)分之一。
1 電路功能、硬件與原理
此次智能電子設(shè)計(jì)與制作實(shí)訓(xùn)本小組的題目為“數(shù)字頻率計(jì)的設(shè)計(jì)”,在仔細(xì)研究了題目要求并通過(guò)小組內(nèi)部積極細(xì)致的討論之后,決定作品采用的功能方案如下:①能測(cè)出正弦波、三角波或方波等波形的頻率。②頻率的測(cè)量范圍為1Hz—20MHz,且能檢測(cè)幅度最小值為1Vpp的信號(hào);③通過(guò)LCD1602液晶顯示屏顯示檢測(cè)到的即時(shí)頻率數(shù)值(最多8位數(shù),單位為Hz)。值得一提的是,當(dāng)輸入頻率大于20KHz的信號(hào)時(shí),由于采用了100分頻采樣,顯示結(jié)果稍有誤差,如輸入最大測(cè)量頻率20MHz的信號(hào)時(shí),LCD1602液晶顯示屏上顯示的測(cè)量結(jié)果為19998900HZ,誤差不超過(guò)十萬(wàn)分之一,在可接受范圍之內(nèi)。
以下將以待測(cè)輸入信號(hào)走向?yàn)轫樞蚪榻B電路中各個(gè)功能模塊。
1.1電路主要模塊
1.1.1信號(hào)采集模塊
1.002.jpg (24.16 KB, 下載次數(shù): 46)
下載附件
2017-2-11 03:25 上傳
圖1.1 基于三極管共射放大電路的信號(hào)采集模塊
為了有效防止因信號(hào)過(guò)小而造成的檢測(cè)障礙,在信號(hào)輸入處采用了三極管共射放大電路,如圖1.1所示。實(shí)際工作中,我們必須解決放大電路與信號(hào)源及放大電路與負(fù)載之間的耦合問(wèn)題。一方面要求耦合電路能夠傳輸交流的輸入和輸出信號(hào),傳輸過(guò)程中的信號(hào)損耗盡可能小;另一方面又要求信號(hào)源,放大電路、負(fù)載之間的直流工作狀態(tài)互補(bǔ)影響,即有“隔直”作用,電路的C1、C7就很好的解決了這個(gè)問(wèn)題即固定偏置共射極放大器。集電極電壓通過(guò)基極偏置電阻R2使晶體管Je正偏;同時(shí)拖過(guò)R3使Jc反偏,從而實(shí)現(xiàn)信號(hào)源放大。
1.1.2脈沖產(chǎn)生模塊
1.003.jpg (15.59 KB, 下載次數(shù): 47)
下載附件
2017-2-11 03:25 上傳
1.004.jpg (17.18 KB, 下載次數(shù): 59)
下載附件
2017-2-11 03:25 上傳
圖1.2 74HC14管腳圖和功能圖
脈沖產(chǎn)生模塊采用74HC14實(shí)現(xiàn)了三次施密特觸發(fā)并反相,從圖1.2可以看出,來(lái)自信號(hào)采集模塊的經(jīng)過(guò)放大的信號(hào)從74HC14的1腳進(jìn)入,經(jīng)過(guò)1A→1Y、2A→2Y和3A→3Y三次施密特觸發(fā)并反相最終將緩慢變化的輸入信號(hào)轉(zhuǎn)換成清晰、無(wú)抖動(dòng)的信號(hào)從6腳輸出。
具體到每一個(gè)施密特觸發(fā)反相器來(lái)說(shuō),其轉(zhuǎn)移特性和輸入輸出波形關(guān)系如圖1.3所示。
1.005.jpg (13.67 KB, 下載次數(shù): 46)
下載附件
2017-2-11 03:25 上傳
圖1.3 74HC14單個(gè)施密特觸發(fā)器轉(zhuǎn)移特性和輸入輸出波形
通過(guò)Proteus,可以同時(shí)觀察到有信號(hào)輸入時(shí)74HC14的1腳、2腳、4腳和6腳上的波形仿真。
1.006.jpg (25.63 KB, 下載次數(shù): 37)
下載附件
2017-2-11 03:25 上傳
1.007.jpg (34.51 KB, 下載次數(shù): 47)
下載附件
2017-2-11 03:25 上傳
圖1.4 輸入信號(hào)通過(guò)74HC14轉(zhuǎn)換為脈沖
1.1.3分頻模塊
1.008.jpg (22.64 KB, 下載次數(shù): 66)
下載附件
2017-2-11 03:25 上傳
圖1.5 基于雙4位十進(jìn)制波紋計(jì)數(shù)器74HC390的分頻模塊
74HC390具有有八個(gè)主從觸發(fā)器和附加門以構(gòu)成兩個(gè)獨(dú)立的4位計(jì)數(shù)器,其中每個(gè)計(jì)數(shù)器皆包含兩個(gè)部分:“除2計(jì)數(shù)部分”和“除5計(jì)數(shù)部分”,每個(gè)計(jì)數(shù)器又有一個(gè)清除輸入和一個(gè)時(shí)鐘輸入。它可以實(shí)現(xiàn)等于2 分頻、5 分頻乃至100 分頻的任何累加倍數(shù)的周期長(zhǎng)度,且可以連成十進(jìn)制計(jì)數(shù)器或二-五進(jìn)制計(jì)數(shù)器以分別實(shí)現(xiàn)兩種進(jìn)制的數(shù)值輸出。由于每個(gè)計(jì)數(shù)級(jí)都有并行輸出,所以系統(tǒng)定時(shí)信號(hào)可以獲得輸入計(jì)數(shù)頻率的任何因子。
74HC390具有以下特點(diǎn):
①A和B觸發(fā)器都有獨(dú)立的時(shí)鐘
②每個(gè)計(jì)數(shù)器都有直接清除
③有效提高系統(tǒng)密度
④緩沖輸出減小集電極轉(zhuǎn)換的可能性
1.009.jpg (16.67 KB, 下載次數(shù): 57)
下載附件
2017-2-11 03:25 上傳
圖1.6 74HC390單個(gè)計(jì)數(shù)器功能圖
從74HC390的單個(gè)計(jì)數(shù)器功能圖中可以看出,若從nCP0輸入頻率為f的時(shí)鐘信號(hào),則會(huì)在nQ0得到頻率為f/2的信號(hào);若從nCP1輸入時(shí)鐘信號(hào),則會(huì)在nQ1、nQ2、nQ3得到按表1變化的組合信號(hào)。
1.010.jpg (16.19 KB, 下載次數(shù): 40)
下載附件
2017-2-11 03:25 上傳
表1 時(shí)鐘信號(hào)從nCP1輸入時(shí)Q2:Q1:Q0真值表
由此展開設(shè)想:由于單片機(jī)可操作頻率有限,若輸入信號(hào)頻率過(guò)大則單片機(jī)無(wú)法成功實(shí)現(xiàn)脈沖計(jì)數(shù),因此需要使用74HC390進(jìn)行分頻,以100分頻為宜(具體為200KHz以上信號(hào)采取100分頻后再檢測(cè),200KHz或以下信號(hào)則檢測(cè)未經(jīng)100分頻的原始信號(hào))。采取的方法為:從表1中可以看出,若從nCP1輸入頻率為f的時(shí)鐘信號(hào),則會(huì)在nQ2處輸出頻率為f/5的脈沖信號(hào),因此可進(jìn)行如圖1.5所示的連線方法,1CP1--1Q2→2CP1--2Q2→1CP0--1Q0→2CP0--2Q0,其中“→”代表芯片外部電氣連接,“--”代表芯片內(nèi)部功能連接,從而得到5×5×2×2=100分頻,即若從1CP1輸入一個(gè)頻率為f的信號(hào),則會(huì)從2Q0輸出一個(gè)頻率為f/100的分頻信號(hào)。
1.011.jpg (62.13 KB, 下載次數(shù): 38)
下載附件
2017-2-11 03:25 上傳
1.1.4主芯片
圖1.7 主芯片89S52
對(duì)于89S52單片機(jī)的功能作用本文無(wú)需贅言,在此只說(shuō)明與本作品有關(guān)的部分:未經(jīng)100分頻的待測(cè)信號(hào)接入單片機(jī)的定時(shí)/計(jì)數(shù)器0(P3.4),100分頻后的待測(cè)信號(hào)接入單片機(jī)的定時(shí)/計(jì)數(shù)器1(P3.5),單片機(jī)的P1.0、P1.1、P1.2分別接1602LCD液晶顯示模塊的片選控制、讀寫控制和使能控制,而P0.0-P0.7則控制1602芯片的數(shù)據(jù)引腳D0-D7。另外值得一提的是,此為52單片機(jī),其定時(shí)器2具有16位自動(dòng)重裝載中斷功能,即為“interrupt 5”中斷方式。
1.1.5液晶顯示輸出模塊
1.012.jpg (30.51 KB, 下載次數(shù): 54)
下載附件
2017-2-11 03:25 上傳
圖1.8 1602液晶實(shí)物圖
1.013.jpg (26.24 KB, 下載次數(shù): 46)
下載附件
2017-2-11 03:25 上傳
1.014.jpg (32.68 KB, 下載次數(shù): 68)
下載附件
2017-2-11 03:25 上傳
圖1.9 1602液晶引腳排列和引腳功能說(shuō)明
限于篇幅,本文針對(duì)1602液晶顯示芯片的功能描述僅限于與本作品相關(guān)部分。
首先說(shuō)明1602液晶顯示芯片在本作品上需完成的功能:①?zèng)]有信號(hào)輸入時(shí)液晶顯示“fre= Hz”②有信號(hào)輸入時(shí)液晶顯示單片機(jī)RAM中的全局變量“fre”的即時(shí)數(shù)值(最多顯示8位,不顯示無(wú)效的“0”,如若fre=123,則液晶顯示“fre=123Hz”)。
以下將結(jié)合具體程序來(lái)描述1602液晶顯示模塊在本作品中實(shí)現(xiàn)的功能:
①程序頭文件
unsigned long int fre;
unsigned char time;
unsigned int count;
unsigned int count1;
sbit LCD_RS=P1^0; //片選信號(hào)
sbit LCD_RW=P1^1; //讀寫信號(hào)
sbit LCD_E=P1^2; //使能信號(hào)
#define LCD_DB P0 //數(shù)據(jù)信號(hào)
unsigned char character[10]={0};//在屏幕上顯示的字符串
unsigned char character_1[]={"fre= Hz"};
unsigned char FLAG = 0;
void LCD_init(void);//初始化函數(shù)
void LCD_write_command(unsigned char command);//寫指令函數(shù)
void LCD_write_data(unsigned char dat);//寫數(shù)據(jù)函數(shù)
void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-15),y(1-2)
void delay_n40us(unsigned int n);//延時(shí)函數(shù)
void timer_init(); //中斷初始化函數(shù)
②函數(shù)設(shè)定
void LCD_write_command(unsigned char dat) //寫命令函數(shù)
{
LCD_DB=dat;
LCD_RS=0;//指令
LCD_RW=0;//寫入
LCD_E=1; //使能
LCD_E=0;
delay_n40us(1);//寫命令延時(shí)
}
void LCD_write_data(unsigned char dat) //寫數(shù)據(jù)函數(shù)
{
LCD_DB=dat;
LCD_RS=1;//數(shù)據(jù)
LCD_RW=0;//寫入
LCD_E=1;//使能
LCD_E=0;
delay_n40us(1); //寫數(shù)據(jù)延時(shí)
}
1602芯片的4號(hào)引腳為RS(數(shù)據(jù)/命令選擇端,1數(shù)據(jù)寄存器,0指令寄存器),5號(hào)引腳為RW(讀寫選擇端,1讀,0寫),6號(hào)引腳為EN(使能端,1允許讀寫,0禁止讀寫),因此調(diào)用LCD_write_command函數(shù)時(shí),變量dat將作為指令信號(hào)輸入而控制1602芯片,調(diào)用LCD_write_data函數(shù)時(shí),變量dat將作為數(shù)據(jù)信號(hào)輸入1602芯片。
void LCD_init(void) //液晶初始化函數(shù)
{
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
LCD_write_command(0x01);//清除屏幕顯示
delay_n40us(100);//清屏延時(shí)
}
首先需要說(shuō)明的是,執(zhí)行三次LCD_write_command(0x38)的目的是讓所有1602芯片都兼容。
進(jìn)行功能設(shè)定時(shí),指令格式如下:001 DL N F 00;DL=1時(shí),數(shù)據(jù)長(zhǎng)度為8位,DL=0時(shí),數(shù)據(jù)長(zhǎng)度為4位;N=1時(shí)顯示雙列字,N=0時(shí)顯示單列字;F=1時(shí)顯示5×10字形,F(xiàn)=0時(shí)顯示5×7字形。本作品中采用8位數(shù)據(jù)格式,2行顯示,5x7字符顯示,故執(zhí)行0011 1000B(0x38)指令。
進(jìn)行顯示器開關(guān)設(shè)定時(shí),指令格式如下:0000 1DCB;D=1時(shí),整體顯示;C=1時(shí),開啟光標(biāo);B=1時(shí),光標(biāo)所在位置光標(biāo)閃爍。本作品中采用關(guān)閉顯示,關(guān)光標(biāo),不閃爍,故執(zhí)行0000 1100B(0x0c)指令。
進(jìn)行進(jìn)入模式設(shè)定時(shí),指令格式如下:0000 01 I/D S;I/D=1時(shí),遞增, I/D=0時(shí),遞減;S=1時(shí),開啟顯示屏且整個(gè)屏移動(dòng);S=0時(shí),屏幕不移動(dòng)。本作品中采用增量不移位,故執(zhí)行0000 0110B(0x06)指令。
清屏指令為0000 0001B(0x01)。
void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個(gè)字符
{
unsigned char address;
if(y==1)
address=0x80+x; //顯示在第一排的時(shí)候的x的地址
else
address=0xc0+x; //顯示在第二排的時(shí)候的x的地址
LCD_write_command(address); //輸入地址
LCD_write_data(dat); //輸入數(shù)據(jù)
}
void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個(gè)數(shù)字
{
unsigned char address;
if(y==1)
address=0x80+x; //顯示在第一排的時(shí)候的x的地址
else
address=0xc0+x; //顯示在第二排的時(shí)候的x的地址
LCD_write_command(address); //輸入地址
LCD_write_data(dat+48); //輸入數(shù)據(jù)
}
1.015.jpg (12.46 KB, 下載次數(shù): 51)
下載附件
2017-2-11 03:25 上傳
表2 1602液晶顯示地址(16列×02行)
根據(jù)表2可以了解到1602液晶第一行第一列顯示位的地址為0x80,第二行第一列顯示位的地址為0xC0,因此LCD_disp_char和LCD_disp_num中的參數(shù)y為1時(shí)輸入的字符或數(shù)字將顯示在第一行,參數(shù)y為0時(shí)輸入的字符或數(shù)字將顯示在第二行,出現(xiàn)在哪一列則由參數(shù)x決定。
1.016.jpg (139.53 KB, 下載次數(shù): 50)
下載附件
2017-2-11 03:25 上傳
圖1.10 1602液晶標(biāo)準(zhǔn)字符庫(kù)
如圖1.10所示,1602液晶可顯示的每一個(gè)字符都有一個(gè)唯一的代碼,其中“A”處于0100 0001B(十進(jìn)制65)位置,“a”處于0110 0001B(十進(jìn)制97)位置,“0”處于0011 0000B(十進(jìn)制48)位置,我們知道“A”、“a”和 “0”的ASCII碼分別為65、97和48,因此只要在參數(shù)dat處直接輸入字母或數(shù)字的ASCII碼即可,字母的ASCII碼即為字母本身,數(shù)字的ASCII碼則為48+數(shù)字。
void dis_num(void)
{
unsigned char i=0,j=0,k=0;
LCD_write_command(0x01);//清除屏幕顯示
character[0] = fre/10000000;
character[1] = fre/1000000%10;
character[2] = fre/100000%10;
character[3] = fre/10000%10;
character[4] = fre/1000%10;
character[5] = fre/100%10;
character[6] = fre/10%10;
character[7] = fre%10;
character[8] = 'H';
character[9] = 'z';
for(i = 0;i<4;i++) //顯示fre=
{
LCD_disp_char(i+0,1,character_1[ i]);
}
for(i = 0;i<10;i++) //判斷第一個(gè)不為0的數(shù)
{
if(character[ i]!=0)
break;
}
k = 8-i;
for(j = 0;j<k;j++) 顯示所有的數(shù)字[="" align] for(i = 5;i<7;i++) //顯示Hz
{
LCD_disp_char(j+4,1,character_1[ i]);
j++;
}
}
此為實(shí)現(xiàn)上文提到的1602液晶芯片在本作品中要發(fā)揮的功能②的函數(shù)。首先使用一個(gè)常規(guī)編程手法將全局變量fre中的8位數(shù)字分別賦值給數(shù)組character[0]- character[7],character[8]:character[9]則固定為“Hz”。在將數(shù)組character_1[]中的字符串“fre=”顯示在1602液晶第一行的前四列的同時(shí),作為虛擬光標(biāo)的局部變量i的值變?yōu)?,接下來(lái),通過(guò)逐位檢查排除將i定位在fre的第一個(gè)不為零的數(shù)位上,此時(shí)8-i的數(shù)值即為fre的有效數(shù)字個(gè)數(shù),有效數(shù)字即要顯示在1602液晶上的數(shù)字,則從字符“=”的下一位即Ox84開始逐位將以上有效數(shù)字顯示在液晶上,最后補(bǔ)上字符串“Hz”。
1.017.jpg (28.3 KB, 下載次數(shù): 33)
下載附件
2017-2-11 03:25 上傳
圖1.21 LCD1602液晶顯示芯片
最后附上1602液晶顯示芯片的接線原理圖,需要說(shuō)明的是,可通過(guò)調(diào)節(jié)電位器R6調(diào)整1602液晶顯示的對(duì)比度。
1.2整體電路原理
1.018.jpg (74.33 KB, 下載次數(shù): 41)
下載附件
2017-2-11 03:25 上傳
圖1.22 電路原理圖
原理說(shuō)明如下:
①待測(cè)信號(hào)從P1(正):P4(負(fù))輸入。
②通過(guò)2SC3355三極管進(jìn)行信號(hào)放大。
③使用74HC14施密特觸發(fā)反相器進(jìn)行多種波形向脈沖波形的轉(zhuǎn)換,并優(yōu)化。
④脈沖波形進(jìn)入74HC390波紋計(jì)數(shù)器進(jìn)行100分頻。
⑤未分頻脈沖和100分頻脈沖分別進(jìn)入單片機(jī)的兩個(gè)定時(shí)/計(jì)數(shù)器,經(jīng)過(guò)軟件算法處理,產(chǎn)生待測(cè)信號(hào)頻率數(shù)值。
⑥將此數(shù)值通過(guò)LCD1602液晶顯示模塊進(jìn)行輸出。
2 軟件算法實(shí)現(xiàn)
上文已作說(shuō)明的電路原理中,“未分頻脈沖和100分頻脈沖分別進(jìn)入單片機(jī)的兩個(gè)定時(shí)/計(jì)數(shù)器,經(jīng)過(guò)軟件算法處理,產(chǎn)生待測(cè)信號(hào)頻率數(shù)值”毫無(wú)疑問(wèn)是最關(guān)鍵的環(huán)節(jié),在此將作詳細(xì)說(shuō)明。
①定時(shí)器初始化函數(shù)
void timer_init(void) //定時(shí)/計(jì)數(shù)器初始化
{
TMOD=0x66; //計(jì)數(shù)器0和計(jì)數(shù)器1工作工作方式2,自動(dòng)重裝初值
TH0=0; //計(jì)數(shù)器初值為0
TL0=0;
TR0=1; //計(jì)數(shù)器開始計(jì)數(shù)
ET0=1; //打開計(jì)數(shù)器0中斷
TH1=0; //計(jì)數(shù)器初值為0
TL1=0;
TR1=1; //計(jì)數(shù)器開始計(jì)數(shù)
ET1=1; //打開計(jì)數(shù)器1中斷
RCAP2H=(65536-62500)/256; //在程序初始化的時(shí)候給RCAP2L和RCAP2H賦值,
RCAP2L=(65536-62500)%256; //TH2和TL2將會(huì)在中斷產(chǎn)生時(shí)自動(dòng)使TH2=RCAP2H,TL2=RCAP2L。
TH2=RCAP2H; //12M晶振下每次中斷62.5ms(1s=1000ms=62.5ms×16)
TL2=RCAP2L;
ET2=1; //打開定時(shí)器2中斷
TR2=1; //定時(shí)器2開始計(jì)時(shí)
EA=1; //開總中斷
}
1.019.jpg (12.01 KB, 下載次數(shù): 45)
下載附件
2017-2-11 03:25 上傳
表3 TMOD寄存器
由表3可知,TMOD=0x66=0110 0110B表明TR0(計(jì)數(shù)器0)和TR1(計(jì)數(shù)器1)工作工作在方式2,即可自動(dòng)重裝8位初值。
另外,52單片機(jī)具有定時(shí)器2,它的功能比定時(shí)/計(jì)數(shù)器0和定時(shí)/計(jì)數(shù)器1要強(qiáng)大很多。它具有自動(dòng)重裝16位初值的功能,初值存儲(chǔ)在16 位計(jì)數(shù)存儲(chǔ)器RCAP2H (高8位)和RCAP2L(低8位)中,只要程序初始化的時(shí)候給RCAP2H和RCAP2L賦值,在中斷產(chǎn)生時(shí)將會(huì)自動(dòng)執(zhí)行TH2=RCAP2H,TL2=RCAP2L。這個(gè)中斷操作在C語(yǔ)言中被編排為52單片機(jī)特有的方式5,即“interrupt 5”。
通過(guò)計(jì)算得到若要在晶振為12MHz的條件下每62.5ms進(jìn)行一次計(jì)時(shí)中斷需要在RCAP2H: RCAP2L裝載初值62500。選擇62.5ms的原因是62.5ms×16=1000ms=1s,這樣既可通過(guò)準(zhǔn)確測(cè)量計(jì)算16個(gè)計(jì)時(shí)中斷周期內(nèi)在TR0和TR1上捕獲了幾個(gè)脈沖信息,即待測(cè)信號(hào)的頻率值。
②中斷函數(shù)
void timer2(void) interrupt 5 //定時(shí)器2中斷(62.5ms)
{
time++;
TF2=0; //定時(shí)器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)程序中將其清零
if (time==16) //定時(shí)1s時(shí)間到
{
time=0; //計(jì)時(shí)清0
EA=0; //關(guān)中斷
fre=(long)count1*256+TL1; //count*256強(qiáng)制轉(zhuǎn)換成long型,否則將不產(chǎn)生進(jìn)位 先判斷分頻后(計(jì)數(shù)器1)
FLAG = 0;
if(fre<2000)//如果不到200KHz則讀取分頻前(計(jì)數(shù)器0)頻率(200K÷100=2000)
{
fre = (long)count*256+TL0;
FLAG = 1;
}
if(!FLAG)
{
fre = fre *100;//100分頻
}
TL0=0; //清零計(jì)數(shù)器0計(jì)數(shù)
TH0=0;
TL1=0;
TH1=0;
count=0; //清零計(jì)數(shù)器0計(jì)數(shù)
count1=0;
EA=1; //開中斷
}
}
//----------------------------------------------------------------
void timer0(void) interrupt 1 //計(jì)數(shù)器0中斷(100分頻前)
{
count++;
}
//----------------------------------------------------------------
void timer1(void) interrupt 3 //計(jì)數(shù)器1中斷(100分頻后)
{
count1++;
}
依照上文的方案,通過(guò)變量time控制定時(shí)器2每16個(gè)62.5ms,即1s進(jìn)行一次中斷。進(jìn)入中斷后,考察來(lái)自TR1的脈沖計(jì)數(shù)值,“fre = (long)count*256+TL1;”的含義是:count為1s計(jì)時(shí)到時(shí)時(shí)TL1在此周期內(nèi)重裝初值的次數(shù),即TR1的中斷次數(shù),將此值乘以256再加上定時(shí)器2中斷瞬間TL1的值即為此周期內(nèi)TR1捕獲的脈沖的準(zhǔn)確數(shù)量,需要注意的是,fre是long類型變量,故需將count強(qiáng)制臨時(shí)轉(zhuǎn)換成long類型,否則與256相乘后仍是8位的字節(jié)變量,造成錯(cuò)誤。
若經(jīng)過(guò)上述考察后發(fā)現(xiàn)fre的數(shù)值不到200KHz的100分頻值即2000Hz,則根據(jù)盡量規(guī)避分頻造成誤差的原則,在單片機(jī)能處理的頻率范圍內(nèi)進(jìn)行操作,即使用TR0上捕獲的1s內(nèi)未分頻原始脈沖信號(hào)到達(dá)的數(shù)量對(duì)fre進(jìn)行賦值,方法及注意事項(xiàng)同上。
最后,清零一切TR0、TR1計(jì)數(shù)值并重新打開總中斷,等待潛在的頻率數(shù)值變化的出現(xiàn)。
③主函數(shù)
void main()
{
unsigned char i;
LCD_init();
timer_init(); //定時(shí)/計(jì)數(shù)器初始化
for(i = 0;i<4;i++)
{
LCD_disp_char(i+0,1,character_1[ i]);
}
while(1)
{
dis_num(); //顯示
delay_1s();
}
}
主函數(shù)的主要任務(wù)就是進(jìn)行各種初始化并開啟無(wú)限循環(huán)檢測(cè)輸入信號(hào)頻率值的變化并通過(guò)改變fre的值在LCD1602上表現(xiàn)出來(lái)(在無(wú)信號(hào)輸入的情況下,初始化函數(shù)將LCD1602上顯示的字符固定為“fre= Hz”)。
3 結(jié)論
實(shí)訓(xùn)的最終目的是全面提高學(xué)生的職業(yè)素質(zhì),最終達(dá)到學(xué)生滿意就業(yè)、企業(yè)滿意用人的目的。合理的實(shí)訓(xùn)教育本應(yīng)該是大學(xué)教育的一個(gè)重要組成部分。這次的實(shí)訓(xùn)與以往不同,是以小組為單位而進(jìn)行的,以往都是一個(gè)人在努力,而今有了組員的幫助,事情變得有條理了不少,大大的鍛煉了我們組員之間的協(xié)作能力,提高了個(gè)人的團(tuán)隊(duì)合作意識(shí),讓我們以后面對(duì)一個(gè)企業(yè)的氛圍時(shí)不至于埋頭苦干。
這次實(shí)訓(xùn)我們使用的是單片機(jī)系統(tǒng),對(duì)于當(dāng)前智能電子儀器已經(jīng)在當(dāng)今生活中無(wú)處不在的情況下,尤其活躍于計(jì)算機(jī)領(lǐng)域中,我們更需要對(duì)單片機(jī)進(jìn)行進(jìn)一步的了解和掌握,以順應(yīng)時(shí)代的潮流,而目前祖國(guó)也需要大量的技術(shù)型人才,而我們這些二十一世紀(jì)的大學(xué)生將為以后對(duì)國(guó)家進(jìn)行更大的貢獻(xiàn)。
回顧這次的實(shí)訓(xùn),我們感慨萬(wàn)千,的確,從選題到制作,從調(diào)試到論文,每一個(gè)環(huán)節(jié)都留下我們努力的汗水,尤其是現(xiàn)在是大四這個(gè)關(guān)鍵的時(shí)期,我們組員也各有自己的事情要忙,考研的考研,找工作的找工作,難得有聚在一起的機(jī)會(huì)。但是毫無(wú)疑問(wèn),我們?nèi)皂樌耐瓿闪巳蝿?wù),并從中學(xué)到不少理論上和為人處世上的知識(shí),為我們以后的發(fā)展留下了寶貴的經(jīng)驗(yàn)。通過(guò)這次實(shí)訓(xùn),我們明白了團(tuán)隊(duì)的重要性,再一次讓理論溶于實(shí)踐之中,更加提高了實(shí)踐能力和動(dòng)手能力。
謝 辭
實(shí)訓(xùn)臨近結(jié)束了,在短暫的實(shí)訓(xùn)過(guò)程中得到了老師和很多同學(xué)的幫助。首先衷心感謝王守華、歸發(fā)弟和鄧艷容三位老師的悉心指導(dǎo)和熱情幫助,在我們小組完成過(guò)程中給以大力的幫助,讓我們學(xué)到了許多實(shí)踐的知識(shí),開闊了眼界,增強(qiáng)了我們的實(shí)踐動(dòng)手能力,以及我們的團(tuán)隊(duì)合作精神。同時(shí),還要感謝全班同學(xué)對(duì)我們小組的大力幫助,讓我們?cè)诙盏暮L(fēng)中天天都充滿了干勁,如果沒(méi)有他們,我們不能夠完成得這么順利。除此之外,我們小組的組員各有分工,通力合作,彼此互相協(xié)作,不懂的地方大家一起討論,碰到困難時(shí)大家一起解決,正是有了這種小組的氛圍,我們才能夠最終恪盡職守的完成這一個(gè)實(shí)訓(xùn)任務(wù)。不過(guò)由于我們時(shí)間和水平有限,本作品仍然有很多缺憾和不足的地方,懇請(qǐng)老師和同學(xué)批評(píng)指出。
參考文獻(xiàn)
[1] 金峰. 智能儀器設(shè)計(jì)基礎(chǔ). 清華大學(xué)出版社,2005.
[2] 程德福,林君. 智能儀器(第二版). 機(jī)械工業(yè)出版社,2009.
[3] 王賢勇,趙傳申. 單片機(jī)原理與接口技術(shù)應(yīng)用教程. 清華大學(xué)出版社,2010.
[4] 譚浩強(qiáng). C語(yǔ)言程序設(shè)計(jì)(第三版). 清華大學(xué)出版社,2005.
[5] 劉海濤. 8051單片機(jī)C語(yǔ)言程序設(shè)計(jì)與實(shí)例解析. 清華大學(xué)出版社,2009.
附 錄1
以下為本電路的PCB(Printed Circuit Board,印制電路板):
1.020.jpg (74.13 KB, 下載次數(shù): 55)
下載附件
2017-2-11 03:25 上傳
圖.附錄PCB

本課設(shè)論文對(duì)應(yīng)的所有設(shè)計(jì)資料下載(包含仿真工程文件 源碼等):
http://m.raoushi.com/bbs/dpj-77186-1.html