久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2149|回復(fù): 1
收起左側(cè)

單片機(jī)智能水杯程序

[復(fù)制鏈接]
ID:553731 發(fā)表于 2019-8-27 08:48 | 顯示全部樓層 |閱讀模式
智能水杯

  1. /*連線說(shuō)明:  藍(lán)牙: RXD--P43
  2. 液晶 RXD--P31
  3. DHT11   DATA--P20
  4. */


  5. /*************** 用戶定義參數(shù) *****************************/

  6. #define MAIN_Fosc        11059200L        //define main clock
  7. #define Baudrate1        9600                //define the baudrate, 如果使用BRT做波特率發(fā)生器,則波特率跟串口2一樣
  8.                                                                 //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
  9. #define Baudrate2        9600                //define the baudrate2,
  10.                                                                         //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
  11. #define        BUF_LENTH        1                //定義串口接收緩沖長(zhǎng)度
  12. /**********************************************************/


  13. #include        <STC12C5A60S2.h>
  14. #include    <DS18B20.h>
  15. #define U8  unsigned char
  16. #define U16 unsigned int

  17. unsigned char         uart1_wr;                //寫(xiě)指針
  18. unsigned char         uart1_rd;                //讀指針
  19. unsigned char         xdata RX1_Buffer[BUF_LENTH];
  20. bit                B_TI,flag;

  21. unsigned char         uart2_wr;                //寫(xiě)指針
  22. unsigned char         uart2_rd;                //讀指針
  23. unsigned char         xdata RX2_Buffer[BUF_LENTH];
  24. bit                 B_TI2;

  25. sbit JDQ=P3^7;

  26. bit  sec;
  27. U8   state,cnt;
  28. int  TempThreshold,TH;

  29. /****************** 編譯器自動(dòng)生成,用戶請(qǐng)勿修改 ************************************/

  30. #define T1_TimerReload        (256 - MAIN_Fosc / 192 / Baudrate1)                        //Calculate the timer1 reload value        at 12T mode
  31. #define BRT_Reload                (256 - MAIN_Fosc / 192 / Baudrate2)                //Calculate BRT reload value

  32. #define        TimeOut1                (28800 / (unsigned long)Baudrate1 + 2)
  33. #define        TimeOut2                (28800 / (unsigned long)Baudrate2 + 2)

  34. #define        TI2                                (S2CON & 0x02) != 0
  35. #define        RI2                                (S2CON & 0x01) != 0
  36. #define        CLR_TI2()                 S2CON &= ~0x02
  37. #define        CLR_RI2()                 S2CON &= ~0x01

  38. /******************** 本地函數(shù)聲明 ***************/
  39. void uart1_init(void);
  40. void uart2_init(void);
  41. void UART1_TxByte(unsigned char dat);
  42. void UART2_TxByte(unsigned char dat);
  43. void PrintString1(unsigned char *puts);
  44. void PrintString2(unsigned char *puts);

  45. /**********************************************************/
  46. //液晶相關(guān)函數(shù),利用串口2完成數(shù)據(jù)收發(fā)功能

  47. void UART1_TxByte(unsigned char dat)
  48. {
  49.         B_TI = 0;
  50.         SBUF = dat;
  51.         while(!B_TI);
  52.         B_TI = 0;
  53. }

  54. void UART2_TxByte(unsigned char dat)
  55. {
  56.         B_TI2 = 0;
  57.         S2BUF = dat;
  58.         while(!B_TI2);
  59.         B_TI2 = 0;
  60. }

  61. void PrintString1(unsigned char *puts)                //發(fā)送一串字符串
  62. {
  63.     for (; *puts != 0;        puts++)  UART1_TxByte(*puts);         //遇到停止符0結(jié)束
  64. }

  65. void PrintString2(unsigned char *puts)                //發(fā)送一串字符串
  66. {
  67.     for (; *puts != 0;        puts++)  UART2_TxByte(*puts);         //遇到停止符0結(jié)束
  68. }

  69. void uart1_init(void)
  70. {
  71.         PCON |= 0x80;                //UART0 Double Rate Enable
  72.         SCON = 0x50;                //UART0 set as 10bit , UART0 RX enable
  73.         TMOD &= ~(1<<6);                //Timer1 Set as Timer, 12T
  74.         TMOD = (TMOD & ~0x30) | 0x20;        //Timer1 set as 8 bits auto relaod
  75.         TH1 = T1_TimerReload;                //Load the timer
  76.         TR1  = 1;
  77.         ES  = 1;
  78.         EA = 1;
  79. }

  80. /**********************************************/
  81. void UART0_RCV (void) interrupt 4
  82. {
  83.         if(RI)
  84.         {
  85.                 RI = 0;
  86.                 RX1_Buffer[uart1_wr] = SBUF;
  87.                 if(++uart1_wr >= BUF_LENTH)        uart1_wr = 0;
  88.         }

  89.         if(TI)
  90.         {
  91.                 TI = 0;
  92.                 B_TI = 1;
  93.         }
  94. }


  95. /**********************************************/
  96. void uart2_init(void)
  97. {
  98.         AUXR |=  (1 << 3);                //串口2波特率加倍
  99.         S2CON  = (S2CON & 0x3f) | (1<<6);        //串口2模式1,8位UART,(2^S2SMOD / 32) * BRT溢出率
  100.         S2CON |= 1 << 4;                //允許串2接收

  101.         AUXR |=  1 << 4;        //baudrate use BRT
  102.         BRT = BRT_Reload;

  103.         IE2 |=  1;                        //允許串口2中斷
  104. }

  105. /**********************************************/
  106. void UART2_RCV (void) interrupt 8
  107. {
  108.         if(RI2)
  109.         {
  110.                 CLR_RI2();
  111.                 RX2_Buffer[uart2_wr] = S2BUF;
  112.                 flag=1;
  113.                 if(++uart2_wr >= BUF_LENTH)        uart2_wr = 0;
  114.         }

  115.         if(TI2)
  116.         {
  117.                 CLR_TI2();
  118.                 B_TI2 = 1;
  119.         }
  120. }

  121. /**********************************************************/
  122. void InitT0()
  123. {
  124.    TMOD|=0X01;
  125.    IE|=0X82;
  126.    TR0=1;
  127. }

  128. void T0Ser() interrupt 1
  129. {
  130.    if(++cnt==16)
  131.    {
  132.       cnt=0;
  133.           sec=1;
  134.    }
  135. }

  136. void Uart2Enter()
  137. {
  138.    UART2_TxByte(0x0d);
  139.    UART2_TxByte(0x0a);
  140. }

  141. void Uart1Enter()
  142. {
  143.    UART1_TxByte(0x0d);
  144.    UART1_TxByte(0x0a);
  145. }

  146. void dis_LanYa(void)
  147. {
  148.         char  temp[]="TH=25.0C";  

  149.         temp[3]=TempThreshold/100+48;
  150.     temp[4]=TempThreshold%100/10+48;       
  151.     temp[6]=TempThreshold%10+48;

  152.         UART2_TxByte('T');
  153.         UART2_TxByte('=');
  154.         UART2_TxByte(TH%1000/100+0x30);
  155.         UART2_TxByte(TH%100/10+0x30);
  156.         UART2_TxByte('.');
  157.         UART2_TxByte(TH%10+0x30);
  158.         PrintString2("C");
  159.         Uart2Enter();
  160.           
  161.     PrintString2(temp);
  162.         Uart2Enter();
  163.         Uart2Enter();   
  164. }

  165. void dis_LanYa2(void)
  166. {
  167.         char  temp[]="TH=25.0C";  

  168.         temp[3]=TempThreshold/100+48;
  169.     temp[4]=TempThreshold%100/10+48;       
  170.     temp[6]=TempThreshold%10+48;

  171.         UART1_TxByte('T');
  172.         UART1_TxByte('=');
  173.         UART1_TxByte(TH%1000/100+0x30);
  174.         UART1_TxByte(TH%100/10+0x30);
  175.         UART1_TxByte('.');
  176.         UART1_TxByte(TH%10+0x30);
  177.         PrintString1("C");
  178.     PrintString1(temp);
  179.         Uart1Enter();
  180.         Uart1Enter();  

  181. }

  182. void main(void)
  183. {
  184.         unsigned int  oldT,oldTh;

  185.     InitT0();

  186.         uart1_rd = 0;
  187.         uart1_wr = 0;
  188.         uart2_rd = 0;
  189.         uart2_wr = 0;

  190. //        AUXR |=  0x01;                //串口1使用獨(dú)立波特率發(fā)生器, 波特率跟串口2一樣
  191.         AUXR1 |= (1<<4);        //將UART2從P1口切換到 RXD2--P1.2切換到P4.2   TXD2---P1.3切換到P4.3
  192.        
  193.         uart1_init();
  194.         uart2_init();
  195.        
  196.         state=0; //==0 正常模式,==1設(shè)置模式                 
  197.           TempThreshold=400;
  198.                
  199.         P3M1&=0X7F;        //強(qiáng)推挽模式,推動(dòng)繼電器
  200.         P3M0|=0X80;

  201.         PrintString1("Hello");

  202.         while(1)
  203.         {
  204.            if(flag) //串行口2(藍(lán)牙)接收到數(shù)據(jù) A(溫度增加)  B(溫度減少)
  205.            {
  206.               flag=0;

  207.                      if(RX2_Buffer[0]=='A' || RX2_Buffer[0]=='a')
  208.                   {
  209.                     TempThreshold+=10; //目標(biāo)溫度++               
  210.                         if(TempThreshold>800)
  211.                         {
  212.                            PrintString2("Warning,you can't set the value greater than 80C");
  213.                            Uart2Enter();
  214.                            TempThreshold=800;
  215.                         }
  216.                   }
  217.           else if(RX2_Buffer[0]=='B' || RX2_Buffer[0]=='b')                 
  218.                   {
  219.                     TempThreshold-=10; //目標(biāo)溫度--
  220.                         if(TempThreshold<40)
  221.                         {
  222.                            PrintString2("Warning,you can't set the value less than 4C");
  223.                            Uart2Enter();
  224.                            TempThreshold=40;
  225.                         }                                                                            
  226.                   }                  
  227.            }

  228.            if(sec)
  229.            {
  230.                         sec=0;
  231.                         TH=Get_temp();
  232.                        
  233.                         if((oldT!=TH)||(TempThreshold!=oldTh))//如果溫度有變化或者設(shè)置的閾值有變化,才更新顯示
  234.                         {
  235.                            oldT=TH;
  236.                        oldTh=TempThreshold;

  237.                            dis_LanYa();
  238.                            dis_LanYa2();
  239.                             
  240.                            if(TH>=TempThreshold-1)  //還差1度就停止加熱
  241.                                 {
  242.                                   PrintString2("Stop heat");
  243.                                   Uart2Enter();
  244.                                   JDQ=0;//關(guān)閉加熱裝置
  245.                                 }
  246.                                 else if(TH<TempThreshold-1) //相差1攝氏度再開(kāi)啟加熱
  247.                                 {                   
  248.                                     JDQ=1;// 打開(kāi)加熱裝置
  249.                                         PrintString2("Heating");
  250.                                     Uart2Enter();                                   
  251.                                 }       
  252.                         }
  253.                                                                  
  254.            }
  255.         }
  256. }
復(fù)制代碼


智能水杯.7z

29.96 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-8-27 15:35 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线观 | www.日韩系列 | 欧美精品乱码久久久久久按摩 | 五月激情婷婷在线 | 亚洲成人激情在线观看 | 伊人久久在线观看 | 久久久婷婷 | 欧美一区二区小视频 | 国产色网站 | 精品一区二区三区91 | 99re在线| 欧美1区2区| 日本不卡免费新一二三区 | 国产精品久久亚洲 | 香蕉一区二区 | 天天弄天天操 | 国产成人免费视频网站高清观看视频 | 国产精品一区二区三区在线 | 国产精品毛片无码 | 国产精品久久久亚洲 | 99精品视频在线 | 日韩中文字幕在线 | 欧美在线一区二区三区 | 看黄在线| 一级黄色毛片a | 午夜精品久久久久久久久久久久久 | 国产aⅴ| 日本精品一区二区三区在线观看视频 | 国产精品欧美一区喷水 | 亚洲国产精品久久久久婷婷老年 | 国产精品久久久久久久久久久久 | 五月综合激情在线 | 日韩黄| 7777在线| 精品成人av | 嫩草网| 你懂的免费在线 | 国产精品一区二区av | 亚洲成人精品一区 | 日本天堂视频 | 国产成人精品一区二区 |