找回密码
 注册
关于网站域名变更的通知
查看: 906|回复: 4
打印 上一主题 下一主题

51单片机水温控制LCD显示加VB上位机温度曲线绘制

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-3 13:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机水温控制LCD显示加VB上位机温度曲线绘制6 {8 ~! x: U6 V% d

3 {( M" M, b7 z: ^7 _% [" K" M

  `1 E+ y. a. j* R" N4 ~实现功能,1L水由1KW电炉加热,要求水温在一定范围内人工设定,并能随着环境温度改变自动调节,以维持设定的温度不变。& U* |5 |  }% m& `# H
矩阵键盘输入设定温度,LCD1602显示温度值,VB上位机绘制温度曲线! K) ^4 ^$ h. }2 \: J) B/ N

, o" t1 }' [. K% e9 z% P8 l' B, f- b/ C: J2 a7 p. ^( D7 T
! I5 E3 X+ M2 C  w8 c

0 f9 P' i  d. Y# [" m. X  \; H9 o5 Z

/ G: \% V. w7 N5 K, H& T0 j( Z+ g/*******************************************************************************# w& a7 H* Q  V3 k6 ?4 {( ]
* 实验名                           :温度显示实验
- \  z0 R7 y# A5 z  r* 使用的IO             : $ r, `4 d5 X% \
* 实验效果       :1602显示温度% m4 Z# j9 G6 @" x6 ~
*        注意                                         :% L6 M& }2 h# \8 @
*******************************************************************************/0 R# w& Q5 d/ R: ?. e9 }
6 Q- {# `% T4 j

$ P3 n0 M) W4 J8 G. H5 J#include<reg51.h>& q% h( L0 T0 P
#include "uart.h"
7 d5 p- w" K" q  ?4 p#include"lcd.h"
, U! g7 `9 i2 h1 J  I#include "juzhen.h"- `" I" h2 O3 ]
#include"temp.h"
/ j( v. p' E* G2 D% wvoid LcdDisplay(int);7 R/ s+ `: s/ N( O
void show_zi();
' K" Y, s- w" c1 H" W, L. ]0 A/*******************************************************************************5 \& h8 h7 l0 m9 s7 c
* 函数名         : main7 B0 P+ F2 l& n. H& j4 K7 L
* 函数功能                   : 主函数
  B+ z! P6 Z+ K2 z" n( P* 输入           : 无
" @8 M4 J/ s8 a0 O( c* 输出                  : 无
; `6 F. J2 f2 F1 g' O: n, p$ h*******************************************************************************/
3 o6 R7 c9 q* S3 X. k7 Mextern int key_value;% s1 ?# Z0 X) I

: T- F, t% Z3 L& ~7 w6 w

9 n& f6 i7 V  lvoid main()% n5 n- @: n" H& a' w5 l
{+ A/ z/ s' @: `& {3 |: a( A
        UsartConfiguration();
, v" h4 \6 _' o        LcdInit();                         //初始化LCD, a$ r" K- V  ~* F1 Q; i- h  K
        show_zi();' u/ J, Z8 d/ l' ]! ?
        while(1)
% ]) r* P6 u, I! Z8 o& @" V( \        {+ F. \; k3 {- `6 B' N
                LcdDisplay(Ds18b20ReadTemp());
: i' b: o; ]' S4 ?                //Delay1ms(1000);//1s钟刷一次0 B( W' |( \7 P0 C3 w+ R
                key_touch();3 K+ F8 N7 \3 `
                LcdDisplay_input();
/ M/ G3 D: x7 _1 _9 f( l( k                compare_temp();% q- j3 s+ `' g0 k- u
        }9 _$ h/ x7 ?, g: U
}( j% p8 U% }* ?
& k% V; n& k" C$ l7 u5 E+ X
# W. `1 s8 B- y
/*******************************************************************************
2 ]3 u1 _. u  X* 函数名         : LcdDisplay()
. C, P. ~  G" A2 c4 Z0 V  X+ V* 函数功能                   : LCD显示读取到的温度
3 h6 Q' G8 ~: c9 w* U* 输入           : v" e: H" g9 Y5 ~; X8 f) B' k
* 输出                  : 无  A$ B& e$ H; E3 q
*******************************************************************************/$ x( \; U2 l3 f# _, `
unsigned char dates[] = {0, 0, 0, 0, 0}; //定义数组
4 j! @1 g- |3 h; [void LcdDisplay(int temp)          //lcd显示+ y" P, b+ C! M) |1 ^6 \( L
{8 A" F$ q4 @" \# A- N' J( Y& g2 ?* k+ L
   
9 T/ z0 C# S  u$ Z: i  : C1 c4 }# g! b0 \6 [/ G
        float tp;& H6 n. ^& e( x/ s- Z1 S
        4 a& h6 P! B5 [, d$ L, g6 [
//        if(temp< 0)                                //当温度值为负数& k8 F- z- Q  {& g, G, D' \2 [  A
//  {9 V+ e& y  z* ?* J
//          LcdWriteCom(0x80);                //写地址 80表示初始地址
  T) B$ T7 N/ N- P9 o& w//    LcdWriteData('-');                  //显示负0 Y6 l' \8 u+ c' [$ `$ ]  Z! ~
//                //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
- J) K4 n: O/ r2 S0 \//                temp=temp-1;
% M- M  r, s2 W//                temp=~temp;7 d& m/ p' q* B& V2 z& W
//                tp=temp;+ A* Z  T+ B, x! R$ ^9 c
//                temp=tp*0.0625*100+0.5;        
! I/ h1 F6 J9 m  q8 \//                //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点( v( Y! }0 o9 o: x
//                //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就0 v) {1 j: ?) r# j
//                //算加上0.5,还是在小数点后面。
* |/ G: D) V" H, _$ e//
" J) r& n- h' H//  }# g( ]3 k4 S" B& k# z' t! ^' Z- s0 M
//  else
2 w7 x5 T) e! j% |, K1 U* P  //{                        # n$ X% @8 B0 H. O; x* {
          LcdWriteCom(0x85);                //写地址 80表示初始地址
, X0 F- ?. o5 Z    LcdWriteData('+');                 //显示正/ u* W5 V+ @5 g
                tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
& ?8 C* Y' P! d' D" j) v                //如果温度是正的那么,那么正数的原码就是补码它本身
4 x. }4 ~' H4 w                temp=tp*0.0625*100+0.5;        6 Y# J% Q5 _* e: R- [3 b; _3 L
                //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点1 {, x# P: ?) u' h0 }
                //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就. T! |! P% R; K! R1 x% `0 K
                //算加上0.5,还是在小数点后面。
& Q: g! y$ N; D! k //}
' o% O. b/ D4 n% I+ x        dates[0] = temp / 10000;/ |( M- P- l8 m2 `  u# j9 A  W
  dates[1] = temp % 10000 / 1000;
1 f# \4 G4 ~" u- [/ I, n- I  dates[2] = temp % 1000 / 100;
9 I" L5 h* q* r9 i, ]$ ~7 A. W  dates[3] = temp % 100 / 10;+ }) c# C+ Q9 [# `$ @4 E: g; j5 e0 M; _
  dates[4] = temp % 10;
, v& T) d2 i4 z8 r; x% B % j9 i% b2 R# v3 o5 a$ P- `3 v7 f
        LcdWriteCom(0x86);                  //写地址 80表示初始地址& U; [- W0 ~3 O: X# n
  LcdWriteData('0'+dates[0]); //百位
0 \, q3 K1 A& m0 W9 W
: l2 H$ T/ h" K% R* s. T

! ?( M$ }; q. K; g$ T  h2 o# `1 R+ {3 r
  R; [5 @; t8 s: M) S
  LcdWriteCom(0x87);                 //写地址 80表示初始地址
6 i2 V& l+ a! c+ }; R4 L  LcdWriteData('0'+dates[1]); //十位
( Y, f  }' v. e6 ^  SBUF = '0'+dates[1];        //将接收到的数据放入到发送寄存器, c) \+ l, T+ g1 j& O
        while (!TI);                            //等待发送数据完成
7 O$ x* u0 K2 V9 h7 J        TI = 0;! X9 A& z3 C6 l" P9 L7 t

9 F! _9 e( R) y& a; s' a

" L. S0 }+ K6 V5 M' @' F        LcdWriteCom(0x88);                //写地址 80表示初始地址
3 x0 x! |# z) N7 k* Q: S# n) K; g  LcdWriteData('0'+dates[2]); //个位
$ k* p3 }! d0 Q# G  SBUF = '0'+dates[2];        //将接收到的数据放入到发送寄存器
* S; F6 `6 ^& x. ~) m        while (!TI);                            //等待发送数据完成: [* p5 Q6 Z& c/ y
        TI = 0;
3 A4 B9 D# ~1 }/ \$ T* |: _8 U
& `1 j5 U$ h- q/ V! y; R! l
  X( G- a+ Y/ x
        LcdWriteCom(0x89);                //写地址 80表示初始地址1 I8 }; f$ |- X, J0 Q7 C
  LcdWriteData('.');                 //显示 ‘.’
0 Z- A0 Y  \# d$ G
) C9 u: S  y5 F# s0 q1 P
5 g$ g+ v& ^* h* |3 H/ I
        LcdWriteCom(0x8A);                 //写地址 80表示初始地址$ h! o; e- r7 t) R! P
  LcdWriteData('0'+dates[3]); //显示小数点  
' [& ^6 J: @+ G& S2 s3 T2 j
  A. Y. c' N; m! m7 m# N) i

  A/ V. f5 ~! L- \        LcdWriteCom(0x8B);                 //写地址 80表示初始地址
3 `7 Y6 `$ f% d, Z4 q. W: }  LcdWriteData('0'+dates[4]); //显示小数点  
* f& S; j6 b- A. w1 t" M
7 l3 H* x" \  O

8 W5 r) I: j4 I        LcdWriteCom(0x8C);                //写地址 80表示初始地址0 C- [# p0 G4 H3 r
  LcdWriteData('C');   3 }# G3 ~- q# F$ v/ w" v
}
1 j6 d: i$ }* y. k% K; V0 U+ w6 [ void show_zi()" L) e, y% a" u" {: A
{8 h* q; @7 w* w) j! f% c
         char temp[6]={"Temp:"};
3 s5 W4 X! E( `" N* N0 X( z        char temp2[6]={"Hope:"};
! P) a1 b* G7 k. c" g        int i;
3 n3 M8 E+ k  z        for(i=0;i<6;i++)
  X9 f( _: ~4 z% k  m# E        {8 `% }6 Y% i  U+ n+ p  H# L9 `
                LcdWriteCom(0x80+i);                //写地址 80表示初始地址
# R) E. x6 h7 X3 g                  LcdWriteData(temp);        
; i. i0 u5 W, n$ f! v/ m  ?. i        }/ H) o6 Z3 j6 O9 [* h# S
   for(i=0;i<6;i++), S, `4 ]2 m" s
        {
4 m# U+ d- b$ X( z! x                LcdWriteCom(0xC0+i);                //写地址 80表示初始地址
1 F; p* Y2 p  f- H  G$ v1 g# ?/ g                  LcdWriteData(temp2);        
* t7 d5 w- I. J6 V7 o        }
# n$ e+ E8 W( v/ n! }' d }
* z6 U; b) ~0 f+ y/ I上位机源码和下位机源码:5 v% U  V; t; r7 O) G
游客,如果您要查看本帖隐藏内容请回复

5 P' @, B5 R$ ?+ {9 n& d/ A! A$ R2 O8 z: Z8 s$ S

该用户从未签到

3#
发表于 2022-11-27 10:09 | 只看该作者
这个不错,准不准?

该用户从未签到

4#
发表于 2023-12-18 09:41 | 只看该作者
学习学习,感谢分享
  i! i( |) S. q% X& @
  • TA的每日心情
    开心
    2025-4-11 15:09
  • 签到天数: 387 天

    [LV.9]以坛为家II

    5#
    发表于 2024-4-25 15:09 | 只看该作者
    51单片机水温控制LCD显示加VB上位机温度曲线绘制
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-23 20:08 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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