版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄前言1一、總體方案設(shè)計與選擇21、設(shè)計要求32、設(shè)計原理33、方案選擇3二 硬件設(shè)計部分 41、AD轉(zhuǎn)換電路設(shè)計 52、濾波器電路設(shè)計63、微處理器電路及外圍電路設(shè)計64、按鍵掃描電路與報警電路設(shè)計65.顯示電路設(shè)計66串口通信電路設(shè)計6三 軟件設(shè)計部分61、按鍵掃描程序62、顯示程序設(shè)計63、定時器中斷程序64、串口通信程序65、AD轉(zhuǎn)換程序設(shè)計66、數(shù)據(jù)處理程序6四 個人總結(jié)6附錄1:完整程序清單6附錄2:硬件連接圖6附錄3:軟件流程圖6參考文獻6前言隨著微電子技術(shù)的不斷發(fā)展,集成了CPU、存儲器、定時器/計數(shù)器、并行和串行接口、看門狗、前置放大器甚至A/D、D/A轉(zhuǎn)換器等電路在一塊芯
2、片上的超大規(guī)模集成電路芯片(即單片機)出現(xiàn)了。以單片機為主體,將計算機技術(shù)與測量控制技術(shù)結(jié)合在一起,又組成了所謂的“智能化測量控制系統(tǒng)”,也就是智能儀器。一 總體方案設(shè)計與選擇1、設(shè)計要求本次課程設(shè)計要求設(shè)計一個智能化的數(shù)據(jù)采集和電壓監(jiān)控系統(tǒng),該系統(tǒng)以單片機為核心并具有如下功能:1、能對24v范圍變化的模擬信號進行連續(xù)采樣(模擬信號中有尖峰脈沖干擾和50Hz工頻干擾)和實時數(shù)字顯示,采樣頻率為10Hz,保存最近的50個連續(xù)采樣值;2、當(dāng)采樣值小于2v時第一個報警燈閃爍,大于4v時第二個報警燈閃爍;3、能對存在的系統(tǒng)誤差進行線性插值校正;4、能和上位機進行串行通信,根據(jù)上位機的要求隨時將采樣數(shù)據(jù)
3、上傳;5、能產(chǎn)生占空比為20%幅度為5v的50Hz 脈沖波供外設(shè)用。2、設(shè)計原理智能儀器由硬件和軟件來那個大部分組成。硬件包括微處理器、存儲器、輸入通道、輸出通道、人機接口電路、通信接口電路等部分。本次設(shè)計即從硬件和軟件兩部分來設(shè)計系統(tǒng)。硬件基本結(jié)構(gòu)如下圖所示 RS232USB本次設(shè)計硬件部分僅要求考慮輸入通道、微處理器、人機接口電路和串口通信幾部分。其中包括元器件的選擇、相關(guān)電路參數(shù)的計算以及電路的連接。軟件部分則要考慮AD轉(zhuǎn)換、定時中斷、串口通信以及數(shù)據(jù)分析與處理等部分。為滿足設(shè)計要求,我的設(shè)計思路為:采用低通濾波器或采用50Hz陷波器對工頻干擾信號進行濾除,然后利用AD轉(zhuǎn)換器將模擬信號轉(zhuǎn)
4、換為數(shù)字信號送入微處理器進行分析預(yù)處理,同時微處理器利用軟件濾波濾除尖峰脈沖干擾、進行人機接口交互、串口通信以及產(chǎn)生占空比位20%的50Hz的脈沖波供外部使用。濾波器我們可以采用數(shù)字濾波器,也可以采用模擬濾波器;為保證1mv的分辨率我們可以選擇量程為4V分辨率為12Bit的AD轉(zhuǎn)換器,也可采用量程為5V分辨率為16Bit的AD轉(zhuǎn)換器;微處理器我們可以從51、ARM和DSP等微處理器中選擇;對于顯示部分我們可以利用數(shù)碼管或者液晶屏顯示,也可通過led點陣顯示;對于串口同行我們可以使用RS232或者USB。3、方案選擇在本次設(shè)計中我采用50Hz陷波器進行濾除50Hz工頻干擾,利用5V量程的16Bi
5、t分辨率AD轉(zhuǎn)換器;微處理器采用51單片機;顯示部分利用數(shù)碼管顯示;串口通信利用RS232通信。軟件部分采用中間值濾波去除尖峰干擾。詳情請見硬件設(shè)計部分和軟件設(shè)計部分二 硬件設(shè)計部分1、AD轉(zhuǎn)換電路設(shè)計在設(shè)計中我采用的是5V量程16Bit的AD轉(zhuǎn)換器AD7705BR。AD7705是一種片內(nèi)帶數(shù)字濾波的-A/D轉(zhuǎn)換器,它包括一個-(或電荷平衡)ADC、片內(nèi)帶靜態(tài)RAM的校準(zhǔn)微控制器、時鐘振蕩器、數(shù)字濾波器和一個雙向串行通信端口。 AD7705包括2個可編程增益全差分模擬輸入通道,輸入通道的可選增益為1、2、4、8、16、32、64和128。輸入到模擬輸入端的信號被持續(xù)采樣,采樣頻率由主時鐘 MC
6、LKIN的頻率和選定的增益決定。模擬輸入端的可編程增益功能配合-調(diào)制器,修正輸入的采樣頻率,以獲得更高的增益。AD7705還具有自校準(zhǔn)功能和手動校準(zhǔn)功能。 AD7705的數(shù)字濾波器是一個Sinc3低通濾波器,它處理-調(diào)制器的輸出并以一定的速率更新輸出寄存器,這速率由濾波器 第一個陷波的頻率決定。數(shù)字濾波器的第一個陷波頻率(以及-3dB頻率)可以通過設(shè)置寄存器的FS0和FS1編程。當(dāng)主時鐘的頻率為2.4576MHz時,第一陷波頻率的可編程范圍為50Hz500Hz,-3dB頻率的范圍為13.1Hz131Hz。主時鐘頻率為1MHz時,第一陷波頻率的可編程范圍為20Hz200Hz,-3dB頻率的范圍為
7、5.24Hz52.4Hz。)下圖表示了AD7705可設(shè)置的輸出更新率和截止頻率。(注1)圖1.AD7705輸出更新率(陷波頻率)設(shè)置下圖表示當(dāng)設(shè)置輸出更新率為60Hz時增益-頻率圖:圖2.增益-頻率圖因此我們可以利用微處理器的控制功能來設(shè)置不同的輸出更新率來控制低通濾波器的的截止頻率和陷波器的陷波頻率。這也是我選用這款芯片的原因。它集成的低通濾波器和陷波器不僅使電路結(jié)構(gòu)更為簡單,測量更為準(zhǔn)確,價格也更加低廉。圖3表示的是AD7705的電路連接圖:圖3.AD轉(zhuǎn)換電路圖2、濾波器電路設(shè)計由于AD7705中帶有一個數(shù)字低通濾波器,顧可以不用考慮濾波器部分,僅僅用軟件修改幾個參數(shù)就可以控制濾波器的截止
8、頻率和陷波頻率,詳情請見AD轉(zhuǎn)換電路設(shè)計和AD轉(zhuǎn)換軟件設(shè)計。3、微處理器電路及外圍電路設(shè)計在這次設(shè)計中我采用的是51系列單片機,我選用的型號是STC90C516RD。在這個系統(tǒng)中我們需要存儲50個采樣數(shù)據(jù),而對于我用的16位AD轉(zhuǎn)換器來說需占用100個字節(jié)的空間,而且進行數(shù)據(jù)運算也需要大量的存儲空間,同時也為了以后有更好的升級空間,對于僅有128字節(jié)的51單片機就有點相形見絀了。我所采用的STC90C516在芯片內(nèi)部擴展了64Kb的程序存儲空間和1Kb的數(shù)據(jù)存儲空間,而且完全兼容傳統(tǒng)的80C51系列單片機。這款單片機完全能滿足該系統(tǒng)的需求。其電路連接圖如下:圖4.MCU電路連接圖微處理器必須有
9、一些外圍電路才可以正常工作,比如必備的時鐘電路,復(fù)位電路。單片機的P0口為數(shù)據(jù)線與地址線共用的三態(tài)IO口,如果用它做普通IO是還必須外接上拉電阻。其電路圖如下所示:圖5.時鐘電路連接圖 圖6.復(fù)位電路圖 圖7.上拉電阻連接圖4、按鍵掃描電路與報警電路設(shè)計雖然AD7705具有自動校準(zhǔn)功能,但為了更準(zhǔn)確的校準(zhǔn)數(shù)據(jù),我才用了手動校準(zhǔn)功能。這里我設(shè)計了兩個按鍵用來提供校準(zhǔn)的選擇功能。在校準(zhǔn)時輸入校準(zhǔn)電壓后也必須按確認(rèn)鍵才能校準(zhǔn)下一個電壓(需要校準(zhǔn)零電壓和基準(zhǔn)電壓)。由于按鍵比較少,我們采用獨立按鍵的方式連接。在電壓小于2V或大于4V需要有提示電壓范圍錯誤,我采用蜂鳴器來報警進行提示。電路連接圖如下:
10、圖8.按鍵掃描電路 圖9.蜂鳴器驅(qū)動電路5.顯示電路設(shè)計顯示部分采用4位8段數(shù)碼管進行顯示,其電路連接圖如下所示:圖10.顯示電路連接圖其中38譯碼器來控制位選,P0口決定輸出的字形。6串口通信電路設(shè)計單片機具有串口通信功能,其基于RS232通信協(xié)議。但單片機的輸出電平為TTL電平,位05V,而RS232總線電壓遠遠高于這個值,因此需要一個電平轉(zhuǎn)換元件。這里采用的是MAX232,它可以將TTL電平與RS232電平進行轉(zhuǎn)換。其電路連接圖如下:圖12.RS232電路連接圖至此所有的硬件電路就完成了,接下來的就是軟件部分了。三 軟件設(shè)計部分1、按鍵掃描程序圖13.按鍵掃描程序流程圖2、顯示程序設(shè)計在
11、顯示部分我采用38譯碼器進行位選,用P0口進行字選。其程序如下:void display(INT8U date,INT8U bite,INT8U mode)bite=bite<<2;/左移兩位BITE=BITE&0xE3;BITE=BITE|bite; /輸出位選信號if(mode=0)DATE=tabledate; /輸出字形if(mode=1)DATE=chdate;if(mode=2)DATE=table1date;該函數(shù)實現(xiàn)的功能在在某一位數(shù)碼管顯示某一字形,其中模式包括顯示數(shù)字、顯示帶小數(shù)點的數(shù)字以及顯示表示運行狀態(tài)的字符三種。在顯示電壓值等過程中經(jīng)常被調(diào)用3、定
12、時器中斷程序在程序中我采用定時器0工作為方式1,利用中斷產(chǎn)生占空比為20%的50Hz的脈沖信號,同時也控制AD轉(zhuǎn)換器進行10Hz的轉(zhuǎn)換。在考慮串口通信問題,我采用了11.0592M的晶振,以2ms為時基進行一次中斷,由此可確定寫入計數(shù)器的初值:化為16進制數(shù)位0xF8CC。中斷程序如下:void Time0_handdle() interrupt 1TH0 = 0xF8;/裝計數(shù)器初值TL0 = 0xCC;beat+;if(beat%10=2) pwm=0; /輸出低電平if(beat%10=0) pwm=1; /輸出高電平if(beat=50)/開啟轉(zhuǎn)換開關(guān)start=1;beat=0;該函
13、數(shù)實現(xiàn)的功能是每逢10個時基(2ms)中,前兩個時基顯示高電平,然后把電平拉低,后8個時基顯示低電平,然后把電平拉高。這樣就輸出了占空比20%的50Hz的外部脈沖,同時每50個時基后把AD轉(zhuǎn)換開關(guān)打開。4、串口通信程序在程序中我使能了串口的發(fā)送與接收功能,并通過串口的接收功能來實現(xiàn)對系統(tǒng)的簡單控制(類似于按鍵)。在串口通信程序中我設(shè)置為模式1;定時器1采用模式2,波特率設(shè)為9600,由查表可知計數(shù)初值為0xFD。中斷程序如下:void usart_handdle() interrupt 4if(RI=1)RI=0;COM=SBUF;if(TI=1)該函數(shù)實現(xiàn)的功能是不停地想上位機發(fā)送提示信息,
14、表示程序運行的狀態(tài),在可按鍵操作時也可通過向串口發(fā)送數(shù)據(jù)進行控制。其中發(fā)送字符采用查詢方式,接收字符采用中斷方式。5、AD轉(zhuǎn)換程序設(shè)計系統(tǒng)采用的AD轉(zhuǎn)換器由基于SPI協(xié)議的串口總線控制。但由于單片機沒有SPI控制器,故需要利用單片機的IO口來模擬SPI總線協(xié)議。此外由于AD轉(zhuǎn)換器具有自動校準(zhǔn)和數(shù)字濾波功能,需要在利用AD轉(zhuǎn)換器的時候?qū)D轉(zhuǎn)換器進行初始化。其程序如下:void write_date(uchar cmd)uchar i;DATA=1;CLK=1;for(i=0;i<8;i+)/循環(huán)寫入8個數(shù)據(jù)CLK=0;_Nop();_Nop();_Nop();if(cmd&0x8
15、0)DATA=1;/如果最高位為1就輸出1elseDATA=0;CLK=1;_Nop();_Nop();_Nop();cmd=cmd<<1;DATA=1;/拉高數(shù)據(jù)線使系統(tǒng)更可靠/讀AD的采樣值(16位)uint read_date()uint ad;uchar i;write_date(0x38);/ 選通數(shù)據(jù)寄存器,確定下次讀取數(shù)據(jù)寄存器CLK=1;ad=0x0000;for(i=0;i<16;i+)/循環(huán)讀16次串口數(shù)據(jù)ad=ad<<1;CLK=0;_Nop();if(DATA)ad=ad|0x0001;CLK=1;CLK=1;DATA=1;return a
16、d ;上面兩個程序為利用IO端口模擬SPI協(xié)議來對AD7705進行控制的程序。void AD7705_Init()uchar i;CLK=1;/時鐘和數(shù)據(jù)線都拉高確保可靠DATA=1;for(i=0;i<40;i+)/數(shù)據(jù)拉高連續(xù)超過32個時鐘信號完成AD復(fù)位CLK=0;_nop_();CLK=1;_nop_();delay(1200);DATA=1;write_date(0x20);/選通數(shù)據(jù)寄存器,確定下次往時鐘寄存器中寫值write_date(0x04);/設(shè)置數(shù)據(jù)輸出刷新率為50HZ,CLK=0,F(xiàn)S1=0,F(xiàn)S0=0write_date(0x10);/選通數(shù)據(jù)寄存器,確定下次往
17、設(shè)置寄存器中寫值write_date(0x04);/不校正,增益1,單極性,無緩沖,不同步上述程序為AD7705初始化程序,其中將CLK,F(xiàn)S1和FS0位設(shè)為1,0,0;由圖1可知AD轉(zhuǎn)換器的截止頻率為13.1Hz,陷波頻率為50Hz,可以去除工頻脈沖。6、數(shù)據(jù)處理程序在程序中我采用中間值濾波法濾除尖峰脈沖。具體實現(xiàn)過程如下:val_rec=read_date();/接收最新數(shù)據(jù)數(shù)據(jù)start=0;checkcheck_head=val_rec; /將最新的數(shù)據(jù)替換check數(shù)組最舊的值check_head+; /修改check首地址if(check_head=size)check_head=
18、0;for(i=0;i<size;i+) /中間值濾波for(j=i+1;j<size;j+)if(checki<checkj)checki=val_rec;checki=checkj;checkj=val_rec;valval_head=checksize/2; /將中間值存儲val_head+;if(val_head=50)val_head=0;該部分采用的中值濾波法利用size個采樣值進行排序,并將中間值作為有效的測量值進行存儲。至此,主要的程序部分就設(shè)計完成了。完整程序請見附錄。最終系統(tǒng)設(shè)計完成的功能為:在上電后數(shù)碼管提示字符“P”,表示此時為初始狀態(tài),用戶可通過按鍵
19、或利用上位機向系統(tǒng)發(fā)送數(shù)據(jù)來選擇是否進入手動校準(zhǔn)模式;在手動手動校準(zhǔn)模式后會顯示字符“L”提示請輸入零點電壓,并想上位機發(fā)送提示信息;在按下按鍵或發(fā)送字符選擇確定后顯示“H”以提示請輸入基準(zhǔn)電壓并向上位機發(fā)送提示信息;然后按下確認(rèn)鍵或發(fā)送字符后如主程序,測量外部電壓并將電壓值發(fā)送至上位機。在等待按鍵期間按下取消鍵則可直接進入主循環(huán)。以下為程序仿真圖:圖14上位機通信界面四 個人總結(jié)經(jīng)過這次課程設(shè)計,我感覺收獲甚多。最為重要的是我認(rèn)識到了自己的不足。在剛開始準(zhǔn)備做實物的時候我就考慮到自己的單片機開發(fā)板硬件功能不強。一般板載的AD芯片無法滿足測量24V電壓,分辨為1mv的要求。當(dāng)我匆匆的趕到電子元
20、器件廣場,買回一大堆元器件之后,我就陷入了困境之中。自己的動手能是實在太弱了,面對以一堆元器件我無法將他們組成自己想要的電路。特別是還有一個SOICR-16封裝的AD7705,由于芯片很小,我無法將它焊在板子上。后來匆匆趕到電子市場,請別人幫我焊上去。我一直對自己對單片機的內(nèi)核和c語言的編程感到自豪的,但經(jīng)歷了這次課設(shè),我發(fā)現(xiàn)了很多問題。對于嵌入式系統(tǒng)來說,硬件和軟件是密不可分的。僅僅了解硬件或軟件都無法完成一個系統(tǒng)的設(shè)計。對于一個系統(tǒng)的設(shè)計最為重要的并不是你如何的精通一門知識,而是你如何將你所學(xué)會的知識應(yīng)用到實踐中。要有一份清晰的設(shè)計流程。在設(shè)計程序中不能妄想一次就將整個內(nèi)容設(shè)計好,反復(fù)修改
21、。不斷改進是程序設(shè)計的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應(yīng)該讓人能一看就能明白你的思路。通過這次課程設(shè)計,我懂得了學(xué)習(xí)的重要性,更加明白了理論知識與實踐相結(jié)合的重要意義,學(xué)會了堅持、耐心和努力,這將為自己今后的學(xué)習(xí)的工作做出來最好的榜樣。附錄1:完整程序清單/Mytypedef.h#ifndef _MYTYPEDEF_H_#define _MYTYPEDEF_H_#define uchar unsigned char#define uint unsigned int/*Data type definations*/typedef unsigned char
22、 INT8U;typedef signed char INT8S;typedef unsigned int INT16U;typedef signed int INT16S;typedef unsigned long INT32U;typedef signed long INT32S;#endif/_MYTYPEDEF_H_/main.c#include<reg51.h>#include "key.h"#include "ad.h"#include"time.h"#include"usart.h"#de
23、fine size 5char code *p1="date is clloceting,please wait for some scondn"char code *p2="please enter 0n"char code *p3="please enter 5n"char code *p4="the voltage is too larger!n"char code *p5="the voltage is too small!n"char code *p6="the date i
24、s:"INT8U key=0;INT16U v0,vr;float a0=0;float ar=0.0195;INT16U val50;INT16U checksize;INT16U val_rec;INT8U val_head=0,check_head;INT32U sum;INT16U val_ave;INT32U val_out;void Main(void)bit En=0;INT8U i,j=0;INT8U qian,bai,shi,ge;Time0_Init();usartinit();AD7705_Init(); /AD初始化display(0,0,1); /顯示開始s
25、end("this is a collect systerm!n"); /發(fā)送字符串 while(key=0&&COM!='Y'&&COM!='y'&&COM!='n'&&COM!='N')/檢測是否有按鍵按下或接受到字符 key=keyscan();/掃描按鍵 if(key=1|COM='y'|COM='Y')/按下確認(rèn)鍵 send(p2);/顯示“請輸入零電壓” display(1,7,1);keyinit;/按
26、鍵初始化COMINIT;/接受字符初始化while(key=0&&COM!='Y'&&COM!='y'&&COM!='n'&&COM!='N')key=keyscan();if(key=1|COM='y'|COM='Y')while(READY=1);/判斷數(shù)據(jù)是否可讀v0=read_date();/測試零點電壓校正零點誤差display(2,7,1);send(p3); /發(fā)送“輸入高電平”keyinit;COMINIT;while(
27、key=0&&COM!='Y'&&COM!='y'&&COM!='n'&&COM!='N')key=keyscan();if(key=1|COM='y'|COM='Y')while(READY=1);/測試基準(zhǔn)電壓vr=read_date();/校正基準(zhǔn)電壓ar=5.0/(vr-v0);/計算校正值a0=ar*v0;else ;/按下取消鍵else ; else ; send(p1);/發(fā)送“正在采集數(shù)據(jù)” for(i=0;i<s
28、ize;i+) /將最近的5個數(shù)據(jù)保存到check數(shù)組中while(READY=1);checki=read_date(); while(1) if(start) /掃描啟動信號 j+;if(j=100) /設(shè)置發(fā)送頻率j=0;En=1; while(READY=1);val_rec=read_date();start=0;checkcheck_head=val_rec; /將最新的數(shù)據(jù)輸入check數(shù)組check_head+; /修改check首地址if(check_head=size)check_head=0;for(i=0;i<size;i+) /中間值濾波for(j=i+1;j&
29、lt;size;j+)if(checki<checkj)checki=val_rec;checki=checkj;checkj=val_rec;valval_head=checksize/2; /將中間值存儲val_head+;if(val_head=50)val_head=0; val_ave=valval_head; /輸出平均值 val_out=(val_ave*ar+a0)*1000; if(val_out<2000) /判斷電壓是否超范圍 beep=!beep; /蜂鳴器響 if(En)/發(fā)送電壓超量程 send(p5); if(val_out>4000) beep
30、=!beep;if(En)send(p4); qian=val_out/1000; /分位顯示 bai=val_out%1000/100; shi=val_out%100/10; ge=val_out%10; display(qian,4,2);/顯示電壓 delay_ms(1); display(bai,5,0); delay_ms(1); display(shi,6,0); delay_ms(1); display(ge,7,0); delay_ms(1); if(En) /發(fā)送電壓值 En=0; send(p6);sendchar(qian+48);sendchar('.'
31、;);sendchar(bai+48);sendchar(shi+48);sendchar(ge+48);sendchar('V');sendchar('n'); /key.h#ifndef _key_h#define _key_h#include <reg51.h>#include "MyTypeDef.h"#define uchar unsigned char#define uint unsigned int#define keyinit key=0#define DATE P0#define BITE P2sbit KEY1
32、=P10;sbit KEY2=P11;sbit beep=P12;void delay_ms(unsigned char del); INT8U keyscan(void); void display(INT8U date,INT8U bite,INT8U mode);#endif/key.c#include"key.h"uchar code table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code table110=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87
33、,0xff,0xef;uchar code ch=0x73,0x38,0x76,0x80;/p l hvoid delay_ms(unsigned char del)unsigned int i,j;for(i=0; i<del; i+)for(j=0; j<182; j+) ;unsigned char keyscan(void)if(KEY1=0 | KEY2=0)delay_ms(10); /20毫秒軟件防抖if(KEY1 = 0) while(KEY1=0 ); /等待KEY1被釋放return 1;if(KEY2 = 0)while(KEY2=0 );return 2;r
34、eturn 0;void display(INT8U date,INT8U bite,INT8U mode)bite=bite<<2;/左移兩位BITE=BITE&0xE3;BITE=BITE|bite; /輸出位選信號if(mode=0)DATE=tabledate; /輸出字形if(mode=1)DATE=chdate;if(mode=2)DATE=table1date;/time.h#ifndef _time_h#define _time_h#include<reg51.h>#include"MyTypeDef.h"extern bit
35、 start;sbit pwm=P16;extern INT8U beat;void Time0_Init();#endif/time.c#include"time.h"INT8U beat=0;bit start;/*定時器0初始化,方式1,延時2ms*/void Time0_Init()TMOD = 0x01;TH0 = 0xF8;TL0 = 0xCC;IE = 0x82;TR0 = 1;void Time0_handdle() interrupt 1TH0 = 0xF8;TL0 = 0xCC;beat+;if(beat%10=2) pwm=0; /輸出低電平if(be
36、at%10=0) pwm=1; /輸出高電平if(beat=50) /開啟轉(zhuǎn)換開關(guān) start=1;beat=0;/usart.h#ifndef _usart_h#define _usart_h#define COMINIT COM='0'extern char COM; void send(char *p);void usartinit();void sendchar(char m);#endif/usart.c#include"usart.h"#include<reg51.h> char COM='0'/*串口初始化函數(shù),晶振
37、位11.0592M,波特率為9600*/void usartinit() TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; ES=1;/*發(fā)送字符串函數(shù)*/void send(char *p)char buf;buf=*p;while(buf!='0')SBUF=buf;while(!TI); /等待發(fā)送完成TI=0;buf=*(+p);/*發(fā)送單個字符函數(shù)*/void sendchar(char m)SBUF=m;while(!TI);/等待發(fā)送完成TI=0;void usart_handdle() interrupt 4if(RI=1)RI=0;COM=SBUF;if(TI=1)/ad.h#ifndef _AD_H#define _AD_Hsbit CLK=P13;sbit DATA=P14;sbit READY=P15;#define NOP()
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢棄資源綜合利用的水環(huán)境與水資源保護考核試卷
- 天然氣開采的社會責(zé)任與公眾參與考核試卷
- 體育用品廣告宣傳與體育保險考核試卷
- 木材的變形與干縮原因考核試卷
- 創(chuàng)業(yè)空間的投資與風(fēng)險管理考核試卷
- 智能醫(yī)療設(shè)備研發(fā)合作協(xié)議
- 軌道交通項目異議處理程序時效
- 邯鄲市健身器材市場租賃合同
- 水利信息化管理操作指南
- 能源開發(fā)挖機租賃合同協(xié)議
- 【課件】2024屆高三英語高考前指導(dǎo)最后一課(放松心情)課件
- 食管癌圍手術(shù)期護理教學(xué)查房
- 2024年河南投資集團有限公司招聘筆試沖刺題(帶答案解析)
- 2024年院感安全注射培訓(xùn)
- 中國電信未來五年信息化發(fā)展規(guī)劃方案出臺
- 15《真理誕生于一百個問號之后》課件
- 孩子分為四種:認(rèn)知型、模仿型、逆思型、開放型
- 小班故事《快樂的輪胎》課件
- 在線網(wǎng)課知慧《大涼山精準(zhǔn)脫貧(西昌學(xué)院)》單元測試考核答案
- 安全評價通則AQ8001-2007
- (2024年)反壟斷法及反不正當(dāng)競爭法課件
評論
0/150
提交評論