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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1746|回復: 1
收起左側

單片機檢測溫度,光照,測距,串口上傳程序

[復制鏈接]
ID:222500 發表于 2019-8-3 11:48 | 顯示全部樓層 |閱讀模式
  1. /*------------------------------------------------
  2.                 包含頭文件
  3. ------------------------------------------------*/
  4. #include<reg52.h>
  5. #include"uart.h"
  6. #include"lcd.h"
  7. #include"ds1302.h"
  8. #include"18b20.h"
  9. #include"xpt2046.h"
  10. #include"hcsr04.h"
  11. #include"delay.h"
  12. #include<stdio.h>
  13. #include"hcsr04.h"
  14. #include"key.h"

  15. char CMER [10] = "厘米--";
  16. char TIER[10] = "攝氏度--";
  17. char TIMER[6] = "時間\n";
  18. char LIGHTH[10] = "光照強度--";






  19. bit      flag =0;
  20. unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.',':','-','M','S'};


  21. void UsartConfiguration()
  22. {
  23.         SCON=0X50;                        //設置為工作方式1
  24.         TMOD=0X20;                        //設置計數器工作方式2
  25.         PCON=0X80;                        //波特率加倍
  26.         TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
  27.         TL1=0XF3;
  28. //        ES=1;                                                //打開接收中斷
  29. //        EA=1;                                                //打開總中斷
  30.         TR1=1;                                        //打開計數器
  31. }


  32. void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  33.   {
  34.     flag=1;                                                         //中斷溢出標志
  35. }



  36. /*------------------------------------------------
  37.                    S級延時
  38. ------------------------------------------------*/
  39. void DelayS(unsigned char u)
  40. {
  41. while(u--)
  42.       {
  43.           DelayMs(250);
  44.           DelayMs(250);
  45.           DelayMs(250);
  46.           DelayMs(250);
  47.           }
  48. }

  49. /*------------------------------------------------
  50.                    主函數
  51. ------------------------------------------------*/
  52. main()
  53. {
  54.    unsigned char DisNum = 0; //顯示用指針                                 
  55.    unsigned int  time=0;
  56.    unsigned long S=0;
  57.    unsigned char i, disbuff[2]           ={0,0,};
  58.   unsigned char disp[3];
  59.   unsigned char datas[] = {0, 0, 0, 0};
  60.   int temp,light;                 //溫度值
  61.    float tp;


  62. Int0Configuration();
  63. InitUART ();     //初始化串口
  64. LCD_Init();      //初始化LCD1602
  65. Ds1302Init();
  66. DelayMs(30);     //穩定
  67. zhongduan()        ;
  68. UsartConfiguration();
  69. LCD_Write_String(0,0,"Welcome to me!");//液晶顯示測試
  70. LCD_Write_String(0,1,"tengjianhao");
  71. DelayS(2);
  72. LCD_Clear();
  73. while(1)
  74.      {         
  75.              key();
  76.                  LCD_Write_String(0,0,"Time:");//液晶顯示測試
  77.                  LCD_Write_Com(0x85);
  78.                  LCD_Write_Data('0'+TIME[2]/16) ;
  79.                  LCD_Write_Data('0'+(TIME[2]&0x0f));
  80.                  SBUF = '0'+TIME[2]/16;//將接收到的數據放入到發送寄存器
  81.           while (!TI);                                 //等待發送數據完成
  82.               TI = 0;
  83.                   SBUF = '1'+TIME[2]/16;//將接收到的數據放入到發送寄存器
  84.           while (!TI);                                 //等待發送數據完成
  85.               TI = 0;
  86.                    SBUF = '.';//將接收到的數據放入到發送寄存器
  87.           while (!TI);                                 //等待發送數據完成
  88.               TI = 0;
  89.                  LCD_Write_Data('-');
  90.                  LCD_Write_Data('0'+TIME[1]/16) ;
  91.                  LCD_Write_Data('0'+(TIME[1]&0x0f));
  92.                  SBUF = '0'+TIME[1]/16;//將接收到的數據放入到發送寄存器
  93.           while (!TI);                                 //等待發送數據完成
  94.               TI = 0;
  95.                   SBUF = '1'+TIME[1]/16;//將接收到的數據放入到發送寄存器
  96.           while (!TI);                                 //等待發送數據完成
  97.               TI = 0;
  98.                    SBUF = '.';//將接收到的數據放入到發送寄存器
  99.           while (!TI);                                 //等待發送數據完成
  100.               TI = 0;
  101.                  LCD_Write_Data('-');
  102.                  LCD_Write_Data('0'+TIME[0]/16) ;
  103.                  LCD_Write_Data('0'+(TIME[0]&0x0f));
  104.                  SBUF = '0'+TIME[0]/16;//將接收到的數據放入到發送寄存器
  105.           while (!TI);                                 //等待發送數據完成
  106.               TI = 0;
  107.                   SBUF = '1'+TIME[0]/16;//將接收到的數據放入到發送寄存器
  108.           while (!TI);                                 //等待發送數據完成
  109.               TI = 0;
  110.          for(i=0; i<8; i++)
  111.                {
  112.                       SBUF = TIMER[i];//將接收到的數據放入到發送寄存器
  113.                        while (!TI);                                 //等待發送數據完成
  114.                     TI = 0;
  115.                  }
  116.                  
  117.                  

  118.                 LCD_Write_String(0,1,"T:");
  119.                  temp=ReadTemperature();//讀取溫度
  120.          DelayS(1);
  121.          temp=ReadTemperature();
  122.                  tp=temp;
  123.                  temp=tp*0.0625*100+0.5;
  124.              datas[0] = temp % 10000 / 1000;
  125.              datas[1] = temp % 1000 / 100;
  126.                  LCD_Write_Com(0x80+0x42);
  127.                  LCD_Write_Data('0'+datas[0])  ;
  128.                  LCD_Write_Data('0'+datas[0]&0x0f)  ;
  129.                 SBUF = '0'+datas[0];//將接收到的數據放入到發送寄存器
  130.           while (!TI);                                 //等待發送數據完成
  131.               TI = 0;
  132.                  LCD_Write_Com(0x80+0x43);
  133.                  LCD_Write_Data('0'+datas[1]);
  134.                  LCD_Write_Data('0'+datas[1]&0x0f) ;
  135.                  SBUF = '0'+datas[1];//將接收到的數據放入到發送寄存器
  136.           while (!TI);                                 //等待發送數據完成
  137.               TI = 0;
  138.                   for(i=0; i<10; i++)
  139.                {
  140.                       SBUF = TIER[i];//將接收到的數據放入到發送寄存器
  141.                        while (!TI);                                 //等待發送數據完成
  142.                     TI = 0;
  143.                  }
  144.                  LCD_Write_Com(0x80+0x44);
  145.                  LCD_Write_Data('C') ;


  146.                  LCD_Write_String(6,1,"L:");
  147.                  light = Read_AD_Data(0xA4)/10;
  148.              disp[0]=light%1000/100;//百位
  149.              disp[1]=light%1000%100/10;//個位
  150.              disp[2]=light%1000%100%10;
  151.                  LCD_Write_Com(0x80+0x48);
  152.                  LCD_Write_Data('0'+disp[1])  ;
  153.                  LCD_Write_Data('0'+disp[1]&0x0f)  ;
  154.                  SBUF = '0'+disp[1];//將接收到的數據放入到發送寄存器
  155.           while (!TI);                                 //等待發送數據完成
  156.               TI = 0;
  157.                  LCD_Write_Com(0x80+0x49);
  158.                  LCD_Write_Data('0'+disp[2])  ;
  159.                  LCD_Write_Data('0'+disp[2]&0x0f)  ;
  160.                  SBUF = '0'+disp[2];//將接收到的數據放入到發送寄存器
  161.           while (!TI);                                 //等待發送數據完成
  162.               TI = 0;
  163.                    for(i=0; i<10; i++)
  164.                {
  165.                       SBUF = LIGHTH[i];//將接收到的數據放入到發送寄存器
  166.                        while (!TI);                                 //等待發送數據完成
  167.                     TI = 0;
  168.                  }
  169.                  LCD_Write_Com(0x80+0x4A);
  170.                  LCD_Write_Data('%') ;
  171.                


  172.                  LCD_Write_String(12,1,"S:");
  173.                  chaosheng() ;
  174.              time=TH0*256+TL0;
  175.              TH0=0;
  176.              TL0=0;
  177.              S=(time*1.7)/1000;     //算出來是CM
  178.              if((S>=100)||flag==1) //超出測量范圍顯示“-”
  179.              {         
  180.                flag=0;
  181.                SBUF='0';//將接收到的數據放入到發送寄存器
  182.                while(!TI);                                 //等待發送數據完成
  183.                TI=0;
  184.                    SBUF='0';//將接收到的數據放入到發送寄存器
  185.                while(!TI);                                 //等待發送數據完成
  186.                TI=0;
  187.                          for(i=0; i<10; i++)
  188.                {
  189.                       SBUF = CMER [i];//將接收到的數據放入到發送寄存器
  190.                        while (!TI);                                 //等待發送數據完成
  191.                     TI = 0;
  192.                  }
  193.                    LCD_Write_Com(0x80+0x4E);
  194.                    LCD_Write_Data(ASCII[12]) ;
  195.                    LCD_Write_Com(0x80+0x4F);
  196.                    LCD_Write_Data(ASCII[12]) ;        

  197.               }
  198.               else
  199.               {
  200.          
  201.               disbuff[0]=S%1000%100/10;
  202.               SBUF = '0'+disbuff[0];//將接收到的數據放入到發送寄存器
  203.           while (!TI);                                 //等待發送數據完成
  204.               TI = 0;
  205.               disbuff[1]=S%1000%10 %10;
  206.               SBUF = '0'+disbuff[1];//將接收到的數據放入到發送寄存器
  207.               while (!TI);                                 //等待發送數據完成
  208.               TI = 0;
  209.               for(i=0; i<10; i++)
  210.                {
  211.                       SBUF = CMER [i];//將接收到的數據放入到發送寄存器
  212.                        while (!TI);                                 //等待發送數據完成
  213.                     TI = 0;
  214.                  }
  215.                    LCD_Write_Com(0x80+0x4E);
  216.                    LCD_Write_Data(ASCII[disbuff[0]]) ;
  217.                    LCD_Write_Com(0x80+0x4F);
  218.                    LCD_Write_Data(ASCII[disbuff[1]]);
  219.                }

  220. }
  221. }
復制代碼

多功能測量(功能).rar

107.86 KB, 下載次數: 13, 下載積分: 黑幣 -5

回復

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕视频在线观看 | 日韩乱码在线 | 亚洲天堂色 | 国产精品精品视频一区二区三区 | 欧美1区 | 国产精品久久久久久238 | 亚洲成人一级 | 91成人免费电影 | 国产精品乱码一区二区三区 | 黄网站涩免费蜜桃网站 | 日韩一级免费大片 | 欧美高清hd | 亚洲国产精品人人爽夜夜爽 | 亚洲一区二区久久 | 色综合天天天天做夜夜夜夜做 | 毛片区 | 日韩精品福利 | 91视频免费观看 | 中文字幕第九页 | 精品久久久久久久 | 精品成人在线观看 | 亚洲精品www久久久久久广东 | 欧美国产日韩在线观看 | 国产一级在线观看 | 久久久成人网 | 亚洲午夜精品一区二区三区他趣 | 欧美日韩午夜精品 | 亚洲精品免费在线 | 中文字幕视频一区 | 国产成人精品区一区二区不卡 | 国产黄色小视频 | 91久久国产综合久久 | 日日想夜夜操 | 国产精品久久国产精品99 gif | 久久草在线视频 | 亚洲成网站 | 国产99视频精品免费播放照片 | 一本一道久久a久久精品蜜桃 | 亚洲精品视频一区二区三区 | avhd101在线成人播放 | 超碰在线人人 |