找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1571|回复: 3
打印 上一主题 下一主题
收起左侧

求大神教教怎么接线

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg51.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int  uint;
  4. uchar i;
  5. sbit RS=P2^7;
  6. sbit RW=P2^6;
  7. sbit E=P2^5;
  8. sbit D1=P1^0;
  9. sbit D2=P1^1;
  10. sbit k1=P2^1;//加按键
  11. sbit k2=P2^2;//减按键
  12. sbit k3=P2^0;//设置按键
  13. uint th=360;//设定 高温
  14. uint tl=350;//设定 低温
  15. uint ta;//实际温度
  16. uchar code t0[]="WD=  .          ";
  17. uchar code t1[]="TH=  .  TL=  .  ";
  18. uchar code wendu[]="0123456789";        //利用一个温度表解决温度显示乱码
  19. sbit DQ=P2^3;//定义DS18B20总线IO
  20. uchar position;//设置的位置
  21. //延时子函数
  22. void delay(uint z)
  23. {
  24.         uint x,y;
  25.         for(x=100;x>1;x--)
  26.                 for(y=z;y>1;y--);
  27. }
  28. //LCD1602液晶写命令子函数
  29. void write_com(uchar com)
  30. {
  31.         RS=0;
  32.         P0=com;                                       
  33.         delay(5);
  34.         E=1;
  35.         delay(5);
  36.         E=0;
  37. }
  38. //LCD1602液晶写数据子函数
  39. void write_date(uchar date)
  40. {
  41.         RS=1;
  42.         P0=date;
  43.         delay(5);
  44.         E=1;
  45.         delay(5);
  46.         E=0;
  47. }
  48. //LCD1602液晶初始化子函数
  49. void LCD1602_init()
  50. {
  51.         E=0;
  52.         RW=0;
  53.         write_com(0x38);
  54.         write_com(0x01);
  55.         write_com(0x0c);
  56.         write_com(0x06);
  57.         write_com(0x80);        
  58.         for(i=0;i<16;i++)
  59.         {
  60.                 write_date(t0[i]);
  61.                 delay(0);
  62.         }
  63.         write_com(0x80+0x40);
  64.         for(i=0;i<16;i++)
  65.         {
  66.                 write_date(t1[i]);
  67.                 delay(0);
  68.         }
  69. }
  70. //延时子函数
  71. void tmpDelay(int num)
  72. {
  73.         while(num--);
  74. }        
  75. //DS18B20温度传感器初始化子函数
  76. void DS18B20_init()
  77. {
  78.         uchar x=0;
  79.         DQ=1;    //DQ复位
  80.         tmpDelay(8);  //稍做延时
  81.         DQ=0;    //单片机将DQ拉低
  82.         tmpDelay(80); //精确延时 大于 480us
  83.         DQ=1;    //拉高总线
  84.         tmpDelay(14);
  85.         x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  86.         tmpDelay(20);
  87. }
  88. //DS18B20温度传感器读一个字节子函数
  89. uchar ReadOneChar()
  90. {
  91.         uchar i=0;
  92.         uchar dat=0;
  93.         for(i=8;i>0;i--)
  94.         {
  95.                 DQ=0; // 给脉冲信号
  96.                 dat>>=1;
  97.                 DQ=1; // 给脉冲信号
  98.                 if(DQ)
  99.                         dat|=0x80;
  100.                 tmpDelay(4);
  101.         }
  102.         return(dat);
  103. }
  104. //DS18B20温度传感器写一个字节子函数
  105. void WriteOneChar(uchar dat)
  106. {
  107.         uchar i=0;
  108.         for(i=8;i>0;i--)
  109.         {
  110.                 DQ=0;
  111.                 DQ=dat&0x01;
  112.                 tmpDelay(5);
  113.                 DQ=1;
  114.                 dat>>=1;
  115.         }
  116. }
  117. //读取温度子函数
  118. uint Readtemp()
  119. {
  120.         uchar a=0;
  121.         uchar b=0;
  122.         uint t=0;
  123.         float tt=0;        
  124.         DS18B20_init();
  125.         WriteOneChar(0xCC); // 跳过读序号列号的操作
  126.         WriteOneChar(0x44); // 启动温度转换
  127.         DS18B20_init();
  128.         WriteOneChar(0xCC); //跳过读序号列号的操作
  129.         WriteOneChar(0xBE); //读取温度寄存器
  130.         a=ReadOneChar();   //连续读两个字节数据   //读低8位
  131.         b=ReadOneChar();                          //读高8位
  132.         t=b;
  133.         t<<=8;
  134.         t=t|a; //两字节合成一个整型变量。
  135.         tt=t*0.0625;  //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度
  136.         t=tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
  137.         return(t);
  138. }
  139. //LCD1602液晶显示子函数
  140. void display()
  141. {
  142.            uint shi,ge,xiaoshu;            //这里的num,shi,ge,xiaoshu 必须用unsigned int无符号整数来表示,用unshigned char  字符型则显示错误
  143.         shi=th/100;                  //显示 最高温度 Th
  144.         ge=th/10%10;
  145.         xiaoshu=th%10;
  146.         write_com(0x80+0x40+3);
  147.         write_date(wendu[shi]);
  148.         write_com(0x80+0x40+4);
  149.         write_date(wendu[ge]);                                       
  150.         write_com(0x80+0x40+6);
  151.         write_date(wendu[xiaoshu]);
  152.         shi=tl/100;          //显示 最低文帝 Tl  
  153.         ge=tl/10%10;
  154.         xiaoshu=tl%10;
  155.         write_com(0x80+0x40+11);
  156.         write_date(wendu[shi]);
  157.         write_com(0x80+0x40+12);
  158.         write_date(wendu[ge]);                                                
  159.         write_com(0x80+0x40+14);
  160.         write_date(wendu[xiaoshu]);
  161. }
  162. //报警子函数
  163. void temp_check()
  164. {
  165.         uint shi,ge,xiaoshu;            //这里的num,shi,ge,xiaoshu 必须用unsigned int无符号整数来表示,用unshigned char  字符型则显示错误
  166.         ta=Readtemp();
  167.         if(ta>th)
  168.         {
  169.                 D1=0;
  170.                 D2=1;
  171.         }
  172.         else if(ta<tl)
  173.         {
  174.                 D1=1;
  175.                 D2=0;
  176.         }
  177.         else
  178.         {
  179.                 D1=1;
  180.                 D2=1;
  181.         }
  182.         shi=ta/100;         //显示 实际温度  
  183.         ge=ta/10%10;
  184.         xiaoshu=ta%10;
  185.         write_com(0x80+3);
  186.         write_date(wendu[shi]);
  187.         write_com(0x80+4);
  188.         write_date(wendu[ge]);                                                
  189.         write_com(0x80+6);
  190.         write_date(wendu[xiaoshu]);
  191. }
  192. //按键扫描子函数
  193. void key()
  194. {        
  195.         if(k3==0)                 //set 按键 按下
  196.         {
  197.                 delay(1);
  198.                 if(k3==0)
  199.                 {                                                        //设置位置设定
  200.                         position++;
  201.                         if(position>2)
  202.                                 position=0;
  203.                         if(position==0)                  // 无设置位置
  204.                         {
  205.                                 write_com(0x80+0x40+7);
  206.                                 write_date(' ');
  207.                                 write_com(0x80+0x40+15);
  208.                                 write_date(' ');
  209.                         }
  210.                         if(position==1)                //设置TH 在th后显示< 标识当前位置
  211.                         {
  212.                                 write_com(0x80+0x40+7);
  213.                                 write_date('<');
  214.                                 write_com(0x80+0x40+15);
  215.                                 write_date(' ');                  
  216.                         }
  217.                         if(position==2)          //设置Tl   在tl后显示< 标识当前位置
  218.                         {
  219.                                 write_com(0x80+0x40+7);
  220.                                 write_date(' ');
  221.                                 write_com(0x80+0x40+15);
  222.                                 write_date('<');                  
  223.                         }
  224.                         while(k3==0);        
  225.                 }        
  226.         }        
  227.         if(k1==0)
  228.         {
  229.                 delay(1);
  230.                 if(k1==0)
  231.                 {
  232.                         if(position==1)
  233.                         {
  234.                                 th+=5;
  235.                                 if(th>1000)
  236.                                         th=990;
  237.                         }
  238.                         if(position==2)
  239.                         {
  240.                                 tl+=5;                          //tl>th时  是个错误,这里避免此情况发生
  241.                                 if(tl>=th)
  242.                                         tl=th-5;
  243.                         }        
  244.                         display();
  245.                 }        
  246.                 while(k1==0);
  247.         }
  248.         if(k2==0)
  249.         {
  250.                 delay(1);
  251.                 if(k2==0)
  252.                 {
  253.                         if(position==1)
  254.                         {
  255.                                 th-=5;                         //th<tl时  是个错误,这里避免此情况发生
  256.                                 if(th<=tl)
  257.                                         th=tl+5;
  258.                         }
  259.                         if(position==2)
  260.                         {        
  261.                                 if(tl<10)
  262.                                         tl=10;
  263.                                 else
  264.                                         tl-=5;
  265.                         }        
  266.                         display();
  267.                 }        
  268.                 while(k2==0);
  269.         }
  270. }
  271. //主函数
  272. void main()
  273. {         
  274.         uint i;
  275.         LCD1602_init();
  276.         display();
  277.         while(1)
  278.         {        
  279.                 delay(1);
  280.                 if((++i)>500) //500ms 检测一次温度
  281.                 {
  282.                          temp_check();
  283.                          i=0;
  284.                 }               
  285.                 key();               
  286.         }
  287. }
复制代码



                    有线  但是不懂怎么接 求大神指点指点


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:234075 发表于 2018-6-23 23:26 | 只看该作者
这个好像普中科技的学习板,程序的上面改一下
sbit RS=P2^6;            
sbit RW=P2^5;               
sbit E=P2^7;   
USB右边好像只插了红外接收管,上面温度那里要插DS18B20,不知道你有没有?再右边靠近两排黑色按键的排针接P2口,左上led矩阵右边的排针接P1。
给你个原理图你自己再看看吧

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:359708 发表于 2018-6-27 22:50 | 只看该作者
P2^1用杜邦线加按键
P2^2用杜邦线减按键
P2^0用杜邦线设置按键
注意接独立按键
ds18b20插上
看一下整板关于2^5,6,7的跳帽,按说明走。
回复

使用道具 举报

地板
ID:360689 发表于 2018-6-27 23:58 | 只看该作者
P2^1用杜邦线加按键 P2^2用杜邦线减按键 P2^0用杜邦线设置按键 注意接独立按键 ds18b20插上 看一下整板关于2^5,6,7的跳帽,一步一步试试看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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