CT107D編程手冊(cè)_第1頁
CT107D編程手冊(cè)_第2頁
CT107D編程手冊(cè)_第3頁
CT107D編程手冊(cè)_第4頁
CT107D編程手冊(cè)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、【精品文檔】如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流CT107D編程手冊(cè).精品文檔.一、IO口編程IO編程,該開發(fā)板使用了573鎖存器,通過P2口的5,6,7位連接3-8譯碼器,擴(kuò)展出了8個(gè)口,其中4個(gè)口分別連接4個(gè)573鎖存器,這里以的鎖存器來舉例:原理圖:分析代碼:();其中,與進(jìn)行與運(yùn)算,高三位清零,其余位保持原來狀態(tài),不改變,即把控制譯碼器的高三位留出來:接著再或上;容易發(fā)現(xiàn);或運(yùn)算,與或結(jié)果為,與或結(jié)果不變,所以或上只需看的高三位,則高三位為,對(duì)應(yīng)譯碼器的話,;所以輸出;再經(jīng)過與非運(yùn)算,看下圖示:則輸出;即對(duì)應(yīng)的鎖存器的片選信號(hào)被選中,鎖存器打通,接下來就可以對(duì)口進(jìn)行操作,操作完之后

2、,;高三位直接清零,此時(shí)Y4C=0,則把鎖存器鎖上了。類似的方法,數(shù)碼管、蜂鳴器等都是如此操作,選中鎖存器代碼:P2=(P2&0x1f)|(這里填對(duì)應(yīng)鎖存器的位移號(hào))。二、              數(shù)碼管動(dòng)態(tài)掃描和定時(shí)器數(shù)碼管顯示分為段選和位選,數(shù)碼管定義和顯示函數(shù):Code unsigned char tab = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned chardspbuf=10,10,10,10,10,1

3、0,10,10;unsigned chardspcom=0;void display()/段選,消隱P2=(P2&0x1f)|0xe0);P0=0xff;P2=P2&0x1f;/位選P2=(P2&0x1f)|0xc0);P0=(1<<dspcom);P2=P2&0x1f;/段碼輸入P2=(P2&0x1f)|0xe0);P0=tabdspbufdspcom;P2=P2&0x1f;if(+dspcom=8)       dspcom=0;注意:這里1左移dspcom位,剛開始dspcom=0,則1左

4、移dspcom位依舊為1,接著dspcom每次自增1,1對(duì)應(yīng)二進(jìn)制00000001,即把1每次向左移,每次都比上一次多移一位,直至8位移完,對(duì)應(yīng)8個(gè)數(shù)碼管。定時(shí)器配置:這里只需記住定時(shí)器的配置,知道怎么使用就可以了。首先有兩個(gè)定時(shí)器,T0和T1,(也有的單片機(jī)有T2),定時(shí)器有4種工作方式0,1,2,3;其中最常用的是方式1(16位),其次是方式2(8位自動(dòng)重裝,串口通訊中斷會(huì)用到)。定時(shí)器需要配置:TMOD |=0x01;配置成使用定時(shí)器0,工作方式為1;同理使用定時(shí)器1工作方式1:TMOD|=0x10;則同時(shí)使用兩個(gè)定時(shí)器且工作方式為1,那么可以:TMOD|=0x11;定時(shí)器1配置成工作方

5、式2:TMOD |=0x20;接著配置(以定時(shí)器0舉例):TH0=(65535-2000)/256;/配置初值TL0=(65535-2000)%6;ET0=1;TR0=1;/定時(shí)0中斷EA=1;/總中斷定時(shí)器1也是同理的,只不過0要改成1.接著定時(shí)中斷函數(shù)和優(yōu)先級(jí):定時(shí)器0void isr_timer_0(void) interrupt1  /默認(rèn)中斷優(yōu)先級(jí)1    TH0= (65536-2000)/256;    TL0= (65536-2000)%6;  /定時(shí)器重載   display(

6、);定時(shí)器1:voidisr_timer_1(void)  interrupt 3 /默認(rèn)中斷優(yōu)先級(jí)3    TH0= (65536-2000)/256;    TL0= (65536-2000)%6;  /定時(shí)器重載   display();注意:定時(shí)器0優(yōu)先級(jí)為1,定時(shí)器1為3,串口中斷優(yōu)先級(jí)為4,總共有5個(gè)中斷源,后面還會(huì)介紹外部中斷和串口中斷。數(shù)碼管動(dòng)態(tài)掃描,顯示函數(shù)放在定時(shí)中斷函數(shù)里面,2ms掃一次是最穩(wěn)定的!三、        

7、60;     矩陣鍵盤矩陣鍵盤需要死記了!這里不再講獨(dú)立鍵盤。第二種單片機(jī)鍵盤掃描代碼(沒有消抖):sfrP44=0xC0;/鍵盤定義sbitr1=P30;  /4行sbit r2=P31;sbit r3=P32;sbit r4=P33;/4列sbit c1=P44;sbit c2=P42;sbit c3=P35;sbit c4=P34;/讀取矩陣鍵盤鍵值unsigned charkey_scan()    unsigned char key_value;    r1=0;  

8、60; r2=r3=r4=1;    c1=c2=c3=c4=1;    if(!c1) key_value=0;    else if(!c2) key_value=1;    else if(!c3) key_value=2;    else if(!c4) key_value=3;   r2=0;    r1=r3=r4=1;    c1=c2=c3=c4=1;    if(!c1) key_value=4;&

9、#160;   else if(!c2) key_value=5;    else if(!c3) key_value=6;    else if(!c4) key_value=7;    r3=0;    r2=r1=r4=1;    c1=c2=c3=c4=1;    if(!c1) key_value=8;    else if(!c2) key_value=9;    else if(!c3) key_value=10

10、;    else if(!c4) key_value=11;    r4=0;    r2=r3=r1=1;    c1=c2=c3=c4=1;    if(!c1) key_value=12;    else if(!c2) key_value=13;    else if(!c3) key_value=14;    else if(!c4) key_value=15;    return key_value;四

11、、              串口通訊和串口中斷串口中斷配置只需記住幾個(gè)寄存器就行了,初始化:  SCON =0x50; /串口配置成模式1TMOD|=0x20;/定時(shí)器1,方式2,8位自動(dòng)重裝TH1=256-(unsigbedchar)(SYSTEMCLOK/BAUDRATE/384+0.5);/定時(shí)初值        ES=1;        /串口中斷

12、打開        TR1=1;     /啟動(dòng)定時(shí)器1        EA=1;           /總中斷打開這里必須使用定時(shí)器1,不能用定時(shí)器0.下面是模塊化的函數(shù):void Uart_Init()SCON = 0x50;TMOD |=0x20;TH1=256-(SYSREMCLOCK/BAUDRATE/384+0.5);ES=1;TR1=1;EA=

13、1;void UartSend(unsignedchar*pBuff,int length)unsigned charc;int i=0;for(i=0;ic=pBuff;SBUF=c;while(TI=0);TI=0;接收數(shù)據(jù)可以這樣寫:定義全局變量:unsigned charuart_buf100;/串口緩沖區(qū)unsignedint  uart_Count=0;/串口數(shù)據(jù)長度void uart_inte()interrupt 4     unsigned char c;     if(RI)

14、            RI=0;            c=SBUF;            uart_bufuart_Count=c;            uart_Count+;如果可以指定的接收,可以這樣寫/串口中斷服務(wù)函數(shù)void isr_uart(void)inte

15、rrupt 4   if(RI)       RI = 0;  /清除接收標(biāo)志位       rxbufrxcnt = SBUF;       if(rxbufrxcnt = 'n')           rxcnt = 0;           rx_over

16、= 1;           ES = 0;/回車為接收結(jié)束標(biāo)志,檢測(cè)到回車符后,關(guān)閉串口中斷            else                   rxcnt+;當(dāng)接收完一幀數(shù)據(jù)時(shí)關(guān)閉串口中斷,設(shè)一個(gè)標(biāo)志位,處理完之后再打開。#include"reg51.h"#include&quo

17、t;intrins.h"typedef unsigned charBYTE;typedef unsigned intWORD;BYTEcode_tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;char arry10="I CANPLAY"unsigned charx;#define FOSC11059200/12000000L         /系統(tǒng)頻率#define BAUD115200     

18、0;      /串口波特率#defineNONE_PARITY    0      /無校驗(yàn)#defineODD_PARITY     1      /奇校驗(yàn)#defineEVEN_PARITY    2      /偶校驗(yàn)#defineMARK_PARITY    3      /標(biāo)記校驗(yàn)#de

19、fineSPACE_PARITY   4      /空白校驗(yàn)#define PARITYBITNONE_PARITY  /定義校驗(yàn)位sfrAUXR  =0x8e;              /輔助寄存器sfrP_SW1   =0xA2;            /外設(shè)功能切換寄存器1#define

20、S1_S00x40             /P_SW1.6#define S1_S10x80             /P_SW1.7sbit P22 =P22;bit busy;void SendData(BYTEdat);void SendString(char*s);void main()    ACC= P_SW1;    ACC&= (S1_S0 |S1_S1); 

21、 /S1_S0=0 S1_S1=0   P_SW1 =ACC;               /(P3.0/RxD, P3.1/TxD)/  ACC= P_SW1;/  ACC&= (S1_S0 |S1_S1);   /S1_S0=1 S1_S1=0/  ACC|=S1_S0;            &

22、#160; /(P3.6/RxD_2, P3.7/TxD_2)/ P_SW1 = ACC; /  ACC= P_SW1;/  ACC&= (S1_S0 |S1_S1);   /S1_S0=0 S1_S1=1/  ACC|=S1_S1;              /(P1.6/RxD_3, P1.7/TxD_3)/ P_SW1 = ACC; /#if (PARITYBIT =NONE_PARITY)&

23、#160;   SCON=0x50;               /8位可變波特率/#elif (PARITYBIT =ODD_PARITY) | (PARITYBIT = EVEN_PARITY) | (PARITYBIT =MARK_PARITY)/  SCON =0xda;               /9位可變波特率,校驗(yàn)位初始為1/#elif (PARITY

24、BIT =SPACE_PARITY)/  SCON =0xd2;               /9位可變波特率,校驗(yàn)位初始為0/#endif    AUXR=0x40;               /定時(shí)器1為1T模式    TMOD=0x20;           &

25、#160;   /定時(shí)器1為模式2(8位自動(dòng)重載)    TL1= (256 - (FOSC/32/BAUD);  /設(shè)置波特率重裝值    TH1= (256 - (FOSC/32/BAUD);    TR1=1;                   /定時(shí)器1開始工作    ES =1;        &

26、#160;           /使能串口中斷    EA =1;   while(1)/  SendString(arry);     SendString("I CAN PLAYrn");/上位機(jī)顯示接收文本模式/  SendData(x);void Uart() interrupt 4using 1    if(RI)/單片機(jī)接收數(shù)據(jù),發(fā)送數(shù)字09,可

27、在數(shù)碼管上顯示,發(fā)送hex模式       RI =0;                /清除RI位/       P0= SBUF;            x=SBUF;/將緩存器的數(shù)據(jù)賦值給x            P0=0xff;   

28、;            /消隱            P2|=0xe0;            P2&=0x1f;            P0=code_tabx;            &

29、#160;  /段選            P2|=0xe0;            P2&=0x1f;            P0=0x01;                       &

30、#160;  /位選第一位            P2|=0xc0;            P2&=0x3f;    if(TI)       TI =0;                /清除TI位      

31、 busy =0;              /清忙標(biāo)志void SendData(BYTEdat)   while(busy);              /等待前面的數(shù)據(jù)發(fā)送完成    ACC=dat;                 

32、/獲取校驗(yàn)位P (PSW.0)    if(P)                     /根據(jù)P來設(shè)置校驗(yàn)位#if (PARITYBIT =ODD_PARITY)       TB8 =0;               /設(shè)置校驗(yàn)位為0#elif (PARITYBIT =EVEN_PARITY)&

33、#160;      TB8 =1;               /設(shè)置校驗(yàn)位為1#endif   else#if (PARITYBIT =ODD_PARITY)       TB8 =1;               /設(shè)置校驗(yàn)位為1#elif (PARITYBIT =EVEN_PARITY) 

34、     TB8 =0;               /設(shè)置校驗(yàn)位為0#endif    busy= 1;    SBUF=ACC;                /寫數(shù)據(jù)到UART數(shù)據(jù)寄存器void SendString(char*s)   while(*s)     

35、0;           /檢測(cè)字符串結(jié)束標(biāo)志       SendData(*s+);        /發(fā)送當(dāng)前字符記不住可以看手冊(cè)!#include"reg51.h"#include"intrins.h"typedef unsigned charBYTE;typedef unsignedint  WORD;#define FOSC11059200L#de

36、fine BAUD115200sfrAUXR=0x8e;   /輔助寄存器sbit P22=P22;bit busy;void SendData(BYTEdat);void SendString(char*s);void main()     SCON=0x50;     AUXR=0x40; /設(shè)置定時(shí)器T1為1T,即一個(gè)機(jī)器周期模式     TMOD=0x20;     TL1=(256-(FOSC/32/BAU

37、D);     TH1=(256-(FOSC/32/BAUD);     TR1=1;     ES=1;     EA=1;     SendString("Hello");     while(1);void Uart() interrupt 4using 1     if(RI) 

38、          RI=0;            P0=SBUF;     if(TI)            TI=0;            busy=0;void SendData(BYTEdat)    &#

39、160;while(busy);     busy=1;     SBUF=dat;void SendString(char*s)     while(*s)            SendData(*s+);五、              外部中斷的使用#includesbit L1=P00;in

40、t main()IT0=1;/IT0=1,下降沿觸發(fā)外部中斷0,IT0=0邊沿觸發(fā)EX0=1;/使用外部中斷0EA=1;while(1)void Ex_int0() interrupt 0 /外部中斷優(yōu)先級(jí)最高P2=(P2&0x1f)|0x80);L1=L1;P2=(P2&0x1f);     其中,外部中斷的引腳控制是P32,P33,即對(duì)應(yīng)獨(dú)立按鍵的S5,S4。六、              實(shí)時(shí)時(shí)鐘DS1302的使用藍(lán)橋杯提供函數(shù),解釋

41、為:里面的命令和寫入的數(shù)據(jù)可以看芯片手冊(cè):左側(cè)的READ、WRITE分別是讀寫的命令,BIT7-BIT0是要寫入的數(shù)據(jù),根據(jù)需要進(jìn)行配置。DS1302只需記住這兩個(gè)函數(shù)即可:Write_Ds1302( , )與Read_Ds1302(x),配置看手冊(cè)。重點(diǎn):芯片表說明:第一行:秒->因?yàn)槊氲姆秶?-59,所以6,5,4位表示秒的十位,3,2,1,0表示個(gè)位,十位最大是5,所以三位即可。第二行:跟上面一樣;第三行:7位:1為12小時(shí)制,0為24小時(shí)制;5位:12小時(shí)制時(shí)為0表示上午,1表示下午,24小時(shí)制時(shí),和4位一起表示小時(shí)的十位;其余的時(shí)間一樣的表示。倒數(shù)第二行:只看7位:為1時(shí)禁止

42、寫數(shù)據(jù),所以開始寫數(shù)據(jù)時(shí)必須置0;讀數(shù)時(shí):!需要加“寫操作這一行代碼”。讀的話直接按照命令讀即可。DS1302進(jìn)階(BCD碼轉(zhuǎn)換):解決之前60秒不能進(jìn)位的問題。1)寫入初始值時(shí),要把10十進(jìn)制數(shù)轉(zhuǎn)換為碼,例:寫入時(shí)間:Ds1302_Single_Byte_Write(0x8e,0x00);/寫操作Ds1302_Single_Byte_Write(0x85, (17/10)<<4 |(17);/寫時(shí)   Ds1302_Single_Byte_Write(0x83, (58/10)<<4 |(58);/寫分Ds1302_Single_Byte_Writ

43、e(0x81, (50/10)<<4 |(50);/寫秒Ds1302_Single_Byte_Write(0x8e,0x80);/寫保護(hù)即轉(zhuǎn)換的公式是:(Value/10)<<4 | (Value),可以寫一個(gè)()函數(shù)。2 )讀數(shù):讀回來的數(shù)要進(jìn)行轉(zhuǎn)換成十進(jìn)制數(shù)(ReadValue&0x70)>>4)*10 +(ReadValue&0x0F);八進(jìn)制轉(zhuǎn)十進(jìn)制->ReadValue=Ds1302_Single_Byte_Read(0x85);         hour=(Read

44、Value&0x70)>>4)*10 +(ReadValue&0x0F);   ?。ㄟ@句一定不要省)     Ds1302_Single_Byte_Write(0x00, 0x00);/寫操作         ReadValue=Ds1302_Single_Byte_Read(0x83);         minute=(ReadValue&0x70)>>4)*10 +

45、(ReadValue&0x0F);         Ds1302_Single_Byte_Write(0x00, 0x00);/寫操作         ReadValue=Ds1302_Single_Byte_Read(0x81);         sec=(ReadValue&0x70)>>4)*10 +(ReadValue&0x0F);     &

46、#160;   Ds1302_Single_Byte_Write(0x00, 0x00);/寫操作顯示:        dspbuf0=hour/10;         dspbuf1=hour;         dspbuf2=minute/10;     dspbuf3=minute;        &#

47、160;dspbuf4=sec/10;         dspbuf5=sec;七、              PCF8591與IIC總線的使用(1)   IIC總線的使用:比賽提供了IIC的兩個(gè)庫文件,IIC.h;IIC.c,其中需要注意的函數(shù)是:其中,該函數(shù)是初始化的,當(dāng)使用AD轉(zhuǎn)換的時(shí)候需要在main函數(shù)開始時(shí)調(diào)用,該函數(shù)內(nèi)部只需看這句代碼即可:i2c_sendbyte(0x03);/ADC通道3,板上有4個(gè)模

48、擬輸入口,分別為0,1,2,3;設(shè)置哪一個(gè)模擬輸入口就是根據(jù)這句代碼,0x03表示通道3,這是根據(jù)芯片手冊(cè)配置的,如圖:8位前6位不用管,都為0,最后兩位就是配置選擇哪一個(gè)通道的。第二個(gè)函數(shù):讀取AD轉(zhuǎn)換后的數(shù)值,這個(gè)函數(shù)直接調(diào)用就可以了,函數(shù)內(nèi)部如何實(shí)現(xiàn)不用管,但是需要注意的是:該函數(shù)掃描調(diào)用最好是100ms。第三個(gè)函數(shù),上面的都是轉(zhuǎn)換,即模擬信號(hào)轉(zhuǎn)數(shù)字信號(hào),下面這個(gè)函數(shù)是DA轉(zhuǎn)換,數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),就是單片機(jī)輸出數(shù)字信號(hào),用萬能表去量單片機(jī)引出的引腳,量一下電壓大小,這個(gè)估計(jì)比賽不會(huì)考,不過預(yù)防萬一:該函數(shù)和上面兩個(gè)函數(shù)分離開來的,一、二函數(shù)是要在一起使用,初始化后之后才能調(diào)用,第三

49、個(gè)加入頭文件,直接調(diào)用即可,比較簡單!上面說法有誤,A/D轉(zhuǎn)換的初始化函數(shù)和讀取轉(zhuǎn)換后的數(shù)值都需要自己寫。這里了解一下PCF8591只需根據(jù)時(shí)序格式發(fā)送地址字節(jié)和控制字節(jié):,這是地址字節(jié),其中A2,A1,A0硬件已經(jīng)接地,故都為0,最低位表示的是你要從IIC總線上讀數(shù)還是寫數(shù)據(jù),1表示讀,0表示寫,即讀數(shù)據(jù)發(fā)的地址是:0x91;寫數(shù)據(jù)發(fā)的地址是0x90;控制字節(jié):由芯片資料知,控制字節(jié)有8位,有兩位固定是0,除了第0、1位需要自己設(shè)置,其他的我們都設(shè)為0,那些位都是一些具體的功能,我們暫時(shí)用不著,不用管先,第0、1位是模擬通道選擇,PCF8591上提供了4路模擬通道,根據(jù)需求進(jìn)行選擇,如選擇通

50、道3即發(fā)送控制字節(jié):0x03;地址字節(jié)和控制字節(jié)都明白了,接下來根據(jù)時(shí)序要求進(jìn)行配置,A/D轉(zhuǎn)換需要一個(gè)初始化函數(shù):Init_ADpcf8591();和一個(gè)獲得AD轉(zhuǎn)換后的數(shù)值的函數(shù):adc_pcf8591(); 其中初始化函數(shù)的作用是發(fā)送AD轉(zhuǎn)換的控制字節(jié);adc_pcf8591()發(fā)送讀取得地址并讀回?cái)?shù)據(jù),先寫指令才能讀;格式如下:這個(gè)是初始化的協(xié)議:分別是startIIC、(地址寫)發(fā)送0x90、等待應(yīng)答、發(fā)送控制字節(jié)(AD這里是選擇通道的指令,如選擇通道3,0x03)0x03、等待應(yīng)答、(達(dá)到目的,沒有后續(xù)的操作,直接停止總線)StopIIC.初始化的函數(shù)就是如此寫;adc_pcf85

51、91的協(xié)議:依次是:startIIc、發(fā)送讀地址0x91、等待應(yīng)答、讀回AD轉(zhuǎn)換后的數(shù)值、讀回后發(fā)送應(yīng)答給PCF8591,表示收到,并且不需要再返回應(yīng)答,要傳參數(shù)1,如圖紅圈示,即函數(shù)Ack(1);、最后stopIIC總線。D/A轉(zhuǎn)換(其實(shí)挺麻煩,先前太自信了,哈):所謂D/A轉(zhuǎn)換其實(shí)就是把數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)輸出,用單片機(jī)發(fā)數(shù)字通過D/A轉(zhuǎn)換成電壓輸出,檢測(cè)的方法可以用電壓表測(cè)量。配置的方法跟A/D類似,先發(fā)地址字節(jié),再發(fā)控制字節(jié),然后把數(shù)字發(fā)出去(AD這里是接收模擬信號(hào),是相反的機(jī)制)。控制字節(jié):如圖示,控制字節(jié)的第6位是1的話是模擬輸出模式,其余位全為0,發(fā)送格式跟AD一樣:代碼如一開

52、始圖示。(2)   EEPROM的使用,AT24C02,可以掉電依舊保存上一次操作的數(shù)據(jù),下次上電后接著運(yùn)行。需要注意兩個(gè)函數(shù),一個(gè)是寫進(jìn)EEPROM里面保存,再次上電再從里面讀回來:其中寫函數(shù)需要指定AT24C02的地址以及需要寫入的數(shù)據(jù),讀函數(shù)要想取回寫進(jìn)的數(shù)據(jù),需要從相同的地址里面讀:其中AT24C02的存儲(chǔ)地址是0x00,可以是其他地址,如0x02,但是讀和寫的地址必須一致。寫與讀的協(xié)議與AD或相同,由芯片資料及原理圖知()的寫地址為;讀地址為;注意:讀數(shù)的時(shí)候讀出一個(gè)數(shù)之后發(fā)送一個(gè)應(yīng)答信號(hào),若()表示還想繼續(xù)讀下一個(gè)字節(jié),若();則不想再讀數(shù),讓停止發(fā)送。八、&#

53、160;             DS18B20時(shí)鐘芯片的使用比賽有提供代碼,只需記住這個(gè)函數(shù):讀取溫度值,整數(shù)(其中,提示EA總中斷要打開、關(guān)閉,也可以不用)。浮點(diǎn)數(shù)的表示。注意,只有提供函數(shù),沒有提供讀取溫度的函數(shù),即上面的那個(gè),只有下面:這幾個(gè)函數(shù)。編寫讀取溫度的函數(shù)需要記住DS13B20的三條指令,0xCC,跳過ROM檢測(cè);然后啟動(dòng)溫度轉(zhuǎn)換:0x44;轉(zhuǎn)換需要時(shí)間,這里精確延時(shí)Delay_OneWire(200);然后再次初始化,再次執(zhí)行跳過,然后讀取溫度指令:0xBE.;注意讀出的溫度是低字節(jié)先

54、,然后才是高字節(jié),分別用兩個(gè)變量保存還要通過公式轉(zhuǎn)換成我們需要的整數(shù)或浮點(diǎn)數(shù)。完整代碼如上圖示。九、              超聲波傳感器的使用#include"reg52.h"  /定義51單片機(jī)特殊功能寄存器#include "intrins.h"#include "absacc.h"/12M用這個(gè)/11.0592用這個(gè)#define somenop_nop_();_nop_();_nop_();_nop_()

55、;_nop_();                _nop_();_nop_();sbit TX =P10;  /發(fā)射引腳sbit RX =P11;  /接收引腳code unsigned char tab = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,                 &#

56、160;          0xff;unsigned char dspbuf8 =10,10,10,10,10,10,10,10;  /顯示緩沖區(qū)unsigned char dspcom =0;unsigned int intr =0;bit s_flag;unsigned int t = 0;voidsend_wave(void);void display(void);void main(void)   unsigned int distance;    TMOD|= 0

57、x11;  /配置定時(shí)器工作模式    TH0= (65536-2000)/256;    TL0= (65536-2000)%6;     TH1= 0;    TL1= 0;     EA =1;    ET0= 1;  /打開定時(shí)器0中斷    TR0= 1;  /啟動(dòng)定時(shí)器     while(1)      

58、 if(s_flag)           s_flag = 0;                     t = TH1;                     t <<= 8;     

59、60;               t |= TL1;                     distance = (unsigned int)(t*0.017); /計(jì)算距離                     

60、                   TH1 = 0;              TL1 = 0;       dspbuf5 = distance/100;       dspbuf6 = distance0/10;       dspb

61、uf7 =distance;       /定時(shí)器0中斷服務(wù)函數(shù)voidisr_timer_0(void)  interrupt 1 /默認(rèn)中斷優(yōu)先級(jí) 1    TH0= (65536-2000)/256;    TL0= (65536-2000)%6;  /定時(shí)器重載display(); /2ms執(zhí)行一次if(+intr = 200)       s_flag = 1;       intr =

62、 0;/顯示函數(shù) void display(void)      XBYTE0xE000 = 0xff;  /去除鬼影      XBYTE0xC000 = (1<<dspcom);      XBYTE0xE000 = tabdspbufdspcom;if(+dspcom = 8)             dspcom = 0;/TX引腳發(fā)送40KHz方波信號(hào)驅(qū)動(dòng)

63、超聲波發(fā)送探頭void send_wave(void)unsigned char i =8;  /發(fā)送8個(gè)脈沖do       TX = 1;       somenop;       TX = 0;       somenop;while(i-);必要時(shí)還可以加個(gè)看門狗:   WDT_CONTR=0x34;十、         

64、0;    步進(jìn)電機(jī)與直流電機(jī)的使用參考代碼如下:#includesbit A1=P14;/定義步進(jìn)電機(jī)連接端口sbit B1=P13;sbit C1=P12;sbit D1=P11;void qudong1();#define Dy_A1A1=1;B1=0;C1=0;D1=0;/A相通電,其他相斷電#define Dy_B1A1=0;B1=1;C1=0;D1=0;/B相通電,其他相斷電#define Dy_C1A1=0;B1=0;C1=1;D1=0;/C相通電,其他相斷電#define Dy_D1A1=0;B1=0;C1=0;D1=1;/D相通電,其他相斷電&#

65、160;   /采用1相勵(lì)磁#define Dy_OFFA1=0;B1=0;C1=0;D1=0;/全部斷電unsigned charSpeed,Speed1;void DelayUs2x(unsigned chart)while(-t);void DelayMs(unsigned chart)while(t-)    /大致延時(shí)1mS    DelayUs2x(245);   DelayUs2x(245);main()Dy_OFF;for(;)   qudong1();void qudong1()unsigned inti=470;/旋轉(zhuǎn)一周時(shí)間Speed=5;while(i-)  /正向    Dy_A1               /遇到Coil_A1  用A1=1;B1=0;C1=0;D1=0;代替

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論