找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 247|回复: 0
收起左侧

51单片机实现DS18B20温度检测与TFT屏显示

[复制链接]
I3I452O 发表于 2020-10-2 23:07 | 显示全部楼层 |阅读模式


  1. //部分代码:

  2. #include "public.h"  

  3. #include "uart.h"

  4. #include "tftlcd.h"

  5. #include "touch.h"

  6. #include "gui.h"

  7. #include "ds18b20.h"





  8. sbit LED1=P3^6;





  9. #define GRAPH_XSTART                                5

  10. #define GRAPH_YSTART                                40

  11. #define GRAPH_WIDTH                                        160

  12. #define GRAPH_HEIGHT                                130

  13. #define GRAPH_BACKCOLOR                                BLACK

  14. #define GRAPH_FRONTCOLOR                        GRAY

  15. #define GRAPH_RIM_LTOC                                 0XA535            //左上外线颜色

  16. #define GRAPH_RIM_LTIC                                 0X8431                //左上内线颜色

  17. #define GRAPH_RIM_RBOC                                 0XFFFF                //右下外线颜色

  18. #define GRAPH_RIM_RBIC                                 0XDEFC                //右下内线颜色





  19. #define VALID_AREA_SPACE_LEFT                30

  20. #define VALID_AREA_SPACE_RIGHT                5

  21. #define VALID_AREA_SPACE_TOP                5

  22. #define VALID_AREA_SPACE_BOTTOM                5

  23. #define VALID_AREA_GRID_XSTART                0

  24. #define VALID_AREA_GRID_YSTART                0        

  25. #define VALID_AREA_GRID_SPACE_X                20

  26. #define VALID_AREA_GRID_SPACE_Y                20

  27. #define VALID_AREA_GRID_LINE_COLOR        GRAY

  28. #define VAILD_AREA_GRID_WIDTH                (GRAPH_WIDTH-VALID_AREA_SPACE_LEFT-VALID_AREA_SPACE_RIGHT)

  29. #define VAILD_AREA_GRID_HEIGHT                (GRAPH_HEIGHT-VALID_AREA_SPACE_TOP-VALID_AREA_SPACE_BOTTOM)

  30. #define VAILD_AREA_GRID_XNUM                (VAILD_AREA_GRID_WIDTH/VALID_AREA_GRID_SPACE_X)

  31. #define VAILD_AREA_GRID_YNUM                (VAILD_AREA_GRID_HEIGHT/VALID_AREA_GRID_SPACE_Y)





  32. #define TEXT_XSTART                                        GRAPH_XSTART

  33. #define TEXT_YSTART                                        GRAPH_YSTART+VALID_AREA_SPACE_TOP

  34. #define TEXT_XSPACE                                        VALID_AREA_GRID_SPACE_X

  35. #define TEXT_YSPACE                                        VALID_AREA_GRID_SPACE_Y

  36. #define TEXT_WIDTH                                        GRAPH_WIDTH-VAILD_AREA_GRID_WIDTH

  37. #define TEXT_HEIGHT                                        GRAPH_HEIGHT-VAILD_AREA_GRID_HEIGHT

  38. #define TEXT_COLOR                                        BLUE

  39. #define TEXT_FONT                                        12



  40. #define GRAPH_OBJECT_XSTART                        GRAPH_XSTART+VALID_AREA_SPACE_LEFT+VALID_AREA_GRID_XSTART

  41. #define GRAPH_OBJECT_YSTART                        VAILD_AREA_GRID_HEIGHT+(GRAPH_YSTART+VALID_AREA_SPACE_TOP+VALID_AREA_GRID_YSTART)

  42. #define GRAPH_OBJECT_COLOR                        GREEN               



  43. const u16 text_value[]={120,100,80,60,40,20};



  44. //图形绘制

  45. //x0,y0:图形的左上角坐标

  46. //width,height:图形的尺寸

  47. //backcolor:背景颜色

  48. //frontcolor:前景颜色

  49. void Graph_Create(u16 x0,u16 y0,u16 width,u16 height,u16 backcolor,u16 frontcolor)

  50. {

  51.         u8 i=0;



  52.         gui_draw_vline(x0,y0,height,GRAPH_RIM_LTOC);                                //左外线

  53.         gui_draw_hline(x0,y0,width,GRAPH_RIM_LTOC);                                        //上外线

  54.         gui_draw_vline(x0+1,y0+1,height-2,GRAPH_RIM_LTIC);                        //左内线

  55.         gui_draw_hline(x0+1,y0+1,width-2,GRAPH_RIM_LTIC);                        //上内线

  56.         gui_draw_vline(x0+width-1,y0,height,GRAPH_RIM_RBOC);                //右外线

  57.         gui_draw_hline(x0,y0+height-1,width,GRAPH_RIM_RBOC);                //下外线

  58.         gui_draw_vline(x0+width-2,y0+1,height-2,GRAPH_RIM_RBIC);        //右内线

  59.         gui_draw_hline(x0+1,y0+height-2,width-2,GRAPH_RIM_RBIC);        //下内线

  60.         gui_fill_rectangle(x0+2,y0+2,width-3,height-3,frontcolor);        //填充内部

  61.         gui_fill_rectangle(x0+VALID_AREA_SPACE_LEFT,y0+VALID_AREA_SPACE_TOP,width-VALID_AREA_SPACE_LEFT-VALID_AREA_SPACE_RIGHT,height-VALID_AREA_SPACE_TOP-VALID_AREA_SPACE_BOTTOM,backcolor);

  62.         

  63.         for(i=0;i<VAILD_AREA_GRID_XNUM;i++)

  64.         {

  65.                 gui_draw_vline(x0+VALID_AREA_SPACE_LEFT+VALID_AREA_GRID_XSTART+(VALID_AREA_GRID_SPACE_X*i),y0+VALID_AREA_SPACE_TOP,height-VALID_AREA_SPACE_TOP-VALID_AREA_SPACE_BOTTOM,VALID_AREA_GRID_LINE_COLOR);        

  66.         }

  67.         for(i=0;i<VAILD_AREA_GRID_YNUM;i++)

  68.         {

  69.                 gui_draw_hline(x0+VALID_AREA_SPACE_LEFT+VALID_AREA_GRID_XSTART,y0+VALID_AREA_SPACE_TOP+(VALID_AREA_GRID_SPACE_Y*i),width-VALID_AREA_SPACE_LEFT-VALID_AREA_SPACE_RIGHT,VALID_AREA_GRID_LINE_COLOR);        

  70.         }                        

  71. }



  72. void ReDraw_ValidAreaGird(u16 x0,u16 y0,u16 width,u16 height,u16 backcolor,u16 frontcolor)

  73. {

  74.         u8 i=0;



  75.         gui_fill_rectangle(x0+VALID_AREA_SPACE_LEFT,y0+VALID_AREA_SPACE_TOP,width-VALID_AREA_SPACE_LEFT-VALID_AREA_SPACE_RIGHT,height-VALID_AREA_SPACE_TOP-VALID_AREA_SPACE_BOTTOM,backcolor);

  76.         

  77.         for(i=0;i<VAILD_AREA_GRID_XNUM;i++)

  78.         {

  79.                 gui_draw_vline(x0+VALID_AREA_SPACE_LEFT+VALID_AREA_GRID_XSTART+(VALID_AREA_GRID_SPACE_X*i),y0+VALID_AREA_SPACE_TOP,height-VALID_AREA_SPACE_TOP-VALID_AREA_SPACE_BOTTOM,VALID_AREA_GRID_LINE_COLOR);        

  80.         }

  81.         for(i=0;i<VAILD_AREA_GRID_YNUM;i++)

  82.         {

  83.                 gui_draw_hline(x0+VALID_AREA_SPACE_LEFT+VALID_AREA_GRID_XSTART,y0+VALID_AREA_SPACE_TOP+(VALID_AREA_GRID_SPACE_Y*i),width-VALID_AREA_SPACE_LEFT-VALID_AREA_SPACE_RIGHT,VALID_AREA_GRID_LINE_COLOR);        

  84.         }               

  85. }







  86. void Graph_AddText(u16 *value)

  87. {

  88.         u8 i=0;

  89.         char text_str[VAILD_AREA_GRID_YNUM+1];



  90.         for(i=0;i<VAILD_AREA_GRID_YNUM;i++)

  91.         {        

  92.                 gui_num2strex(value[i], &text_str[i]);

  93.                 gui_show_strmid(TEXT_XSTART,TEXT_YSTART+(TEXT_YSPACE*i),TEXT_WIDTH,TEXT_HEIGHT,TEXT_COLOR,TEXT_FONT,&text_str[i]);        

  94.         }

  95. }



  96. void Graph_AddValue(u16 x0,u16 y0,u16 value,u16 color,u16 sampletime)

  97. {

  98.         static u16 xtemp=GRAPH_OBJECT_XSTART;

  99.         static u16 ytemp=GRAPH_OBJECT_YSTART;



  100.         gui_draw_bline1(xtemp,ytemp,x0+sampletime,y0-value,1,color);

  101.         xtemp=x0+sampletime;

  102.         ytemp=y0-value;



  103.         if((sampletime>VAILD_AREA_GRID_WIDTH) || (value>VAILD_AREA_GRID_HEIGHT))

  104.         {

  105.                 xtemp=GRAPH_OBJECT_XSTART;

  106.                 ytemp=GRAPH_OBJECT_YSTART-value;

  107.                 ReDraw_ValidAreaGird(GRAPH_XSTART,GRAPH_YSTART,GRAPH_WIDTH,GRAPH_HEIGHT,GRAPH_BACKCOLOR,GRAPH_FRONTCOLOR);                                                

  108.         }

  109. }













  110. #define EDIT_START_X                55                  //编辑框起始X坐标

  111. #define EDIT_START_Y                180                //编辑框起始Y坐标

  112. #define EDIT_WIDTH                        60                //编辑框长

  113. #define EDIT_HEIGHT                        20                //编辑框高



  114. #define EDIT_RIM_LTOC                 0XA535            //左上外线颜色

  115. #define EDIT_RIM_LTIC                 0X8431                //左上内线颜色

  116. #define EDIT_RIM_RBOC                 0XFFFF                //右下外线颜色

  117. #define EDIT_RIM_RBIC                 0XDEFC                //右下内线颜色



  118. #define EDIT_BACKCOLOR                WHITE          //背景色

  119. #define EDIT_FRONTCOLOR                BLUE   //前景色

  120. #define EDIT_FONTSIZE                16           //文本框内字体大小



  121. //编辑框创建

  122. //x0,y0:矩形的左上角坐标

  123. //width,height:文本框的尺寸

  124. //backcolor:背景颜色

  125. void Edit_Create(u16 x0,u16 y0,u16 width,u16 height,u16 backcolor)

  126. {

  127.         gui_draw_vline(x0,y0,height,EDIT_RIM_LTOC);                        //左外线

  128.         gui_draw_hline(x0,y0,width,EDIT_RIM_LTOC);                        //上外线

  129.         gui_draw_vline(x0+1,y0+1,height-2,EDIT_RIM_LTIC);        //左内线

  130.         gui_draw_hline(x0+1,y0+1,width-2,EDIT_RIM_LTIC);        //上内线

  131.         gui_draw_vline(x0+width-1,y0,height,EDIT_RIM_RBOC);                //右外线

  132.         gui_draw_hline(x0,y0+height-1,width,EDIT_RIM_RBOC);                //下外线

  133.         gui_draw_vline(x0+width-2,y0+1,height-2,EDIT_RIM_RBIC);        //右内线

  134.         gui_draw_hline(x0+1,y0+height-2,width-2,EDIT_RIM_RBIC);        //下内线

  135.         gui_fill_rectangle(x0+2,y0+2,width-3,height-3,backcolor);//填充内部        

  136. }



  137. //编辑框显示字符串

  138. //x0,y0:矩形的左上角坐标

  139. //width,height:文本框的尺寸

  140. //backcolor:背景颜色

  141. //frontcolor:前景颜色

  142. //size:文字大小

  143. //str:字符串

  144. void Edit_ShowString(u16 x0,u16 y0,u16 width,u16 height,u16 backcolor,u16 frontcolor,u8 size,u8 *str)

  145. {

  146.         static u16 color_temp=0;



  147.         color_temp=BACK_COLOR;

  148.         BACK_COLOR=backcolor;

  149.         gui_show_strmidex(x0,y0,width,height,frontcolor,size,str,0);

  150.         BACK_COLOR=color_temp;        

  151. }



  152. //编辑框显示数字

  153. //x0,y0:矩形的左上角坐标

  154. //len :数字的位数

  155. //backcolor:背景颜色

  156. //frontcolor:前景颜色

  157. //size:字体大小

  158. //num:数值(0~2^64);

  159. void Edit_ShowNum(u16 x0,u16 y0,u8 len,u16 backcolor,u16 frontcolor,u8 size,long num)

  160. {

  161.         static u16 color_temp=0;



  162.         color_temp=BACK_COLOR;

  163.         BACK_COLOR=backcolor;

  164.         gui_show_num(x0+4,y0+3,len,frontcolor,size,num,0);

  165.         BACK_COLOR=color_temp;        

  166. }





  167. //温度监控系统测试

  168. void TempertureControlSystem_Test(void)

  169. {

  170.         u8 i=0;

  171.         float temper;

  172.         int value=0;

  173.         u8 buf[6];

  174.         u16 samptime=0;

  175.         u16 textvalue;



  176.         DS18B20_GetTemperture();



  177.         FRONT_COLOR=YELLOW;

  178.         LCD_ShowString(10,180,tftlcd_data.width,tftlcd_data.height,16,"Temp:");

  179.         LCD_ShowString(EDIT_START_X+EDIT_WIDTH+2,180,tftlcd_data.width,tftlcd_data.height,16,"^C");

  180.         Edit_Create(EDIT_START_X,EDIT_START_Y,EDIT_WIDTH,EDIT_HEIGHT,EDIT_BACKCOLOR);

  181.         

  182.         Graph_Create(GRAPH_XSTART,GRAPH_YSTART,GRAPH_WIDTH,GRAPH_HEIGHT,GRAPH_BACKCOLOR,GRAPH_FRONTCOLOR);

  183.         Graph_AddText(text_value);



  184.         while(1)

  185.         {

  186.                 i++;

  187.                 if(i%10==0)

  188.                 {

  189.                         LED1=!LED1;

  190.                         samptime++;

  191.                         temper=DS18B20_GetTemperture();

  192.                         if(temper<0)

  193.                         {

  194.                                 printf("检测的温度为:-");

  195.                         }

  196.                         else

  197.                         {

  198.                                 printf("检测的温度为: ");

  199.                         }

  200.                         printf("%.2f°C\r\n",temper);



  201.                         value=temper;



  202.                         Graph_AddValue(GRAPH_OBJECT_XSTART,GRAPH_OBJECT_YSTART,value,GRAPH_OBJECT_COLOR,samptime);

  203.                         if((samptime>VAILD_AREA_GRID_WIDTH))samptime=0;

  204. //                        Edit_ShowNum(EDIT_START_X,EDIT_START_Y,6,EDIT_BACKCOLOR,EDIT_FRONTCOLOR,EDIT_FONTSIZE,value);

  205.                         textvalue=temper*10;

  206.                         buf[0]=textvalue/1000+0x30;

  207.                         buf[1]=textvalue%1000/100+0x30;

  208.                         buf[2]=textvalue%1000%100/10+0x30;

  209.                         buf[3]='.';

  210.                         buf[4]=textvalue%1000%100%10+0x30;

  211.                         buf[5]='\0';

  212.                         Edit_ShowString(EDIT_START_X,EDIT_START_Y,EDIT_WIDTH,EDIT_HEIGHT,EDIT_BACKCOLOR,EDIT_FRONTCOLOR,EDIT_FONTSIZE,buf);

  213.                 }

  214.                 delay_ms(10);

  215.         }        

  216. }



  217. void main()

  218. {        

  219.         



  220.         UART_Init();

  221.         TFTLCD_Init();



  222.         FRONT_COLOR=RED;

  223.         LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"Temperature Test");



  224.         while(DS18B20_Init())

  225.         {

  226.                 LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"DS18B20 Error!");        

  227.         }

  228.         LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"                 ");

  229.         TempertureControlSystem_Test();

  230.         while(1)

  231.         {

  232.                

  233.                                 

  234.         }               

  235. }
复制代码




温度监控系统.zip

173.53 KB, 下载次数: 5, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表