diy51單片機開發(fā)板用戶手冊_第1頁
diy51單片機開發(fā)板用戶手冊_第2頁
diy51單片機開發(fā)板用戶手冊_第3頁
diy51單片機開發(fā)板用戶手冊_第4頁
diy51單片機開發(fā)板用戶手冊_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

版本:DIY_51我們建議接32V以下電壓,雖然繼電器可以控制220V電壓。本產(chǎn)品可以通過USB供電,供電電流<500mA。外接電源時請注意電源極性和電壓參數(shù)。輸出電壓應(yīng)為5V。插單片機和溫度DS18B20 群

很高興跨入單片機學(xué)習(xí)的大門。為什么要寫這段話,是因為我們想把把 圍設(shè)備類辦公設(shè)備智能儀器儀表。智能安全防護產(chǎn)品、計量類產(chǎn)品、休學(xué)好單片機是學(xué)習(xí)其他嵌入式控制器如armdsp的基礎(chǔ),任何嵌入式控制器都 串行通訊控制器,I2C總線控制器,片內(nèi)外 控制器,匯編語言,c語言,操作系統(tǒng)的概念。因此可以說學(xué)好單片機,再去學(xué)習(xí)其他嵌入式控制器如arm、dsp是比較簡單的。因此我們建議初學(xué)嵌入式控制器的朋友,一定要從單片機學(xué)所有人都站在了同一起跑線上實踐動手之后,你會發(fā)現(xiàn)原本上枯燥的知識不在枯燥,而且成為了你在運用DSP、ARM。路漫漫其修遠兮,希望大家一步步堅定的學(xué)習(xí)下去。 第1章DIY51單片機開發(fā)板系統(tǒng)介 第2章51單片機學(xué)習(xí)基礎(chǔ)(理論篇 第3章開發(fā)板例程詳 中 按 溫度傳感器 miniLCD12864實 第4章結(jié) 第1章DIY51DIY51但不簡單,PCB采用級板材,藍色油墨,白色絲印,注釋清晰明了,所有物料除兩顆IC開發(fā)板整體集成度相對高,擁有4*4矩陣按鍵、4個獨立按鍵、一個4位數(shù)碼管、LCD1602/LCD12864顯示屏接口、彩色流水燈、紅外發(fā)射、紅外接收、ISP 控制、蜂鳴器、直流電機、步進電機驅(qū)動、DS18B20溫度控制等功能,所有I/O口全部引 USB轉(zhuǎn)串口USB電源接口USB電源接口20第2章51單片機學(xué)習(xí)基礎(chǔ)(理論篇將CPU、器、I/O接口和簡單的I/O設(shè)備(小鍵盤、LED顯示器)MCS-51系列單片機:集成8CPU、4KROM、128字節(jié)RAM、48121664K,并有控制功能

電源VCC(PIN40)和地線RESET(PIN9);(10uFVCCRESET,即可實現(xiàn)上電復(fù)位和12P3第二功能各引腳功能定義:P3.0:RXD串行口輸入P3.1:TXD串行口輸出P3.2:INT0外部中斷0輸入P3.3:INT1外部中斷1輸入P3.4:T0定時器0外部輸入P3.5:T1定1P3.6:WR部寫控制P3.7:RD外部讀控8I/OP0、P1、P2和 部總線有三種:數(shù)據(jù)總線DB(Data Bus),地址總線AB(Address STM32F103ZE√√√843本開發(fā)板上定義單片機為TTL電平:高 低0-15、、、、、、、、、、A、B如:0001B11001B->9->1010B->10->00101100->44-> 10,0000,011,101,11功能。目前,使用C語言進行程序設(shè)計已經(jīng)成為軟件開發(fā)的一個主流。用C語言開發(fā)系統(tǒng)C語言日趨成熟,成為了專業(yè)化的實用高級語言。CC如:各種單片機、DSP、ARM等。sfr16:sfr16例:sfrSCON0X98;sfr16T2=0xCC;sbitOV=C-51數(shù)據(jù)的 unsignedcharvextor[10]; 通常有:reg51.hreg52.h 常用有:reg51.h (加減乘除 小 邏輯非 & ^ x|=0x0f;表示為xx|TMODTMOD&0xf0|0x05;表示給變量TMOD0x5,而不改變TMOD的高四位。#include<reg52.h> sbitP1_3=P1^3;//定義P1^3voidmain(void) {P1_3=1; While(1); //死循環(huán),相當(dāng)LOOP:gotoLOOP;}#include<reg52.h> sbitP2_7=P2^7;//定義P2^7voidmain(void //void{P2_7=0; While(1); //死循環(huán),相當(dāng)LOOP:gotoLOOP;} #include<reg52.h> sbitP3_1=P3^1;//定義P3^1voidmainvoid {While1 {P3_1=1; P3_1=0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND }將某引腳的輸入電平取反后,從另一個引腳輸出:(比如P0.4NOTP1.1))#include<reg52.h>//該頭文檔中有單片機內(nèi)部資源的符號化定義,其中包含P0.4和P1.1sbitP1_1=P1^1;//定義P1^1sbitP0_4P0^4;//voidmainvoid {P1_1 While1 {if(P1_1==1 P0_4=0; //否則P1.1輸入為低電平GND P0_4 P0_4 }如P2=NOT(P3))#include<reg52.h> voidmain(void) //void表示沒有輸入?yún)?shù),也沒有函數(shù)返值{P30xff;//初始化。P3P38While1 P2=P3^0x0f//P3,就是認為P3為輸入,低四位異或者1,即取反,然后輸 }則P3.7、P3.6、P3.5、P3.4四個引腳都輸出低電平,而P3.3、P3.2、P3.1、P3.0四個引腳都輸出高電平。同樣,輸入一個端口P2,即是將P2.7、P2.6至P2.0,讀入到一個字節(jié)的8位D7、D6至D0。驅(qū)動,才能使單片機與pc之間完成通訊。DIY51USB轉(zhuǎn)串口電路,使用到的轉(zhuǎn)換是CH340(對應(yīng)的電腦驅(qū)動必須安裝)。2.4.22.4.2.CH340插上數(shù)據(jù)線到電腦USBCOM口。點擊“設(shè)備管理器”然后插上USB轉(zhuǎn)串口線,會看到端口中多了一個“USB-SERIAL點擊“設(shè)備管理器”然后插上USB轉(zhuǎn)串口線,會看到端口中多了一個“USB-SERIAL不同的電腦不同的USB接口可能會分配不同的COM口。雙擊1.使用說明\1.驅(qū)動安裝下的軟件stc-isp-15xx-v6.85.exe,首次啟動只需COM3注意:1使用STC89C52RC,建議使用較低版本的 選擇好后,要先把實驗板上的電源關(guān)掉,因為STC的單片機內(nèi)有引導(dǎo)碼,在上電的時候會與計算機自動通訊,檢測是否要執(zhí)行命令,所以要等點完命令后再給單片機上電。然后點擊如下圖的“/編程”按鍵,開始程序,成功后如下圖所示:注意:若按步驟操作出現(xiàn)按下開發(fā)板電源按鈕后程序無反應(yīng),則先點擊“停止”按我們用現(xiàn)在新版本的uVision5KEIL開發(fā)環(huán)境,使用的版本是 keil軟件原廠技術(shù)支持。即將安裝軟件如下,一個keil安裝程序,一 機(右側(cè)打開c51v954.exe點擊Next點擊NextIagreeallthetems Next點擊輸入相關(guān)信息(隨便輸入), 安裝完成,點擊安裝完成,點擊Finish說明\keil軟件及程序打開剛剛安裝好的keil軟件,點擊File菜單 CID碼 機CID碼到CID,之后點擊Generate生成 框中,然后點擊右側(cè)“AddLIC”,即可完成 先新建一個文件夾,以方便工程的管理。點擊Project,然后選擇 。CPUSTCSourceGroup1AddExistingFilesToGroupSourceGroup1",然后選擇需要添加的C語言的源文件。后點擊OK退出。STC-ISPSTC-ISP第3上圖為本開發(fā)板的流水燈部分硬件電路圖。Led的陽極統(tǒng)一接到VCC,陰極通過限流電阻接到接口CN5上。IOled1對應(yīng)的單片即IODB1,即為單片機的P1^0口。對于如何輸出低電平,面一章中有提到過。即#includereg52.h>P1.0sbitP1_0=P1^0;voidmain(void {P1_0= P1^00,引腳P1.0While1 P1^0}在程序中讓ledIOLED后我們就可以隨心所欲控制我們板子上的其他任意led。名稱:功能:延時,延時時間為1ms*del輸入:輸出:無voidDelay(unsignedintdel){Unsigned for(j=0;j<114; }當(dāng)我們給Unsigned del賦值1時,這個程序?qū)崿F(xiàn)的功能就是延時10ms→LED7→LED8P1功能為循環(huán)移動。實驗程序為使用crol()函數(shù)。用法如下: 0001下面是簡單的介紹下intrins.h這個C51的內(nèi)部函數(shù):_crol__cror__irol__iror__lrol__lror__nop_空操作8051NOP指令_testbit_測試并位8051JBC指 原型: unsignedchar_crol_(unsignedcharval,unsignedcharn);unsignedint_irol_(unsignedintval,unsignedcharn);unsignedint_lrol_(unsignedintval,unsignedchar功能:_crol_,_irol_,_lrol_以位形式將val左移n8051“RLA” 原型: unsignedchar_cror_(unsignedcharval,unsignedcharn);unsignedint_iror_(unsignedintval,unsignedcharn);unsignedint_lror_(unsignedintval,unsignedcharn);功能:_cror_,_iror__lror_以位形式將val右移n8051“RRA”LED8LED連接方式:CN5CN15,pin,L1L8P10 意:本例實現(xiàn)通過crol()實現(xiàn),大家也可以嘗試用cror()函數(shù)來實ms 入 出:voidDelayms(unsignedintms){unsignedinti,j;#ifFOSC #elifFOSC #elifFOSC } 入: 出:voidmain(){{}80510(T01(T12個16位定時器實際上都是16位加1T0由2個8TH0和TL0T1由TH1和TL1存器TMOD設(shè)置和TCON所控制。每個機器周期使定時器(T0T11工作模式寄存器,低M1M0:工作方式選擇位,定時器/計數(shù)器的4種工作方式由M1M0設(shè)定。 控制寄存器TF111TF11”中斷。進入中斷服務(wù)程序后,由硬件自動清“0”,在查詢方式下用軟件清“0”平時,TR1置“1”啟動定時器1;當(dāng)GATE=0,TR1置“1”啟動定時器1。TF0:定時器0溢出標(biāo)志。其功能及操作情況同TF1IE1:11、確定工作方式(即對TMOD)2、預(yù)置定時或計數(shù)的初值(TH0、TL0或TH1、TL1)3、根據(jù)需要開放定時器/計數(shù)器的中斷(IE)4、啟動定時器/計數(shù)器(若已規(guī)定用軟件啟動,則可把TR0或TR1置“1”;若已在定時器模式下:計數(shù)器由單片機主脈沖經(jīng)12分頻后計數(shù)。因此,定時器定時時間T的計算 TCMT/T方式2和方式3:M=256;T計數(shù)是單片機時鐘周期的12倍;TC為定時器的定時初值,TTTC65536T/T計數(shù)=65536-TH0=TC TL0=TC256;8實驗名:定時器實驗連接方式:CN5CN15,pin,L1L8P10 意:本例程使用了中斷,中斷介紹會在下一實驗中說#defineTIME_MS10ms11.0592M 入: 出:voidTimer0Init(){TMOD=0x01;//01 EA=1;//打開總中斷} 入: 出:voidTimer0Int()interrupt1{LEDLED;//LEDcountLEDLED;//LEDcount={}}中斷的概念:CPU在處理某一A時,發(fā)生了另一B請求CPU迅速去處理(中斷發(fā)生);待CPU B處理完畢后,再回到原 A被中斷的地方繼續(xù)處A(中斷返回),這一過程稱為中斷。引起CPU中斷的根源,稱為中斷源。中斷源向CPU 中斷請求。CPU暫時中斷原來的事務(wù)A,轉(zhuǎn)去處理B。對B處理完畢后,再回到原來被中斷的地方(即IT0=0IE1(TCON.3),外部中斷1中斷請求標(biāo)志位。(TCON.5),定時/計數(shù)器T0溢出中斷請求標(biāo)志位。SCON中斷標(biāo)志寄存器:RI(SCON.0)RI。同樣,RITI(SCON.1),串行口發(fā)送中斷標(biāo)志位。當(dāng)CPU將一個發(fā)送數(shù)據(jù)寫入串行口發(fā)送緩沖器時,就啟動了發(fā)送過程。每發(fā)送完一個串行幀,由硬件置位TI。CPU響應(yīng)中斷時,不能自動清除TI,TI必須由軟件清除。EX0(IE.0),外部中斷0允許位;EX1(IE.2),外部中斷0允許位;EAIE.7CPU(總允許)位。PX0(IP.0),0(IP.2),外部中斷0優(yōu)先級設(shè)定位;PT1(IP.3),定時/計數(shù)器T1優(yōu)先級設(shè)定位;PS(IP.4),串行口優(yōu)先級由中斷優(yōu)先級寄存器IP和IPH中的相應(yīng)位的狀態(tài)來規(guī)定的。PX0(IPH.0),外部中斷0優(yōu)先級設(shè)定位;(IPH.2),外部中斷0優(yōu)先級設(shè)定位; void 實驗名:外部中斷實驗連接方式:CN5CN15pinCN101P3^2 入: 出:voidExit0Init(){EX01;INT1IT01;EA1;//}0 入: 出:voidExit0Int()interrupt0{EX0 if(key==0) {LED=} EX0 }管的段選部分直接接到CN3,這樣可以通過CN3接到單片機的任意一個P口。LED上面每個LED相當(dāng)于數(shù)碼管的段。hgfedcba011000000111111001210100100310110000410011001510010010610000010711111000810000000910010000A10001000B10000011C11000110D10100001E10000110F10001110若要顯示某個數(shù)字,只需要將對應(yīng)的編碼值賦給8位端口就好了,一般會把編碼值存 code或者#define去定義,讓這些固定值存到ROM中去,因為單片機的RAM比 ROM小的616連接方式:CN3CN16,A接P00,BP01,CP02,DP03,EP04,F(xiàn)接P05,G接P06,DP接P07,CN1接CN17,PUT1接P24,PUT2接P25,PUT3接P26,PUT4接P27unsignedcode 入: 出:voidmain(){wela_1=0; wela_2=0;wela_3=wela_4={{LED_PORT=table[num];//數(shù)組是按共陽的方式取的}}}數(shù)碼管模塊采用了四路PNPPUT1到PUT4,分別對應(yīng)四個數(shù)碼管,當(dāng)PUT引腳輸出低電平時,三極管導(dǎo)通,這樣數(shù)碼管對應(yīng)的K端就為高電對應(yīng)的數(shù)碼管關(guān)閉,無論CN3輸入什么,該數(shù)碼管都不會點亮。CN3接口驅(qū)動。在一個顯示周期內(nèi),分別點亮各個數(shù)碼管并延時一小段時間,這樣在總體CN3CN16,A接P00,BP01,CP02,D接P03,EP04,F(xiàn)P05,G接P06,DPP07,CN1CN17,PUT1接P24,PUT2P25,PUT3P26,PUT4接P27注意:數(shù)碼管為共陽數(shù)碼管,也就是說接口低有效,而公共端經(jīng)過PNP三極管,所以位選接口低有效該函數(shù)是在主函數(shù)中不斷循環(huán)執(zhí)行的,每一個數(shù)碼管給1ms的顯示時間,在這1ms內(nèi)其實只有一個數(shù)碼管被點亮,其他數(shù)碼管是熄滅的,但是由于掃描速度很//LED0-Funsignedcode函數(shù)名:LEDdis 入:num需要顯示的數(shù) 出:voidLEDdisy(unsignedintnum){unsignedcharqian,bai,shi,ge;wela_1=1; wela_2=1;wela_3=wela_4=wela_4=0;//顯示千位LED_PORT=wela_3=0顯示百位LED_PORT=wela_2=0顯示十位LED_PORT=wela_1=0;顯示個位LED_PORT=0xff;} 入: 出:voidTimer0Init(){TMOD=0x01;//01 EA=1;//打開總中斷} 入: 出:voidmain(){count=0;temp=0;{{{}}}} 入: 出:voidTimer0Int()interrupt1{}異步通信是以字符(構(gòu)成的幀)為單位進行傳輸,字符與字符之間的間隙(時間間異步通信的數(shù)據(jù)格式:字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。1(1或0)。奇校驗時,數(shù)據(jù)中“1” 算實現(xiàn)有效信息與校驗位之間的循環(huán)校驗,常用于對磁盤 240個字符,而每個字符格式包含10位(1個起始位、1個停止位、8個數(shù)據(jù)位),這時 =240080C51有兩個物理上獨立的接收、發(fā)送緩沖器SBUF有兩個物理上獨立的接收、發(fā)送緩沖器SBUF99H緩沖結(jié)構(gòu);發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會產(chǎn) 錯誤行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請。RI,接收中斷標(biāo)志位。在方式0時,當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請。SM2,多機通信控制位,主要用于方式2和方式3。當(dāng)?shù)腟M2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時,不論收到的RB801SBUFRI(RB8RI活的功能)。通過控制SM2,可以實現(xiàn)多機通信。在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1。1中,該位未用。幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時,若SM2=0,則RB8是接收到的停止位。SMOD(PCON.7)123SMODSMOD=1SMOD=0我們這里只簡單的介紹下方式一。其他方式請自行查看資料。方式1是10位數(shù)據(jù)的其中1位起始位,8位數(shù)據(jù)位,1位停止位。寫入寫入RI(中斷標(biāo)志用軟件置REN為1時,以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負跳變時,則說明起始位有效,將其移入輸入移位寄存器,至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當(dāng)RI=0,且SM2=0(或接收1)98位數(shù)據(jù)裝入接收SBUF,9(停止位)進入RB8,并置RI=1,向CPU請求中斷。波特率=(2SMOD/32)·(T1當(dāng)T1T18器方式(即方式2,且TCON的TR1=1,以啟動定時器)。這時溢出率取決于TH1中的T1溢出 =fosc/{12×[256在單片機的應(yīng)用中,常用的晶振頻率為:12MHz11.0592MHz。所以,選用的波3.6.2.3.6.2.T1的初值,裝載TH1、T1(TCONTR1)確定串行口控制(SCON)串口相連);波特率:9600;校驗位:無;數(shù)據(jù)位:81使用其他串口調(diào)試助手,程序前必須先斷開其他串口調(diào)試助手,否則會出現(xiàn)串口占用下3.6.3.3.6.3.實驗名:串口實驗連接方式: 意:串口COM口的選擇與 入: 出:voidUsartConfiguration(){SCON0X50;//設(shè)置為工作方式110位異步收發(fā)器TMOD|0x2028位自動重裝計數(shù)器PCON=0X80;//波特率加倍SMOD=1TH1256FOSC/12/32/(BAUD/2計算溢出率TL1=256-(FOSC/12/32/(BAUD/2));TR11;打開定時器EA1;//} 入: 出:voidUsartInt()interrupt4{unsignedcharreceiveData;if(RI==1){receiveData=SBUF;//出去接收到的數(shù)據(jù)RI= }}一般情況下,一個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之后就基本上進入了穩(wěn)定的狀態(tài)。具體的一個按鍵從按下到釋放的全過程的信號圖如下圖5ms我們在程序設(shè)計時,從按鍵被識別按下之后,延時5ms以上,從而避開了干擾為低電平,若這時檢測到的是高電平,證明剛才是由于干擾信號引起的誤觸發(fā),CPU就認實驗名:單鍵識別實驗實驗平臺:航太51單片機開發(fā)板V1.1連接方式:CN5CN15pinCN101P3^2 入: 出:voidKeyScan(){if(key==0)//{ { //按鍵計數(shù)加1{ }}}}際應(yīng)用中經(jīng)常要用到輸入數(shù)字、字母等功能,如電子鎖、機鍵盤等一般都至少有12到16I/O矩陣鍵盤又稱行列鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成的行列式鍵盤結(jié)構(gòu)能有效地提高單片機系統(tǒng)中I/O口的利用率。116P164*4KEY1-KEY8分別用跳線帽接向P30-P37,當(dāng)無按鍵閉合時,P30~P33與鍵按下的方法是:第一步,置行線的某一條線為低電平,如先置P3.0為低電平,其他IO口P3.1到P3.7為高電平;第二步,列線P3.4到P3.7的值,如果有鍵按下,則可以讀到某一個IOP3.4P3.0以判斷S1鍵被按下;第三步,延時消抖,一次按下被多次;第四步,依次置P3.0口低四位的其他IO口為低電平,重復(fù)第一步到第三步,實現(xiàn)對整個鍵盤的掃描。根據(jù)電路原理圖,鍵盤掃描方法是:行線P30~P33為輸出線,列線P34~P37為輸據(jù)輸出線的置0的那一行和輸入線到0的那一行可以得到具體的按鍵值實驗名:矩陣按鍵實驗實驗平臺:航太51單片機開發(fā)板V1.1連接方式:CN6CN14,KEY1到KEY8P30到P37;CN3CN16,A接CN17,PUT1接P24,PUT2接P25,PUT3接P26,PUT4接P27 意:平方按鍵對應(yīng)的是P3口 入: 出:num獲取的鍵值,若沒有鍵值則返回unsignedcharKeyScan(){unsignedchartemp,num;num=0xff;{{{}{}}}{{{}{}}}{{{}{}}}{{{}{}}}return} 外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。多諧振蕩器由晶體管或集成電路構(gòu)成。當(dāng)接通電源后(1.5-15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片 。壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材電磁式蜂鳴器電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。電磁線圈和磁鐵的相互作用下,周期性地振動。要產(chǎn)生音頻脈沖,只要算出某一音頻的脈沖(1/頻率),然后將此周期除以2,即為半周期的時間,利用定時器計時這個半周期的時間,每當(dāng)計時到后就將輸出脈沖的I/OI/OI/O利用8051的內(nèi)部定時器使其工作在計數(shù)器模式MODE1下,改變計數(shù)值TH0TL0523Hz,其周期天/523S=1912uS設(shè) DO(1046Hz) 低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580DO的T=65536-500000/1047=6505910.41/40.1節(jié)拍的時間。假設(shè)1/4節(jié)拍為1DELAY,則1拍應(yīng)為4DELAY,以此類推。所以只要求得1/4DELAY1/41/81/4節(jié)拍 1/8節(jié)拍節(jié)拍碼節(jié)拍數(shù)節(jié)拍碼節(jié)拍數(shù) 1/4 1/8 2/4 1/4 3/4 3/8 1 1/2 1又1/4 5/8 1又1/2 3/4 1又3/4 7/8 2 1 2又1/4 1又1/8 2又1/2 1又1/4 2又3/4 1又3/83 1又1/23又1/4 1又5/83又1/2 1又3/43又3/4 1又7/8 1/8節(jié) 4/41254/4623/41873/4942/42502/4125T值表建立在TABLE1,構(gòu)成發(fā)音符的計數(shù)值放在“TABLE” T 低 1/4 低 2/47333/4144125511/436612/447713/4588269921/47AA22/41BB23/42CC33DD31/44EE32/4 高 3又3/4 實驗名:蜂鳴器實驗連接方式:CN16CN7BEEP1 意unsignedcharcodeSONG us 入: 出:voidDelayus(unsignedintus){unsignedintfor(i=0;i<us;i++{for(j=0;j<3;j++}} 入: 出:voidTime0Init(){TMOD0x01;//工作模式選擇IE=0x82;//中斷設(shè)置TH0=T10MS>>8; TL0=T10MS;}count10ms 入: 出:voidTime0Int()interrupt1//0中斷子函數(shù){TH0=T10MS>>8; TL0=T10MS; }函數(shù)名 入: 出:voidySong(unsignedchari){unsignedcharunsignedintcount Addr=i*217;{Temp1=SONG[Addr++];//頻ifTemp10xFF {TR0=}elseifTemp10x00 {}{

Temp2=SONG[Addr++];//一個音的時TR0={speak_IO=~speak_IO;ifTemp2count{count=0;}}}}} 入: 出:voidmain(){ { }}ULN是集成管IC,內(nèi)部還集成了一個消線圈反電動勢的二極管,可用來驅(qū)動電16腳,NPN50V500MA5V,適用于TTL,COMS,由管組成驅(qū)動電路。它的輸出端允許通過電流為200MA,飽和壓降CVE為1V左右,耐壓BVCEO約為36V,用戶輸出口的外接負載可根據(jù)以上參數(shù)低壓電燈泡,通常單片機驅(qū)動ULN2003時,上拉2K的電阻較為合適,同時,COM引腳應(yīng)該懸空或接電源。ULN2003是一個非門電路,包含7個單元,單獨每個單元驅(qū)動電流最大可達350MA,資料的最后有電路,9腳可以懸空。被控制系統(tǒng)(又稱輸出回路),通常應(yīng)用于自動控制電路中,它實際上是用較小的電流去控制較大電流的一種“自動開關(guān)”。故在電路中起著自動調(diào)節(jié)、安全保護、轉(zhuǎn)換電路等作用。電磁繼電器的工作原理和特性電磁式繼電器一般由鐵芯、線圈、銜鐵、觸點等組成的。只要圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而產(chǎn)生電磁效應(yīng),銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸區(qū)分:繼電器線圈未通電時處于斷開狀態(tài)的靜觸點,稱為“常開觸點”;處于接通狀態(tài)的

實驗名:繼電器實驗連接方式:CN16CN7JD1_drive 意:1.做該實驗時,請務(wù)必弄清繼電器原理及該如何連接2.繼電器吸合時會有較大的電流,可能會影響開機時的程序 sbitRELAY= 入: 出:voidmain(){{RELAY0常開觸點斷開,常閉觸點閉合RELAY1常開觸點閉合,常閉觸點斷開}}直流電機內(nèi)部阻值很小,電機只有10USBULN2003驅(qū)動來驅(qū)動的。UIRφ為每極磁通量,K直流電機轉(zhuǎn)速控制可分為勵磁控與電樞電壓控。勵磁控用得很少,大多數(shù)應(yīng)用場合都使用電樞電壓控。隨著電力電子技術(shù)的進步,改變電樞電壓可通過多種途徑實現(xiàn),其中脈沖寬度調(diào)制()便是常用的改變電樞電壓的一種調(diào)速方法。其方法是通過51單片機來輸出信號來控制直流電機的轉(zhuǎn)速,單擊按鍵s17加速,單擊按鍵s20,定時周期不變,改動的是占空比。實驗名 s18s21連接方式:CN16接CN7MOT5接P04CN10UP接P34Left接P35Right接P36Down接 不需要分正負 入: 出:voidTimer0Init(){TMOD=0x01;//設(shè)置定時器0工作方式為1 EA=1;//打開總中斷} 入: 出:voidTimer0Int()interrupt1{ if(timer1>100)// {}if(timer1 {}{}}

LED=LED=1、步進電機必須加驅(qū)動才可以運轉(zhuǎn),驅(qū)動信號必須為脈沖信號,沒有脈沖的時候,(稱為步角)轉(zhuǎn)動。轉(zhuǎn)動的2、24BYJ485V驅(qū)動的4相5線的步進電機,而且是步進電機,比為64,步進角為5.625/64度。如果需要轉(zhuǎn)動1圈,那么需要360/5.625*64=4096個脈沖 線序:紅線是公共端,然后依次是ABCD4步進角度:5.625x一定的順序?qū)刂凭€,即可實現(xiàn)電機轉(zhuǎn)動。工作方式采用單雙八拍的方式:123456781紅++++++++2橙———3———4粉———5藍———實驗名:步進電機試驗 紅線接 意:1、本程序用于測試四相五線步進電機常規(guī)驅(qū) 入: 出:voidSetMotor(){{{caseWX1=0; WX2=1;WX3=WX4=MotorStep=1;caseWX1=0; WX2=0;WX3=WX4=MotorStep=2;case WX1=WX2=WX3=WX4=MotorStep=3;case WX1=WX2=WX3=WX4=MotorStep=4;case WX1=WX2=WX3=WX4=MotorStep=5;case WX1=WX2=WX3=WX4=MotorStep=6;case WX1=WX2=WX3=WX4=MotorStep=7;case WX1=WX2=WX3=WX4=MotorStep=0;}}}溫度傳感器DS18B20是DALLAS公司生產(chǎn)的單總線式數(shù)字溫度傳感器,它具有微型化、低功耗、溫度轉(zhuǎn)化成串行數(shù)字信號(提供9位二進制數(shù)字)給單片機處理,且在同一總線上可以掛接多個傳感器。它具有3引腳TO-92小體積封裝形式,溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D0.0625℃,被測溫度用符號擴展的16位數(shù)字量方式串行輸出,其工作電源既可在遠端引入,也可采用寄生電源方式產(chǎn)生,多個DS18B20可以并聯(lián)到3根或2根線上,CPU只需一根端口線就能與多個DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使DS18B20非常適于遠距離多點溫度檢測系統(tǒng)。TO-92和SO-8PDFTO-921DS18B20內(nèi)部的比較器以四舍五入的量化方式確定溫度寄存器的最低有效位。在計數(shù)器2停止計數(shù)后,比較器將計數(shù)器1中的計數(shù)剩余值轉(zhuǎn)換為溫度值后與0.25℃進行比較,時,溫度寄存器的最低位就進位然后置0。這樣,經(jīng)過比較后所得的溫度寄存器的值就是最終的溫度值了,其最后位代表0.5℃,四舍五入最大量化誤差為±1/2LSB,即0.25℃。溫度寄存器中的溫度值以9位數(shù)據(jù)格式表示,最 為符號位,其余8位以二進制補碼形式表示溫度值。測溫結(jié)束時,這9位數(shù)據(jù)轉(zhuǎn)存到暫存 第一字節(jié),8位溫度數(shù)據(jù)占據(jù)第二字節(jié)。DS18B20測量溫度時使用特有的溫度測量技術(shù)。DS18B20內(nèi)部的低溫度系數(shù)振蕩器能產(chǎn)生穩(wěn)定的頻率信號;同樣的,高溫度系數(shù)振蕩器則將被測溫度轉(zhuǎn)換成頻率信號。當(dāng)計數(shù)門打開時,DS18B20進行計數(shù),計數(shù)門開通時間由高 存入溫度寄存器中。一般情況下的溫度值應(yīng)該為9位,但因符號位擴展成高8位,所以最DS18B20工作過程一般遵循以下協(xié)議:初始化——ROM操作命令—— ①初始化接著由從屬器件送出存在脈沖。存在脈沖讓總線控制器知道DS1820在總線上且已準備好 ROM操作命令ROM8ReadROM(讀DS18B208488位的CRC。此命令只能在總線上僅有一個DS18B20的情況下可以使用。如果總線上存在多于一個的從屬器件,那么當(dāng)所有從片企圖同時發(fā)送時將發(fā)生數(shù)據(jù)的現(xiàn)象(漏極開路MatchROM(符合此命令后繼以64位的ROM數(shù)據(jù)序列,允許總線主機對多點總線上特定的DS18B20尋址。只有與64ROM序列嚴格相符的DS18B20才能對后繼的存貯器操作命令作出響64ROMSkipROM(跳過ROM在單點總線系統(tǒng)中,此命令通過允許總線主機不提供64位ROM編碼而器操作來節(jié)省時間。如果在總線上存在多于一個的從屬器件而且在SkipROM命令之后發(fā)出讀SearchROM(搜索當(dāng)系統(tǒng)開始工作時,總線主機可能不知道單線總線上的器件個數(shù)或者不知道其64上電,告警條件就保持在設(shè)置狀態(tài),直到另一次溫度測量顯示出非告警值或者改變TH或TL的設(shè)置,使得測量值再一次位于允許的范圍之內(nèi)。 在EEPROM內(nèi)的觸發(fā)器值用于告DS18B202。接下來寫入的兩個字節(jié)將被存到暫存器中的地址位置2和3??梢栽谌魏螘r刻發(fā)出復(fù)位命令來中止寫入。CopyScratchpad(暫存器這條命令把暫存器的內(nèi)容拷貝到DS18B20的E2器里,即把溫度觸發(fā)字節(jié)存入非易失性器里。如果總線控制器在這條命令之后跟著發(fā)出讀時間隙,而DS18B20又正在忙于把暫存器拷貝到E2器,DS18B20就會輸出一個“0”,如果拷貝結(jié)束的話,DS18B20則輸出“1”。如果使用寄生電源,總線控制器必須在這條命令發(fā)出后立即起動強上拉并最少保持10ms。ConvertT(溫度變換寄生電源,總線控制器必須在發(fā)出這條命令后立即起動強上拉,并保持500ms。RecallE2(重新調(diào)整這條命令把在E2中溫度觸發(fā)器的值重新調(diào)至?xí)捍嫫?。這種重新調(diào)出的操作在對DS18B20上電時也自動發(fā)生,因此只要器件一上電,暫存器內(nèi)就有了有效的數(shù)據(jù)?!?”=忙,“1”=準備就緒。源方式的信號:“0”=寄生電源供電,“1”DS18B20的高速暫存器由9個字節(jié)組成,其分配如圖3所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)單片機可通過單線接口讀到該數(shù)據(jù),時低位,在后。DS18B20溫度轉(zhuǎn)化后得到的12位數(shù)據(jù),在DS18B208的RAM5050,0.0625051,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。位取反加1得370H(符號位不變,也計算),則:與DS18B20的雙向通訊。單總線具有經(jīng)濟性好,能力強,適合于惡劣環(huán)境的現(xiàn)場的480微秒時間內(nèi)對總線進行檢測,如果有低電平出現(xiàn)說明總線上有器件已做出應(yīng)答。若做為從器件的DS18B20480-96015-6060-240總線恢復(fù)。而DS18B201515us45us對總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。若是要送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。主1115高電平則確認為1。完成一個讀時序過程,至少需要60微秒才能完成實驗名:DS18B20溫度實驗DS18B20插到數(shù)字溫度檢測模塊的U5DS_RDP22;CN3CN16,A接P00,BP01,CP02,D接P03,EP04,F(xiàn)接P05,GP06,DP接P07;CN1CN17,PUT1接P24,PUT2P25,PUT3接P26,PUT4接 意 voidDelay(unsignedint{while(--num} bitInit_DS18B20(void){bitDQ DQ //DQ=1; presence DQ=1;return(presence返回信號,0=presence,1no} /*讀一個字 unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--{DQ0;dat>>=DQ1;dat|=0x80;}return} /*寫一個字 voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=DQ=dat&0x01;DQ=}} /*溫度值寫入 voidWrite_Temperature_alarm(unsignedcharTemp_h,unsignedchar{ WriteOneChar(Temp_h);//THWriteOneChar(Temp_l);// } voidRead_RomCord(void){unsignedcharj; for(j=0;j<8;{RomCode[j]=ReadOneChar()}} unsignedcharCRC8(){unsignedchari,x;unsignedcharcrcbuff,crc;for(x=0;x<8;{for(i=0;i<8;i++){if(((crc^crcbuff)&0x01)==0)crc>>=1;elsecrc^= crc>>=1;crc|=0x80;}crcbuff>>=}}return} /*溫度,返回帶符號的溫度 intRead_TemperatureInt(void){unsignedchari; unsignedchartemp_data[2];unsignedchartemp_alarm[2]; for(i=0;i<8;i++) temp_data[0]ReadOneChar();//8temp_data[1ReadOneChar();//8位temp_alarm[0]ReadOneChar();//溫度THtemp_alarm[1]ReadOneChar();//溫度p=temp_data[1];p<<=8;p|= }760nm400um外是我們?nèi)粘TO(shè)備控制9msAGC(自動增益控制)的高脈沖,接著發(fā)送4.5ms的起始低電平,接下來是發(fā)送節(jié)的地址碼和命令碼,這節(jié)分110ms高電平和4.5ms的低電平及一個560us的高電平組成。9ms實驗名 鍵 連接方式:CN18的HW_RDCN14P32;CN3CN16,A接P00,BP01,CP02,DP03,EP04,F(xiàn)P05,GP06,DPP07;CN1CN17,PUT1接P24,PUT2接P25,PUT3接P26,PUT4接P27 意:一般的電 函數(shù)名:0 入: 出:voidExit0Int()interrupt0{unsignedcharEX0={EX0}while for {for 8{while //等IR4.5mswhile //等IR變?yōu)楦唠娖絯hile {if{}[j] if(N>=8)[j] [j]|0x80;}//數(shù)據(jù)最補}//endfor}//endforif {return; EX0=}NEC單片機可以通過IO口的高低電平變化來模擬NEC協(xié)議,另外在發(fā)送高電平時需要添加38k的載波,我們通過定時器1來實現(xiàn)。載波,接收端經(jīng)過反相后接收到低電平,關(guān)斷TR1時,發(fā)送端不發(fā)送載波,接收端經(jīng)反相實驗名:紅 發(fā)實驗說明:燒錄成功后,將單片機的紅外發(fā)射口對著另外一個運行鍵值實驗程序的單片機,按下相應(yīng)的矩陣鍵盤按鍵即可實現(xiàn)鍵值發(fā)送連接方式:CN19的HW_DRI接CN15的P16;CN6接CN14,KEY1到KEY8分別對應(yīng)P30到P37;CN5接CN16,按pin編號從小到大連接,L1到L8分別接P00到P07 意:程序通過關(guān)斷和打開TR1來實現(xiàn)發(fā)送低電平和高電平,打開TR1時,發(fā)送38k高電平載波,接收端經(jīng)過反相后接收到低電平,關(guān)斷TR1時,發(fā)送端不發(fā)送載函數(shù)功能:發(fā)送引導(dǎo)碼發(fā)送方:9ms4.5ms 入: 出:voidSend_Start_Bit(void) //TR1的值=發(fā)送的電平{//9ms//4.5ms} 入: 出:voidSend_Bit_0(void){//0.565ms1//0.565ms0} 入: 出:voidSend_Bit_1(void){//0.565ms1//1.685ms0}函數(shù)功能:發(fā)送一個結(jié)束碼,因為最后一個位只有遇到下降沿才能(發(fā)射端的上升沿 入: 出:voidSend_over(void) {//0.500ms //0.500ms0} 入:add地址date數(shù) 出:voidSend_Char(unsignedcharadd,unsignedchardate){unsignedchari,j1,j2,j3,j4;j3=date;j4=~date;{}{}{}{}} 入: 出:voidT1_ISR(void)interrupt3{}16021602用,正因為如此,所以它不能很好的顯示。1602的詳細資料請參考資料“SMC1602A.PDF”,在里面介紹已經(jīng)很詳細了。我們實驗名:LCD1602LCD1602LCD1602注意:注意模塊上的1,16標(biāo)志引腳和接口上的1,16標(biāo)志對應(yīng),對有些只有14pinunsignedcharcodetable1[]="Hantechunsignedcharcodetable2[]="ous 入 出:voidDelayus(unsignedintus){unsignedinti;}據(jù) 入: 出:狀bitLcdBusy(){bitresult;lcd_rs=lcd_rw=lcd_en=1;result=(bit)(P0&0x80);lcd_en=0;}LCD1602 入: 出: (unsignedcharcom){;lcd_rw=0;}LCD1602 入: 出:voidLcdWriteDate(unsignedchar{lcd_rw=0;}LCD1602 入: 出:voidLCD1602Init(){(0x3816*2顯示,8位數(shù)據(jù)接口(0x0f);//開顯示,顯示光標(biāo)且閃爍} 入: 出:voidmain(){unsignedcharindex;{LcdWriteDate(table1[index]);//} {LcdWriteDate(table2[index]);//}{}}miniLCD12864實驗我們這里主要來講下uc1705的12864液晶,它是可以串行和并行編程。本模塊使用了12864的串行接口,并支持兼容1602接口。視角:12 125V3456789背光,接 入: 出:voidLcdWriteCmd(cmd){chari;if(cmd&0x80)lcd_SID=1;//置數(shù)據(jù)線 lcd_SCLK=1;//產(chǎn)生時鐘上升沿cmd<<=1;}} 入: 出:voidLcdWriteData(dat){chari;if(dat&0x80)lcd_SID=1;//置數(shù)據(jù)線 lcd_SCLK=1;//產(chǎn)生時鐘上升沿dat<<=1;}}12864lcd_RS修改該點,最后送出去,即修改該點,最后送出去,即讀----修 寫。按照這個步驟,然后再運用C語言中的、打開取模軟件“||||||| 程序12864實驗名:12864mini12864LCD1602 意:mini12864朝里放,也就是mini12864GND引腳對應(yīng)接口1,mini12864LCD1602 入: 出:voidLcd12864_Init(){codeunsignedcharcon_d2=0x16;//對比度細調(diào)默認值,可設(shè)置范圍0x00~0x3f lcd_delay(20);//復(fù)位完成LcdWriteCmd(0xe2);lcd_delay(5); LcdWriteCmd(0x2c);lcd_delay(5);//升壓步聚BoostONLcdWriteCmd(0x2e);lcd_delay(5);//升壓步聚VoltageRegularONLcdWriteCmd(0x2flcd_delay(5);//VoltageFollowerONLcdWriteCmd(0x24);//粗調(diào)對比度,可設(shè)置范圍0x20~0x27LcdWriteCmd(0x81);//微調(diào)對比度,此行及下行需緊跟LcdWriteCmd(0xa2);//1/9偏壓比(baisset)LcdWriteCmd(0xc8);//行掃描順序:0xc8從上到下,0xc0從下到上LcdWriteCmd(0xa0);//列掃描順序:0xa0從左到右,0xa1LcdWriteCmd(0x40);//起始行:第一行開始LcdWriteCmd(0xaf);//開顯示} structCn16CharTypeDef //漢字字模數(shù)據(jù)結(jié)構(gòu){unsignedcharMsk[32]; //點陣碼數(shù)據(jù)(16*16有32個數(shù)據(jù))unsignedchar structCn16CharTypeDefcode 入:x,y, 出:#ifdefCHAR_CODEunsignedcharLcdWriteString(unsignedcharx,unsignedchary,unsignedchar{unsignedcharj,x1,x2,if(y>7){return}if(x>128){return}y while*cn\0')//C語言中字符串結(jié)束以‘\0{x1x4&0x0F;//X44x2x& //--設(shè)置X坐標(biāo)--//LcdWriteCmd(0x10+x1); LcdWriteCmd(x2);//低4位for(wordNum=0;wordNum<50;{if((CN16CHAR[wordNum].Index[0]==*cn)&&(CN16CHAR[wordNum].Index[1]==*(cn+1))){forj=0;j<32j{ifj16)//16X16Y16{//--設(shè)置Y坐標(biāo)--//LcdWriteCmd(y1);//--設(shè)置X坐標(biāo)--//LcdWriteCmd(0x10+x1); LcdWriteCmd(x2);//低4位}}x+=forcn+= return}函數(shù)功能 入: 出:voidmain(){uchari=128;DULA=1;P0=0xff;DULA=0;WELA=P0=0xff;WELA=0;for(i=0;for(i=0;i<8;i+={LcdWriteString(0i,航太電子}{}}我們的彩屏模塊采用航太電子的觸摸彩屏模塊,集成了彩屏,TF卡以及觸摸功能,這 彩屏模塊采用工業(yè)級驅(qū)動三星S6D1121,該為低功耗的CMOSLCD控制器,支持320*240的分辨率,擁有1.38Mbit(240x18bitx320)的顯示RAM,并支持多種處理器器接口,包括8080系統(tǒng)(8-bit9-bit,16-bit,18bit6800系統(tǒng)(8-bit,9-bit,16-bit,18bit),高速串行方式(3-pins)。I/O88888080816式,顏色我們選擇RGB56516位模式下RGB ,DB12-B(B0與 8位模式下RGB寫周期是指寫入數(shù)據(jù)或指令給控制器從而控制彩屏的顯示效果。在16WR,以及數(shù)據(jù)引腳(DB0-7,DB10,17RS 分別傳送指令或數(shù)據(jù)的高8位,低8位, 808bit8016bit總線模式,若要切換到80系統(tǒng)16bit總線模式,需要短接彩屏模塊背面的R9(R9默認是空的IM0引腳

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論