第一篇:單片機課程設(shè)計報告——智能數(shù)字頻率計
單片機原理課程設(shè)計報告
題目:智能數(shù)字頻率計設(shè)計
專業(yè): 信息工程 班級:信息111 學(xué)號:*** 姓名:*** 指導(dǎo)教師:***
北京工商大學(xué)計算機與信息工程學(xué)院
1、設(shè)計目的
(1)了解和掌握一個完整的電子線路設(shè)計方法和概念;
(2)通過電子線路設(shè)計、仿真、安裝和調(diào)試,了解和掌握電子系統(tǒng)研發(fā)產(chǎn)品的一個基本流程。
(3)了解和掌握一些常見的單元電路設(shè)計方法和在電子系統(tǒng)中的應(yīng)用: 包括放大器、濾波器、比較器、計數(shù)和顯示電路等。
(4)通過編寫設(shè)計文檔與報告,進一步提高學(xué)生撰寫科技文檔的能力。
2、設(shè)計要求
(1)基本要求
設(shè)計指標(biāo):
1.頻率測量:0~250KHz; 2.周期測量:4mS~10S; 3.閘門時間:0.1S,1S;
4.測量分辨率:5位/0.1S,6位/1S; 5.用圖形液晶顯示狀態(tài)、單位等。
充分利用單片機軟、硬件資源,在其控制和管理下,完成數(shù)據(jù)的采集、處理和顯示等工作,實現(xiàn)頻率、周期的等精度測量方案。在方案設(shè)計中,要充分估計各種誤差的影響,以獲得較高的測量精度。
(2)擴展要求
用語音裝置來實現(xiàn)頻率、周期報數(shù)。
(3)誤差測試
調(diào)試無誤后,可用數(shù)字示波器與其進行比對,記錄測量結(jié)果,進行誤差分析。
(4)實際完成的要求及效果
1.測量范圍:0.1Hz~4MHz,周期、頻率測量可調(diào); 2.閘門時間:0.05s~10s可調(diào); 3.測量分辨率:5位/0.01S,6位/0.1S; 4.用圖形液晶顯示狀態(tài)、單位(Hz/KHz/MHz)等。
3、硬件電路設(shè)計
(1)總體設(shè)計思路 本次設(shè)計的智能數(shù)字頻率計可測量矩形波、鋸齒波、三角波、方波等信號的頻率。系統(tǒng)共設(shè)計包括五大模塊: 主芯片控制模塊、整形模塊、分頻模塊、檔位選擇模塊、和顯示模塊。設(shè)計的總的思想是以AT89S52單片機為核心,將被測信號送到以LM324N為核心的過零比較器,被測信號轉(zhuǎn)化為方波信號,然后方波經(jīng)過由74LS161構(gòu)成的分頻模塊進行分頻,再由74LS153構(gòu)成的四選一選擇電路控制檔位,各部分的控制信號以及頻率的測量主要由單片機計數(shù)及控制,最終將測得的信號頻率經(jīng)LCD1602顯示。
各模塊作用如下: 1.主芯片控制模塊: 單片機AT89S52 內(nèi)部具有2個16位定時/計數(shù)器T0、T1,定時/計數(shù)器的工作可以由編程來實現(xiàn)定時、計數(shù)和產(chǎn)生計數(shù)溢出時中斷要求的功能。利用單片機的計數(shù)器和定時器的功能對被測信號進行計數(shù)。以AT89S52 單片機為控制核心,來完成對各種被測信號的精確計數(shù)、顯示以及對分頻比的控制。利用其內(nèi)部的定時/計數(shù)器完成待測信號周期/頻率的測量。
2.整形模塊:整形電路是將一些不是方波的待測信號轉(zhuǎn)化成方波信號,便于測量。本設(shè)計使用運放器LM324連接成過零比較器作為整形電路。
3.分頻模塊: 考慮單片機利用晶振計數(shù),使用11.0592MHz 時鐘時,最大計數(shù)速率將近500 kHz,因此需要外部分頻。分頻電路用于擴展單片機頻率測量范圍,并實現(xiàn)單片機頻率測量使用統(tǒng)一信號,可使單片機測頻更易于實現(xiàn),而且也降低了系統(tǒng)的測頻誤差。本設(shè)計使用的分頻芯片是74LS161實現(xiàn)4分頻及16分頻。
4.檔位選擇模塊:控制74LS161不分頻、4分頻 或者 16分頻,控制芯片是74LS153。5.顯示模塊:編寫相應(yīng)的程序可以使單片機自動調(diào)節(jié)測量的量程,并把測出的頻率數(shù)據(jù)送到顯示電路顯示,本設(shè)計選用LCD1602。
(2)測頻基本設(shè)計原理
所謂“頻率”,就是周期性信號在單位時間(1s)內(nèi)變化的次數(shù)。若在一定時間間隔T內(nèi)測得這個周期性信號的重復(fù)變化次數(shù)N,則其頻率可表示為f=N/T(右圖3-1所示)。其中脈沖形成電路的作用是將被測信號變成脈沖信號,其重復(fù)頻率等于被測頻率fx。利用單片機的定時/計數(shù)T0、T1的定時、計數(shù)功能產(chǎn)生周期為1s的時間脈沖信號,則門控電路的輸出信號持 圖3-1 續(xù)時間亦準(zhǔn)確地等于1s。閘門電路由標(biāo)準(zhǔn)的秒脈沖信號進行控制,當(dāng)秒脈沖信號來到時,閘門開通,被測脈沖信號通過閘門送到計數(shù)譯碼顯示電路。秒脈沖信號結(jié)束時閘門關(guān)閉,計數(shù)器停止計數(shù)。由于計數(shù)器計得的脈沖數(shù)N是在1秒時間內(nèi)的累計數(shù),所以被測頻率fx=NHz。
(2)系統(tǒng)框圖
本智能數(shù)字頻率計系統(tǒng)框圖如圖3-2所示
圖3-2智能數(shù)字頻率計系統(tǒng)框圖
(3)單片機部分
P0口經(jīng)上拉后做LCD數(shù)據(jù)接口 P2.1~P2.3作為LCD控制端口 P2.4~P2.5作為分頻選擇端口 P3.5作為被測信號輸入端口
P3.2~P3.4作為開關(guān)控制端口(對應(yīng)電路圖中K1,K2,SET)
圖3-3 89D52單片機部分電路
(4)分頻部分
74HC161與74ls161功能兼容,是常用的四位二進制可預(yù)置的同步加法計數(shù)器,他可以靈活的運用在各種數(shù)字電路,以及單片機系統(tǒng)中實現(xiàn)分頻器等很多重要的功能。
其管腳圖如圖3-4所示:
圖3-4 74HC161 圖3-5 74HC153管腳圖
74HC153是一個雙4選1數(shù)據(jù)選擇器,其管腳圖如圖3-5所示:
74LS161對整形后的防波信號進行分頻,Q1為四分頻輸出,Q3為16分頻輸出。未經(jīng)分頻、經(jīng)過四分頻和經(jīng)過16分頻的三路信號作為74LS153的一個4選1數(shù)據(jù)選擇器低三位輸入,由單片機控制選擇分頻數(shù),然后再送單片機內(nèi)部計數(shù)器T1(如圖3-6)。
圖3-6 分頻、選擇分頻檔位電路圖
(5)LCD顯示部分
LCD顯示,1602的八位數(shù)據(jù)I/O口與單片機的P0口相連,讀寫控制端接P2.0-P2.2口。三個按鍵中,設(shè)置鍵接P3.2單片機按外部中斷0接口,當(dāng)按鍵按下后,置P3.2口低電平,單片機中斷。S1、S2為頻率/周期、閘門時間加/減選擇按鍵(如圖3-7)。
圖3-7 LCD顯示部分電路圖
4、軟件設(shè)計
(1)主程序流程圖設(shè)計
本次程序設(shè)計采用的是C語言程序設(shè)計,其設(shè)計流程圖4-1所示:
圖4-1主程序流程圖
(2)子程序流程圖設(shè)計
<1>顯示程序:
LCD顯示程序設(shè)計流程如圖4-2所示:
圖4-2顯示程序流程圖 <2>頻率測量程序框圖:
頻率測量程序的整體架構(gòu)如圖4-3所示:
圖4-3頻率測量框架圖
(3)中斷服務(wù)流程圖
INT0中斷流程圖如圖4-4所示:
圖4-4INT0中斷流程圖
(4)程序代碼
#include
//頻率 float p;
//周期 float sj;
//閘門時間 char idata buff[20];char flag=0;
//頻率、周期選擇標(biāo)志位
char xs=0;//設(shè)置閘門時間結(jié)束后是否顯示結(jié)果的標(biāo)志位
unsigned char m=0,n=0,yichu=0,fenpin;
//m定時中斷次數(shù) n計數(shù)中斷次數(shù) yichu判斷是定時
//器還是計數(shù)器溢出
#define Key_Set P3 #define K1 0xf7
//11110111
P33 #define K2 0xef
//11101111
P34 #define NO_Set 0xff #define Freq 0 #define Peri 1
sbit B153=P2^4;sbit A153=P2^3;sbit P17=P3^4;sbit P16=P3^3;sbit P35=P3^5;sbit Set=P3^2;unsigned char LCD_Wait(void);void LCD_Write(bit style, unsigned char input);void LCD_SetDisplay(unsigned char DisplayMode);void LCD_SetInput(unsigned char InputMode);void LCD_Initial();void GotoXY(unsigned char x, unsigned char y);void Print(unsigned char *str);void C52_Initial();void Delay(unsigned int t);void display(float f);void cepin();void panduan();void timedisplay(float sj);void Time_Set1();void Time_Set2();void t0();void t1();
/*****模塊名稱 LCD1602顯示程序******/
/***********************端口定義 ***********************************/
sbit LcdRs= P2^0;sbit LcdRw= P2^1;sbit LcdEn= P2^2;sfr DBPort= 0x80;
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口 /************************內(nèi)部等待函數(shù)********************************/
unsigned char LCD_Wait(void){
LcdRs=0;
//寄存器選擇輸入端 1:數(shù)據(jù) 0:指令
LcdRw=1;
_nop_();//RW:為0:寫狀態(tài);為1:讀狀態(tài);
LcdEn=1;
_nop_();
//使能輸入端,讀狀態(tài),高電平有效;寫狀態(tài),下降沿有效
LcdEn=0;
return DBPort;
} /**********************向LCD寫入命令或數(shù)據(jù)***************************/
#define LCD_COMMAND 0
// Command #define LCD_DATA 1
// Data #define LCD_CLEAR_SCREEN
0x01
// 清屏 #define LCD_HOMING
0x02
// 光標(biāo)返回原點 void LCD_Write(bit style, unsigned char input){
LcdEn=0;
LcdRs=style;
LcdRw=0;
_nop_();
DBPort=input;
_nop_();//注意順序
LcdEn=1;
_nop_();//注意順序
LcdEn=0;
_nop_();
LCD_Wait();} /********************設(shè)置顯示模式*********************************/
#define LCD_SHOW
0x04
//顯示開 #define LCD_HIDE
0x00
//顯示關(guān)
#define LCD_CURSOR
0x02
//顯示光標(biāo)
#define LCD_NO_CURSOR
0x00
//無光標(biāo)
#define LCD_FLASH
0x01
//光標(biāo)閃動 #define LCD_NO_FLASH
0x00
//光標(biāo)不閃動 void LCD_SetDisplay(unsigned char DisplayMode){
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
} /*********************設(shè)置輸入模式***********************************/ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00
// default #define LCD_MOVE 0x01
// 畫面可平移 #define LCD_NO_MOVE 0x00
//default void LCD_SetInput(unsigned char InputMode){
LCD_Write(LCD_COMMAND, 0x04|InputMode);} /******************初始化LCD**************************************/
void LCD_Initial(){
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38);
//8位數(shù)據(jù)端口,2行顯示,5*7點陣
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);
//開啟顯示, 無光標(biāo)
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
//清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
//AC遞增, 畫面不動 }
/************************************************************************/ void GotoXY(unsigned char x, unsigned char y){ if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));} void Print(unsigned char *str){
while(*str!=' 主站蜘蛛池模板: 中文字幕人成乱码熟女香港| 日本久久99成人网站| 麻豆成人av不卡一二三区| 无码国内精品人妻少妇| 国产乱人伦真实精品视频| 动漫成人无码免费视频在线播| 99精品国产综合久久久久五月天| 欧美激情性做爰免费视频| 黑人好猛厉害爽受不了好大撑| 55夜色66夜色国产精品视频| 国精产品自偷自偷综合下载| 亚洲中文字幕久久精品无码va| 欧美丰满熟妇aaaaa片| 国产日韩一区二区三区在线观看| 久久久久噜噜噜亚洲熟女综合| 极品人妻被黑人中出种子| 国产乱妇无乱码大黄aa片| 成人看片黄a免费看那个网址| 亚洲中文字幕av无码专区| 青青草无码精品伊人久久7| 国产精品偷伦视频免费观看了| 国产成人精彩在线视频| 亚洲高清专区日韩精品| 成人亚洲a片v一区二区三区日本| 中文亚洲成a人片在线观看| 狠狠爱亚洲五月婷婷av| 精品亚洲成av人在线观看| 免费a级毛片樱桃视频| 国产精品无码一区二区在线看| 亚洲精品99久久久久久欧美版| 亚洲中文字幕无码一区无广告| 九九久久精品国产| 亚洲精品无码精品mv在线观看| 久久亚洲精品无码av| 自怕偷自怕亚洲精品| 精品一区二区不卡无码av| 亚洲av无码专区在线播放| 天堂无码人妻精品一区二区三区| 中文乱码免费一区二区三区| 丰满人妻无码∧v区视频| 亚洲另类欧美小说图片区|