亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

標(biāo)題: 基于NTC熱敏電阻和nRF24L01的無(wú)線溫度計(jì)設(shè)計(jì) [打印本頁(yè)]

作者: 凌凈清河    時(shí)間: 2019-2-25 10:23
標(biāo)題: 基于NTC熱敏電阻和nRF24L01的無(wú)線溫度計(jì)設(shè)計(jì)
本作品部分靈感和啟發(fā)來(lái)自以下貼子,在此表示感謝:
http://www.denmoz.com/bbs/dpj-57255-1.html

本作品使用NTC熱敏電阻和nRF24L01實(shí)現(xiàn)無(wú)線測(cè)溫功能。使用前請(qǐng)仔細(xì)閱讀說(shuō)明文字。

【測(cè)量部分】
平臺(tái):STC15W408AS,頻率:22.1184MHz

測(cè)量部分使用NTC-MF52-103/3435熱敏電阻進(jìn)行溫度采集,通過(guò)讀取單片機(jī)內(nèi)部BandGap電壓得到準(zhǔn)確的電源電壓和外部電壓,進(jìn)而使用查表方法得到對(duì)應(yīng)的最靠近的溫度值,處理并顯示。無(wú)線部分采用2.4G載波的nRF24L01模塊進(jìn)行數(shù)據(jù)傳輸。

誤差分析:
設(shè)此采集過(guò)程中,影響采集精度的唯一因素為ADC對(duì)電壓的分辨率,若排除高精度分壓電阻的誤差,則在5V穩(wěn)定電壓供電條件下,可得到能識(shí)別的NTC電阻變化跨度為97.7517106549(十倍歐姆),由于NTC電阻阻值是隨溫度非線性變化的,則固定分辨率下,不同溫度值附近精度不同,本次設(shè)計(jì)使用的單片機(jī)具有10位ADC,最小分辨率為4.8828mV,計(jì)算得到20℃定點(diǎn)溫度下的理論跨度誤差約為1.521190476%。

【接收顯示部分】

平臺(tái):STM8S103F2P6,HSI:16MHz,CPUDIV:8
顯示使用雙數(shù)碼管顯示,分別使用一個(gè)595進(jìn)行段選控制(別問(wèn)我為什么用兩個(gè)595,設(shè)計(jì)的時(shí)候沒(méi)想太多...),位選使用一個(gè)138譯碼器解決。
可以顯示正負(fù)溫度,自動(dòng)消零。


程序部分說(shuō)明:
1.發(fā)送和接收部分的nRF24L01驅(qū)動(dòng)函數(shù)均進(jìn)行了精簡(jiǎn),發(fā)送部分僅有發(fā)送相關(guān)函數(shù),接收部分只有接收部分的函數(shù),移植需要注意。

2.無(wú)線報(bào)文數(shù)據(jù)格式見(jiàn)數(shù)據(jù)采集的程序,一共有14個(gè)字節(jié),都是數(shù)字的形式,接收到之后直接判斷送顯即可。


【實(shí)物圖片】
數(shù)據(jù)采集部分


接收部分的實(shí)際效果1


接收部分的實(shí)際效果2


接收部分?jǐn)?shù)碼管段選電路連接

數(shù)據(jù)采集部分重點(diǎn)電路

接收顯示部分單片機(jī)引腳定義(典型連接)


【程序概要】
測(cè)量部分
  1. #include"STC15.H"        //單片機(jī)寄存器定義
  2. #include"Binary.H"        //提供二進(jìn)制輸入
  3. #include<intrins.h>        //提供_nop_函數(shù)
  4. #include<math.h>        //提供fabs浮點(diǎn)數(shù)絕對(duì)值轉(zhuǎn)換函數(shù)
  5. #include"NTC3435.c"        //提供NTC查詢表
  6. #include"nRF24L01.C"//提供nRF24L01驅(qū)動(dòng)

  7. //初始化變量
  8. unsigned int code Voltage_BandGap_ROM _at_ 0x1ff7;        //8K程序空間的MCU
  9. //unsigned int code Voltage_BandGap_ROM _at_ 0xe7f7;//58K程序空間的MCU

  10. //運(yùn)行變量
  11. unsigned int ADC_DATA;                        //讀取到的ADC轉(zhuǎn)換值
  12. unsigned int ADC_BandGap;                //讀取的BandGap轉(zhuǎn)換值
  13. float VCC_Voltage;                                //計(jì)算得到的VCC電壓值,單位mV
  14. float NTC_Voltage;                                //計(jì)算得到的NTC分壓電壓值,單位mV
  15. float NTC_Temperature;                        //查表計(jì)算得到的NTC對(duì)應(yīng)溫度值,單位℃
  16. unsigned long NTC_R_Comp=0;                //待對(duì)比的電阻值,單位十倍歐姆

  17. //運(yùn)行計(jì)數(shù)
  18. unsigned int T0_Cnt=0;                        //定時(shí)器0周期計(jì)數(shù)

  19. //運(yùn)行標(biāo)志位
  20. bit En_ADC_Value=0;                                //ADC轉(zhuǎn)換值標(biāo)志 0:無(wú)效 1:有效
  21. bit Do_VCC_Voltage_Flash=0;                //電源電壓值刷新動(dòng)作標(biāo)志位 1:執(zhí)行一次更新

  22. /************************************************************
  23. 名稱:基于NTC熱敏電阻和nRF24L01的無(wú)線溫度計(jì)(測(cè)量部分)
  24. 平臺(tái):STC15W408AS,頻率:22.1184MHz
  25. 測(cè)試:IAP15W4K58S4,頻率:22.1184MHz
  26. 簡(jiǎn)介:測(cè)量部分使用NTC-MF52-103/3435熱敏電阻進(jìn)行溫度采集,
  27.         通過(guò)讀取單片機(jī)內(nèi)部BandGap電壓得到準(zhǔn)確的電源電壓和外部電壓,
  28.         使用查表方法得到對(duì)應(yīng)的最靠近的溫度值,處理并顯示。
  29.         無(wú)線部分采用2.4G載波的nRF24L01模塊進(jìn)行數(shù)據(jù)傳輸。

  30. 精度說(shuō)明:設(shè)此采集過(guò)程中,影響采集精度的唯一因素為ADC對(duì)電壓的分辨率,
  31.         若排除高精度分壓電阻的誤差,則在5V穩(wěn)定電壓供電條件下,可得到
  32.         能識(shí)別的NTC電阻變化跨度為97.7517106549(十倍歐姆),由于NTC電阻
  33.         阻值是隨溫度非線性變化的,則固定分辨率下,不同溫度值附近精度不同,
  34.         本次設(shè)計(jì)使用的單片機(jī)具有10位ADC,最小分辨率為4.8828mV,
  35.         計(jì)算得到20℃定點(diǎn)溫度下的理論跨度誤差約為1.521190476%。

  36. 注意:程序下載時(shí)請(qǐng)選中:在程序區(qū)的結(jié)束處添加重要測(cè)試參數(shù)

  37. 程序編寫(xiě):凌凈清河
  38. 硬件制作:凌凈欣羽
  39. 文稿排版:凌凈欣羽

  40. 日期:2019年2月18日
  41. 聲明:相關(guān)程序參考宏晶科技例程
  42. 所屬:新礦城學(xué)習(xí)基地#2019
  43. ************************************************************/
  44. void delay(unsigned long i)                                        //延時(shí)函數(shù),調(diào)用此函數(shù)進(jìn)行一段時(shí)間的非精準(zhǔn)延時(shí)
  45. {
  46.         while(i--);
  47. }

  48. void VCC_Voltage_Read()                                                //調(diào)用此函數(shù)更新電源電壓值,存儲(chǔ)在VCC_Voltage變量中,該函數(shù)改變ADC的設(shè)置
  49. {
  50.         P1ASF=B00000000;                                                //不設(shè)置P1ASF,以便上電讀取BandGap電壓的ADC轉(zhuǎn)換值
  51.         ADC_CONTR=B10000000;                                        //開(kāi)啟ADC電源,設(shè)置轉(zhuǎn)換速度540時(shí)鐘周期,清空轉(zhuǎn)換標(biāo)志位,停止轉(zhuǎn)換,模擬通道選擇P1^0
  52.         ADC_RES=0;                                                                //清除結(jié)果寄存器
  53.         ADC_RESL=0;                                                                //清除結(jié)果寄存器
  54.         CLK_DIV&=B11011111;                                                //ADC_RES[7:0]存放高8位ADC結(jié)果,ADC_RES[1:0]存放低2位ADC結(jié)果
  55.         //PADC=1;                                                                //設(shè)置A/D轉(zhuǎn)換中斷優(yōu)先級(jí)為最高
  56.         
  57.         ADC_CONTR|=0x08;                                                //開(kāi)始轉(zhuǎn)換
  58.         _nop_();
  59.         _nop_();
  60.         _nop_();
  61.         _nop_();                                                                //按照例程延時(shí)4個(gè)周期
  62.         while(!En_ADC_Value);                                        //等待轉(zhuǎn)換結(jié)束
  63.         En_ADC_Value=0;                                                        //清除標(biāo)志位
  64.         ADC_BandGap=ADC_DATA;                                        //保存BandGap的ADC轉(zhuǎn)換值
  65.         VCC_Voltage=Voltage_BandGap_ROM*1023.0/(float)ADC_BandGap;//電源電壓值計(jì)算
  66. }

  67. void NTC_Voltage_Read()                                                //調(diào)用此函數(shù)更新NTC電壓值,存儲(chǔ)在NTC_Voltage變量中,該函數(shù)改變ADC的設(shè)置
  68. {
  69.         P1ASF=B00100000;                                                //NTC接在P15
  70.         ADC_CONTR=B11100101;                                        //開(kāi)啟ADC電源,設(shè)置轉(zhuǎn)換速度90時(shí)鐘周期,清空轉(zhuǎn)換標(biāo)志位,停止轉(zhuǎn)換,模擬通道選擇P1^5
  71.         ADC_RES=0;                                                                //清除結(jié)果寄存器
  72.         ADC_RESL=0;                                                                //清除結(jié)果寄存器
  73.         CLK_DIV&=B11011111;                                                //ADC_RES[7:0]存放高8位ADC結(jié)果,ADC_RES[1:0]存放低2位ADC結(jié)果
  74.         //PADC=1;                                                                //設(shè)置A/D轉(zhuǎn)換中斷優(yōu)先級(jí)為最高
  75.         
  76.         ADC_CONTR|=0x08;                                                //開(kāi)始轉(zhuǎn)換
  77.         _nop_();
  78.         _nop_();
  79.         _nop_();
  80.         _nop_();                                                                //按照例程延時(shí)4個(gè)周期
  81.         while(!En_ADC_Value);                                        //等待轉(zhuǎn)換結(jié)束
  82.         En_ADC_Value=0;                                                        //清除標(biāo)志位
  83.         NTC_Voltage=Voltage_BandGap_ROM*(float)ADC_DATA/(float)ADC_BandGap;//NTC分壓電壓計(jì)算
  84. }

  85. void Timer0Init(void)                                                //2毫秒@22.1184MHz
  86. {
  87.         AUXR |= 0x80;                                                        //定時(shí)器時(shí)鐘1T模式
  88.         TMOD &= 0xF0;                                                        //設(shè)置定時(shí)器模式
  89.         TL0 = 0x33;                                                                //設(shè)置定時(shí)初值
  90.         TH0 = 0x53;                                                                //設(shè)置定時(shí)初值
  91.         TF0 = 0;                                                                //清除TF0標(biāo)志
  92.         TR0 = 1;                                                                //定時(shí)器0開(kāi)始計(jì)時(shí)
  93. }

  94. void sys_init()                                                                //系統(tǒng)初始化函數(shù)
  95. {
  96.         P0M1=0x00;P0M0=0x00;
  97.         P1M1=0x00;P1M0=0x00;
  98.         P2M1=0x00;P2M0=0x00;
  99.         P3M1=0x00;P3M0=0x00;
  100.         P4M1=0x00;P4M0=0x00;
  101.         P5M0=0x00;P5M1=0x00;
  102.         
  103.         Timer0Init();                                                        //定時(shí)器0初始化
  104.         nRF24L01_IO_init();                                                //nRF24L01通信線電平初始化
  105.         nRF24L01_SetMode_Tx();                                        //nRF24L01發(fā)送模式初始化
  106.         EA=1;                                                                        //開(kāi)總中斷
  107.         ET0=1;                                                                        //開(kāi)定時(shí)器0中斷
  108.         EADC=1;                                                                        //開(kāi)ADC轉(zhuǎn)換中斷
  109.         
  110.         VCC_Voltage_Read();                                                //讀取電源電壓
  111. }

  112. void main()                                                                        //主函數(shù)
  113. {
  114.         sys_init();                                                                //系統(tǒng)初始化
  115.         while(1)                                                                //主函數(shù)大循環(huán)
  116.         {
  117.                 NTC_Voltage_Read();                                        //讀取NTC的分壓值(P15上的模擬電壓)
  118.                 NTC_R_Comp=100000*NTC_Voltage/(VCC_Voltage-NTC_Voltage);//計(jì)算待對(duì)比的NTC阻值,單位十倍歐姆
  119.                 NTC_Temperature=NTC_103_3435_Compare(NTC_R_Comp);//查表計(jì)算NTC對(duì)應(yīng)的溫度值
  120.                
  121.                 //無(wú)線發(fā)送
  122.                 if(NTC_Temperature>0)
  123.                 {
  124.                         Transmit_Buff[0]=1;//數(shù)據(jù)為正標(biāo)志
  125.                 }
  126.                 else
  127.                 {
  128.                         NTC_Temperature=(float)fabs((double)NTC_Temperature);                                        //取溫度絕對(duì)值
  129.                         Transmit_Buff[0]=0;//數(shù)據(jù)為負(fù)標(biāo)志
  130.                 }
  131.                         Transmit_Buff[1]=((unsigned int)NTC_Temperature)/100;                                        //溫度值百位
  132.                         Transmit_Buff[2]=((unsigned int)(NTC_Temperature)%100)/10;                                //溫度值十位
  133.                         Transmit_Buff[3]=((unsigned int)NTC_Temperature)%10;                                        //溫度值個(gè)位
  134.                         Transmit_Buff[4]=((unsigned long)(NTC_Temperature*10000)%10000)/1000;        //溫度值小數(shù)1位
  135.                         Transmit_Buff[5]=((unsigned long)(NTC_Temperature*10000)%1000)/100;                //溫度值小數(shù)2位
  136.                         Transmit_Buff[6]=((unsigned long)(NTC_Temperature*10000)%100)/10;                //溫度值小數(shù)3位
  137.                         Transmit_Buff[7]=((unsigned long)(NTC_Temperature*10000))%10;                        //溫度值小數(shù)4位
  138.                         Transmit_Buff[8]=((unsigned int)VCC_Voltage)/1000;                                                //電壓值千位
  139.                         Transmit_Buff[9]=((unsigned int)(VCC_Voltage)%1000)/100;                                //電壓值百位
  140.                         Transmit_Buff[10]=((unsigned int)(VCC_Voltage)%100)/10;                                        //電壓值十位
  141.                         Transmit_Buff[11]=((unsigned int)VCC_Voltage)%10;                                                //電壓值個(gè)位
  142.                         Transmit_Buff[12]=((unsigned long)(VCC_Voltage*100)%100)/10;                        //電壓值小數(shù)1位
  143.                         Transmit_Buff[13]=(unsigned long)(VCC_Voltage*100)%10;                                        //電壓值小數(shù)2位
  144.                
  145.                 nRF24L01_SendData(Transmit_Buff);        //使用nRF24L01發(fā)送溫度數(shù)據(jù)
  146.                
  147.                 if(Do_VCC_Voltage_Flash)
  148.                 {
  149.                         Do_VCC_Voltage_Flash=0;                        //條件動(dòng)作清零
  150.                         VCC_Voltage_Read();                                //讀取電源電壓
  151.                 }
  152.                
  153.                 delay(100000);                                                //周期循環(huán)延時(shí)
  154.         }
  155. }

  156. void T0() interrupt 1                                                //定時(shí)器0中斷服務(wù)函數(shù)
  157. {
  158.         T0_Cnt++;                                                                //周期增加
  159.         if(T0_Cnt==1000)                                                //定時(shí)2秒
  160.         {
  161.                 T0_Cnt=0;                                                        //清空計(jì)數(shù)器
  162.                 Do_VCC_Voltage_Flash=1;                                //條件動(dòng)作執(zhí)行
  163.         }
  164. }

  165. void ADC() interrupt 5                                                //AD中斷服務(wù)函數(shù)
  166. {
  167.         ADC_CONTR&=!0x10;                                                //清除ADC中斷標(biāo)志,例程
  168.         ADC_DATA=(ADC_RES<<2)|ADC_RESL;                        //10位ADC結(jié)果拼接
  169.         En_ADC_Value=1;                                                        //ADC轉(zhuǎn)換值有效標(biāo)志
  170. }
復(fù)制代碼
接收部分主函數(shù)
  1. #include"iostm8s103f2.h"
  2. #include"Init.c"        //系統(tǒng)初始化函數(shù)
  3. #include"nRF24L01.C"//提供nRF24L01驅(qū)動(dòng)

  4. //運(yùn)行數(shù)組
  5. unsigned char Display[8]={10,10,10,10,10,10,10,10};//用于顯示的每一位數(shù)值,對(duì)應(yīng)段選數(shù)組中的相應(yīng)位
  6. unsigned char duan[11]={0xeb,0x09,0xe5,0xad,0x0f,0xae,0xee,0x89,0xef,0xaf,0x04};//數(shù)碼管段選數(shù)組 數(shù)字0~9和符號(hào)"-"
  7. /*
  8. 段碼對(duì)應(yīng)表,僅適用本電路
  9. 8        4        2        1        8        4        2        1
  10. 7        6        5        4        3        2        1        0
  11. A        E        D        H        C        G        F        B

  12. 1        1        1        0        1        0        1        1        0
  13. 0        0        0        0        1        0        0        1        1
  14. 1        1        1        0        0        1        0        1        2
  15. 1        0        1        0        1        1        0        1        3

  16. 0        0        0        0        1        1        1        1        4
  17. 1        0        1        0        1        1        1        0        5
  18. 1        1        1        0        1        1        1        0        6
  19. 1        0        0        0        1        0        0        1        7

  20. 1        1        1        0        1        1        1        1        8
  21. 1        0        1        0        1        1        1        1        9
  22. 0        0        0        0        0        1        0        0        -

  23. */
  24. //運(yùn)行變量
  25. unsigned char pointpositionA=3;//溫度顯示的小數(shù)點(diǎn)位置,從0到3
  26. unsigned char pointpositionB=4;//電壓顯示的小數(shù)點(diǎn)位置,從4到7

  27. //運(yùn)行計(jì)數(shù)
  28. unsigned int TIM4_cnt=0;//TIM4定時(shí)器周期計(jì)數(shù)
  29. /************************************************************
  30. 名稱:基于NTC熱敏電阻和nRF24L01的無(wú)線溫度計(jì)(接收顯示部分)
  31. 平臺(tái):STM8S103F2P6,HSI:16MHz,CPUDIV:8
  32. 資源:Flash:4K RAM:1K
  33. 簡(jiǎn)介:測(cè)量部分使用NTC-MF52-103/3435熱敏電阻進(jìn)行溫度采集,
  34.         通過(guò)讀取單片機(jī)內(nèi)部BandGap電壓得到準(zhǔn)確的電源電壓和外部電壓,
  35.         使用查表方法得到對(duì)應(yīng)的最靠近的溫度值,處理并顯示。
  36.         無(wú)線部分采用2.4G載波的nRF24L01模塊進(jìn)行數(shù)據(jù)傳輸。

  37. 程序編寫(xiě):凌凈清河
  38. 硬件制作:凌凈欣羽
  39. 文稿排版:凌凈欣羽

  40. 日期:2019年2月25日
  41. 聲明:制作參考龍順宇《深入淺出STM8單片機(jī)入門、進(jìn)階與應(yīng)用實(shí)例》
  42. 所屬:新礦城學(xué)習(xí)基地#2019


  43. 編寫(xiě)中臨時(shí)記錄:
  44.         本程序欠缺段選數(shù)組,數(shù)碼管顯示函數(shù)
  45.         數(shù)碼管計(jì)劃使用138和雙595級(jí)聯(lián)的方式驅(qū)動(dòng)2個(gè)4位數(shù)碼管
  46.         一個(gè)顯示溫度,一個(gè)顯示采集部分的供電電壓
  47.         還有配套的數(shù)據(jù)處理語(yǔ)句待編寫(xiě)。

  48. ************************************************************/

  49. void delay(unsigned char i)                                                //延時(shí)函數(shù),調(diào)用此函數(shù)進(jìn)行一段時(shí)間的非精準(zhǔn)延時(shí)
  50. {
  51.         while(i--);
  52. }

  53. void SPIsendB(unsigned char dat)//給級(jí)聯(lián)的第一個(gè)595寫(xiě)字節(jié)
  54. {
  55.         unsigned char a;
  56.         unsigned int tmp=0;
  57.         tmp=dat<<8;
  58.         SN74HC595_SRCLK=0;
  59.         SN74HC595_RCLK=0;
  60.         for(a=0;a<16;a++)
  61.         {
  62.                 if(tmp&0x8000)
  63.                 {
  64.                         SN74HC595_SER=1;
  65.                 }
  66.                 else
  67.                 {
  68.                         SN74HC595_SER=0;
  69.                 }
  70.                 tmp<<=1;
  71.                 SN74HC595_SRCLK=1;
  72.                 asm("nop");
  73.                 asm("nop");
  74.                 asm("nop");
  75.                 asm("nop");
  76.                 SN74HC595_SRCLK=0;
  77.         }
  78.         SN74HC595_RCLK=1;
  79.         asm("nop");
  80.         asm("nop");
  81.         SN74HC595_RCLK=0;
  82. }

  83. void SPIsendA(unsigned char dat)//給級(jí)聯(lián)的第二個(gè)595寫(xiě)字節(jié)
  84. {
  85.         unsigned char a;
  86.         unsigned int tmp=0;
  87.         tmp=tmp|dat;
  88.         SN74HC595_SRCLK=0;
  89.         SN74HC595_RCLK=0;
  90.         for(a=0;a<16;a++)
  91.         {
  92.                 if(tmp&0x8000)
  93.                 {
  94.                         SN74HC595_SER=1;
  95.                 }
  96.                 else
  97.                 {
  98.                         SN74HC595_SER=0;
  99.                 }
  100.                 tmp<<=1;
  101.                 SN74HC595_SRCLK=1;
  102.                 asm("nop");
  103.                 asm("nop");
  104.                 asm("nop");
  105.                 asm("nop");
  106.                 SN74HC595_SRCLK=0;
  107.         }
  108.         SN74HC595_RCLK=1;
  109.         asm("nop");
  110.         asm("nop");
  111.         SN74HC595_RCLK=0;
  112. }

  113. void smgNum(unsigned char num)//位選函數(shù),配合顯示函數(shù)使用,選擇138譯碼輸出的位
  114. {
  115.         switch(num)
  116.         {
  117.                 case 0:SN74HC138_S3=1;SN74HC138_S2=1;SN74HC138_S1=1;break;
  118.                 case 1:SN74HC138_S3=1;SN74HC138_S2=1;SN74HC138_S1=0;break;
  119.                 case 2:SN74HC138_S3=1;SN74HC138_S2=0;SN74HC138_S1=1;break;
  120.                 case 3:SN74HC138_S3=1;SN74HC138_S2=0;SN74HC138_S1=0;break;
  121.                 case 4:SN74HC138_S3=0;SN74HC138_S2=1;SN74HC138_S1=1;break;
  122.                 case 5:SN74HC138_S3=0;SN74HC138_S2=1;SN74HC138_S1=0;break;
  123.                 case 6:SN74HC138_S3=0;SN74HC138_S2=0;SN74HC138_S1=1;break;
  124.                 case 7:SN74HC138_S3=0;SN74HC138_S2=0;SN74HC138_S1=0;break;
  125.                 default:SN74HC138_S3=0;SN74HC138_S2=0;SN74HC138_S1=0;break;
  126.         }
  127. }

  128. /*
  129. 編者按:
  130. 在設(shè)計(jì)連接時(shí),用于顯示溫度的74HC595的SN74HC595_SER端
  131. 接在用于顯示電壓的595 Q7'端,兩個(gè)74HC595級(jí)聯(lián),
  132. 我也不知道當(dāng)時(shí)怎么想的,選擇如此焊接,
  133. 但是既然電路這么做出來(lái)了,程序只好照著編了。
  134. */
  135. void smgdisplay()
  136. {
  137.         unsigned char i;
  138.         for(i=0;i<4;i++)//溫度數(shù)據(jù)顯示
  139.         {
  140.                 if(pointpositionA==i)
  141.                 {
  142.                         SPIsendA((duan[Display[i]])|0x10);
  143.                 }
  144.                 else
  145.                 {
  146.                         SPIsendA(duan[Display[i]]);
  147.                 }
  148.                 smgNum(i);//選擇相應(yīng)位
  149.                 delay(100);
  150.                 SPIsendA(0x00);//消隱
  151.                 delay(50);
  152.         }
  153.         for(i=4;i<8;i++)//電壓數(shù)據(jù)顯示
  154.         {
  155.                 if(pointpositionB==i)
  156.                 {
  157.                         SPIsendB((duan[Display[i]])|0x10);
  158.                 }
  159.                 else
  160.                 {
  161.                         SPIsendB(duan[Display[i]]);
  162.                 }
  163.                 smgNum(i);//選擇相應(yīng)位
  164.                 delay(100);
  165.                 SPIsendB(0x00);//消隱
  166.                 delay(50);
  167.         }
  168. }

  169. void sys_init()//系統(tǒng)初始化
  170. {
  171.         asm("sim");
  172.         CLK_init();                                                                //HSI初始化,更改分頻系數(shù)為1
  173.         TIM4_init();                                                        //TIM4初始化,定時(shí)1ms
  174.         asm("rim");
  175.         SN74HC595_IO_Define();                                        //SN74HC595接線定義
  176.         SN74HC138_IO_Define();                                        //SN74HC138接線定義
  177.         nRF24L01_IO_Define();                                        //nRF24L01接線定義
  178.         nRF24L01_IO_init();                                                //nRF24L01通信線初始化
  179.         nRF24L01_SetMode_Rx();                                        //nRF24L01功能初始化:接收模式
  180. }

  181. void main(void)
  182. {
  183.         sys_init();                                                                //系統(tǒng)初始化
  184.         while(1)
  185.         {
  186.                 if(nRF24L01_ReceiveData())                        //如果接收到數(shù)據(jù)
  187.                 {
  188.                         TIM4_cnt=0;
  189.                         if(Received_Buff[0])//溫度為正
  190.                         {
  191.                                 if(Received_Buff[1]==0)//如果百位為0
  192.                                 {
  193.                                         if(Received_Buff[2]==0)//如果十位為0
  194.                                         {
  195.                                                 Display[0]=Received_Buff[3];
  196.                                                 Display[1]=Received_Buff[4];
  197.                                                 Display[2]=Received_Buff[5];
  198.                                                 Display[3]=Received_Buff[6];
  199.                                                 pointpositionA=0;
  200.                                         }
  201.                                         else
  202.                                         {
  203.                                                 Display[0]=Received_Buff[2];
  204.                                                 Display[1]=Received_Buff[3];
  205.                                                 Display[2]=Received_Buff[4];
  206.                                                 Display[3]=Received_Buff[5];
  207.                                                 pointpositionA=1;
  208.                                         }
  209.                                 }
  210.                                 else
  211.                                 {
  212.                                         Display[0]=Received_Buff[1];
  213.                                         Display[1]=Received_Buff[2];
  214.                                         Display[2]=Received_Buff[3];
  215.                                         Display[3]=Received_Buff[4];
  216.                                         pointpositionA=2;
  217.                                 }
  218.                         }
  219.                         else
  220.                         {
  221.                                 Display[0]=11;//負(fù)號(hào)
  222.                                 if(Received_Buff[1]==0)//如果百位為0
  223.                                 {
  224.                                         if(Received_Buff[2]==0)//如果十位為0
  225.                                         {
  226.                                                 Display[1]=Received_Buff[3];
  227.                                                 Display[2]=Received_Buff[4];
  228.                                                 Display[3]=Received_Buff[5];
  229.                                                 pointpositionA=1;
  230.                                         }
  231.                                         else
  232.                                         {
  233.                                                 Display[1]=Received_Buff[2];
  234.                                                 Display[2]=Received_Buff[3];
  235.                                                 Display[3]=Received_Buff[4];
  236.                                                 pointpositionA=2;
  237.                                         }
  238.                                 }
  239.                                 else
  240.                                 {
  241.                                         Display[1]=Received_Buff[1];
  242.                                         Display[2]=Received_Buff[2];
  243.                                         Display[3]=Received_Buff[3];
  244.                                         pointpositionA=3;
  245.                                 }
  246.                         }
  247.                         Display[4]=Received_Buff[8];
  248.                         Display[5]=Received_Buff[9];
  249.                         Display[6]=Received_Buff[10];
  250.                         Display[7]=Received_Buff[11];
  251.                 }
  252.                 smgdisplay();
  253.         }
  254. }

  255. #pragma vector=0x19//定時(shí)器4中斷服務(wù)函數(shù)
  256. __interrupt void TIM4_UPD_OVF_IRQHandler(void)
  257. {
  258.         TIM4_cnt++;
  259.         TIM4_SR=0;
  260.         if(TIM4_cnt==500)
  261.         {
  262.                 unsigned char i;
  263.                 TIM4_cnt=0;
  264.                 for(i=0;i<8;i++)
  265.                 {
  266.                         Display[i]=10;
  267.                 }
  268.         }
  269. }
復(fù)制代碼

歡迎進(jìn)群:873434536,雖人數(shù)暫時(shí)較少,但群內(nèi)氛圍很好,有任何關(guān)于51學(xué)習(xí)中的問(wèn)題,來(lái)一起討論吧~!

程序源碼:
基于NTC熱敏電阻和nRF24L01的無(wú)線溫度計(jì) 發(fā)布版 凌凈清河.zip (409.08 KB, 下載次數(shù): 258)

請(qǐng)注意,為了方便黑幣較少的人也能夠下載附件,回復(fù)本帖,任何時(shí)候我看到,均會(huì)給出最高評(píng)分作為黑布補(bǔ)貼!



作者: s360221867    時(shí)間: 2019-3-12 17:08
好,不錯(cuò) 可以下載下來(lái)看看  努力學(xué)習(xí)
作者: 專業(yè)頂樓    時(shí)間: 2019-3-13 19:05
代碼很不錯(cuò),非常值得借鑒
作者: jiao1072741317    時(shí)間: 2019-3-13 22:44
感覺(jué)好復(fù)雜啊
作者: lon7085    時(shí)間: 2019-3-14 08:52
不錯(cuò)!下載下來(lái)努力學(xué)習(xí)。樓主照顧黑幣較少的人讓其能夠下載的仁心更曷我們多加學(xué)習(xí)的典范。
作者: YJGG    時(shí)間: 2019-3-14 09:05
感謝分享!!!!!
作者: lvlv99    時(shí)間: 2019-3-14 13:55
樓主無(wú)私,感謝分享
作者: 文哥2019    時(shí)間: 2019-3-14 15:39
非常感謝,下載學(xué)習(xí)了。
作者: liuwang2051    時(shí)間: 2019-3-29 21:37
謝謝分享!!!
作者: happyli927    時(shí)間: 2019-4-2 11:25
好,不錯(cuò) 可以下載下來(lái)看看  努力學(xué)習(xí)
作者: 快樂(lè)眼淚    時(shí)間: 2019-4-2 20:03
非常感謝!收藏了
作者: zxianyu    時(shí)間: 2019-4-2 21:54
非常感謝,NTC接地我還不會(huì),可以參考了,謝謝.
作者: moore麥    時(shí)間: 2019-4-3 09:13
果斷收藏
作者: sgnah    時(shí)間: 2019-4-3 09:30
果斷收藏
作者: pophoney2    時(shí)間: 2019-4-30 01:04
一直想搞個(gè)無(wú)線來(lái)試試,萬(wàn)事開(kāi)頭難,希望有所幫助···········
作者: zyt心有所寄    時(shí)間: 2019-6-2 14:00
謝謝分享,最近也想弄一個(gè)來(lái)玩玩,謝謝啦
作者: 太陽(yáng)黑子1    時(shí)間: 2019-6-3 13:28
真的非常感謝分享,值得學(xué)習(xí)!
作者: double7    時(shí)間: 2019-6-17 20:36
感謝樓主

作者: ZAMDNSNJD    時(shí)間: 2019-6-18 16:22
這個(gè)寫(xiě)得非常好
作者: wacard    時(shí)間: 2019-7-28 17:31
師傅的例程很有參考價(jià)值,謝謝。
作者: 江西奉新    時(shí)間: 2020-2-14 11:06
不錯(cuò),謝謝分享
作者: LGH850    時(shí)間: 2020-2-21 23:29
先收藏著,后面再慢慢研究!
作者: joe_2019    時(shí)間: 2020-2-22 21:49
思路清晰,非常的棒
作者: liuxin345678    時(shí)間: 2020-3-18 08:28
代碼結(jié)構(gòu)清晰,層次分明,膜拜大牛
作者: liuxin345678    時(shí)間: 2020-3-18 08:29
思路清晰,代碼結(jié)構(gòu)好
作者: 中恒電子asus    時(shí)間: 2020-4-5 12:07
必須贊一個(gè)!
作者: dzltlgq    時(shí)間: 2020-10-21 14:15
如果可以控制自動(dòng)加熱功能最好
作者: lsk666233    時(shí)間: 2021-3-15 20:40
這個(gè)是把全部代碼都發(fā)出來(lái)了嗎,還需要下載源碼嗎
作者: lsk666233    時(shí)間: 2021-3-16 20:29
我看接收部分有兩個(gè)電阻,請(qǐng)問(wèn)還記得這兩個(gè)電阻的阻值嗎
作者: lsk666233    時(shí)間: 2021-3-16 20:31
那個(gè)接收部分我看到還有兩個(gè)電阻,請(qǐng)問(wèn)還記得是接在哪的嗎,可以的話阻值是多少呢
作者: a185980800    時(shí)間: 2021-4-4 21:38
有用的東西,現(xiàn)在看還有點(diǎn)難。
作者: 道洲    時(shí)間: 2021-4-16 10:36

代碼很不錯(cuò),非常值得借鑒
作者: 黎虬雪    時(shí)間: 2021-5-22 17:29
很不錯(cuò)的資料,愛(ài)了愛(ài)了。
作者: htc369    時(shí)間: 2021-8-31 22:07
不錯(cuò)啊!下載下來(lái)努力學(xué)習(xí)。
作者: fj51hei    時(shí)間: 2021-9-1 11:26
代碼很不錯(cuò)層次分明,膜拜大牛
作者: 新新。    時(shí)間: 2022-4-18 23:38
代碼很不錯(cuò),非常值得借鑒
作者: xmcolong    時(shí)間: 2023-3-27 04:42
溫度采樣部分處理的不賴,學(xué)習(xí)啦!




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1