找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求帮助 屏幕不显示 粮仓粮库8路温度采集巡检系统仿真和单片机源码 ds18b20传感器

[复制链接]
跳转到指定楼层
楼主
粮库温度巡检系统仿真原理图如下,1602液晶屏显示(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include"LCD1602.h"
  2. #include "ds18b20.h"
  3. #include "eepom52.h"
  4. sbit buzzer = P1^3;         //蜂鸣器
  5. sbit Reduc  = P3^4;         //减
  6. sbit Add = P3^5;         //加
  7. sbit Mode = P3^6;         //设置
  8. ///************************************************
  9. //** 函数名称 : void InitUART(void)
  10. //** 函数功能 : 串口初始化函数
  11. //** 输    入 : 无
  12. //** 输    出 : 无
  13. //** 说    明 : 定时器1方式2波特率发生模式,波特率9600bps,晶振11.0592MHZ,误差0%
  14. //************************************************/
  15. //void InitUART(void)
  16. //{
  17. //    TMOD |= 0x20;
  18. //    SCON = 0x50;
  19. //    TH1 = 0xFD;
  20. //    TL1 = 0xFD;
  21. //    PCON = 0x00;
  22. //    ES = 0;
  23. //    TR1 = 1;
  24. //        EA = 1;
  25. //}
  26. ///*********************************************
  27. //**名称:void TxChar(uchar ch)
  28. //**功能:串口发送函数
  29. //**输入:uchar ch>当前发送数据
  30. //**输出:无
  31. //*********************************************/
  32. //void TxChar(unsigned char ch)
  33. //{
  34. //        SBUF=ch;  
  35. //        while(!TI);
  36. //        TI=0;                                                                                
  37. //}
  38. /************************************************
  39. ** 函数名称 : void main(void)
  40. ** 函数功能 : 主函数
  41. ** 输    入 : 无
  42. ** 输    出 : 无
  43. ** 说    明 :
  44. ************************************************/
  45. void main(void)
  46. {  
  47.         uint buzzer_count=0,buzzer_flag=0,buzzer_time=40;//蜂鸣器报警变量

  48.         uint as=0;
  49.         uint wendu1=2000,wendu2=2000,wendu3=2000,wendu4=2000;//温度变量
  50.         uint wendu5=2000,wendu6=2000,wendu7=2000,wendu8=2000;//温度变量
  51.         uchar disp_count=0;//显示计时变量

  52.         uint data_l=10,data_h=30; //上下限报警值        
  53.         uchar Mode_project=1,Mode_flag=1,Mode_count=0;//设置变量

  54.         uchar disp1[16]={"1:00.0C  2:00.0C"};
  55.         uchar disp2[16]={"3:00.0C  4:00.0C"};
  56.         uchar disp3[16]={"5:00.0C  6:00.0C"};
  57.         uchar disp4[16]={"7:00.0C  8:00.0C"};
  58.                         
  59.         LCD_Init();
  60. //        InitUART();

  61.         /****读出每个传感器的序列号****/
  62. //        while(1)
  63. //        {
  64. //                uchar i;
  65. //                uchar *ds18b20_rom;        
  66. //                ds18b20_rom=read_rom();        //读序列号
  67. //                for(i=0;i<8;i++)                 
  68. //                {
  69. //                        disp1[i]=*ds18b20_rom;
  70. //                        TxChar(disp1[i]);
  71. //                        ds18b20_rom++;                        
  72. //                }
  73. //                WriteCOMDATA(0x80,0);
  74. //                for(i=0;i<8;i++)                //显示序列号
  75. //                {
  76. //                        print_char(disp1[i]/16);
  77. //                        print_char(disp1[i]%16);
  78. //                }
  79. //        }


  80.         /***开机把数据从单片机内部eepom中读出来***/
  81.         if(byte_read(0x2050)!=1)
  82.         {               
  83.                 SectorErase(0x2000);
  84.                 byte_write(0x2000,data_l);
  85.                 byte_write(0x2001,data_h);
  86.                 byte_write(0x2050,1);               
  87.         }
  88.         if(byte_read(0x2050)==1)
  89.         {
  90.                 data_l=byte_read(0x2000);
  91.                 data_h=byte_read(0x2001);
  92.         }
  93.         
  94.         while(1)
  95.         {
  96.                 if(disp_count>80)disp_count=0;
  97.                 if(++disp_count==10)
  98.                 {
  99.                         wendu1=read_temp(1);
  100.                         disp1[2]=wendu1/1000+0x30; //温度十位
  101.                         disp1[3]=wendu1/100%10+0x30;//温度个位
  102.                         disp1[5]=wendu1/10%10+0x30;//温度小数第一位
  103.                 }
  104.                 else if(disp_count==20)
  105.                 {        
  106.                         wendu2=read_temp(2);
  107.                         disp1[11]=wendu2/1000+0x30; //温度十位
  108.                         disp1[12]=wendu2/100%10+0x30;//温度个位
  109.                         disp1[14]=wendu2/10%10+0x30;//温度小数第一位
  110.                 }
  111.                 else if(disp_count==30)
  112.                 {
  113.                         wendu3=read_temp(3);
  114.                         disp2[2]=wendu3/1000+0x30; //温度十位
  115.                         disp2[3]=wendu3/100%10+0x30;//温度个位
  116.                         disp2[5]=wendu3/10%10+0x30;//温度小数第一位        
  117.                
  118.                 }        
  119.                 else if(disp_count==40)
  120.                 {
  121.                         wendu4=read_temp(4);
  122.                         disp2[11]=wendu4/1000+0x30; //温度十位
  123.                         disp2[12]=wendu4/100%10+0x30;//温度个位
  124.                         disp2[14]=wendu4/10%10+0x30;//温度小数第一位
  125.                 }
  126.                 else if(disp_count==50)
  127.                 {               
  128.                         wendu5=read_temp(5);
  129.                         disp3[2]=wendu5/1000+0x30; //温度十位
  130.                         disp3[3]=wendu5/100%10+0x30;//温度个位
  131.                         disp3[5]=wendu5/10%10+0x30;//温度小数第一位

  132.                 }
  133.                 else if(disp_count==60)
  134.                 {
  135.                         wendu6=read_temp(6);
  136.                         disp3[11]=wendu6/1000+0x30; //温度十位
  137.                         disp3[12]=wendu6/100%10+0x30;//温度个位
  138.                         disp3[14]=wendu6/10%10+0x30;//温度小数第一位
  139.                 }
  140.                 else if(disp_count==70)
  141.                 {
  142.                         wendu7=read_temp(7);
  143.                         disp4[2]=wendu7/1000+0x30; //温度十位
  144.                         disp4[3]=wendu7/100%10+0x30;//温度个位
  145.                         disp4[5]=wendu7/10%10+0x30;//温度小数第一位
  146.                 }
  147.                 else if(disp_count==80)
  148.                 {
  149.                         wendu8=read_temp(8);
  150.                         disp4[11]=wendu8/1000+0x30; //温度十位
  151.                         disp4[12]=wendu8/100%10+0x30;//温度个位
  152.                         disp4[14]=wendu8/10%10+0x30;//温度小数第一位

  153.                 }
  154.                 //温度值与报警值比较
  155.                 if(wendu1/10>data_l*10 &&
  156.                    wendu1/10<data_h*10 &&
  157.                    wendu2/10>data_l*10 &&
  158.                    wendu2/10<data_h*10 &&
  159.                    wendu3/10>data_l*10 &&
  160.                    wendu3/10<data_h*10 &&
  161.                    wendu4/10>data_l*10 &&
  162.                    wendu4/10<data_h*10 &&
  163.                    wendu5/10>data_l*10 &&
  164.                    wendu5/10<data_h*10 &&
  165.                    wendu6/10>data_l*10 &&
  166.                    wendu6/10<data_h*10 &&
  167.                    wendu7/10>data_l*10 &&
  168.                    wendu7/10<data_h*10 &&
  169.                    wendu8/10>data_l*10 &&
  170.                    wendu8/10<data_h*10)
  171.                 {        
  172.                         buzzer_flag=0;
  173.                         buzzer=1;
  174.                 }
  175.                 else
  176.                 {
  177.                         buzzer_flag=1;                        
  178.                 }        
  179.                 /****蜂鸣器报警****/
  180.                 if(buzzer_flag)
  181.                 {
  182.                         buzzer_count++;if(buzzer_count>buzzer_time*10)buzzer_count=buzzer_time+1;
  183.                         if(buzzer_count%buzzer_time==0)
  184.                         {
  185.                                 buzzer=~buzzer;                                
  186.                         }        
  187.                 }
  188.                 //按下设置键,进入设置页面
  189.                 if(Mode==0 && Mode_flag)
  190.                 {         
  191.                         buzzer=1;
  192.                         as=0;
  193.                         WriteCOMDATA(0x0F,0);
  194.                         delayms(100);                        
  195.                         if(Mode==0)
  196.                         {        
  197.                                 while(Mode==0);                        
  198.                                 Mode_flag=0;
  199.                                 Mode_project=1;
  200.                                 //设置页面显示内容
  201.                                 WriteChar(1,0,16,"     T  SET     ");                                 
  202.                                 WriteChar(2,0,16,"T-L:00c T-H:000c");
  203.                                 WriteCOMDATA(0xC4,0);
  204.                                 WriteCOMDATA(data_l/10+0x30,1);
  205.                                 WriteCOMDATA(data_l%10+0x30,1);
  206.                                 WriteCOMDATA(0xCC,0);
  207.                                 WriteCOMDATA(data_h/100+0x30,1);
  208.                                 WriteCOMDATA(data_h/10%10+0x30,1);
  209.                                 WriteCOMDATA(data_h%10+0x30,1);
  210.                                 while(Mode==0);
  211.                                 while(1)                  
  212.                                 {        
  213.                                         switch(Mode_project)
  214.                                         {                                                                                                               
  215.                                                 case 1:
  216.                                                         WriteCOMDATA(0xC4,0);
  217.                                                         WriteCOMDATA(data_l/10+0x30,1);
  218.                                                         WriteCOMDATA(data_l%10+0x30,1);
  219.                                                         WriteCOMDATA(0xC5,0);
  220.                                                 break;
  221.                                                 case 2:
  222.                                                         WriteCOMDATA(0xCC,0);
  223.                                                         WriteCOMDATA(data_h/100+0x30,1);
  224.                                                         WriteCOMDATA(data_h/10%10+0x30,1);
  225.                                                         WriteCOMDATA(data_h%10+0x30,1);
  226.                                                         WriteCOMDATA(0xCE,0);
  227.                                                 break;
  228.                                                 
  229.                                         }
  230.                                         delayms(400);
  231.                                         //按下加键,对设定目标加
  232.                                         if(Add==0)
  233.                                         {
  234.                                                 delayms(400);
  235.                                                 switch(Mode_project)
  236.                                                 {
  237.                                                         case 1:data_l+=1;break;
  238.                                                         case 2:data_h+=1;break;                                                        
  239.                                                 }               
  240.                                         }
  241.                                         //按下减键,对设定目标减
  242.                                         if(Reduc==0)
  243.                                         {
  244.                                                 delayms(400);
  245.                                                 switch(Mode_project)
  246.                                                 {
  247.                                                         case 1:data_l-=1;break;
  248.                                                         case 2:data_h-=1;break;                                                                                                                        
  249.                                                 }               
  250.                                         }
  251.                                         //短按设置键,切换设定目标,长按设置键2S,则退出设置页面
  252.                                         if(Mode==0)
  253.                                         {
  254.                                                 delayms(600);
  255.                                                 while(Mode==0)
  256.                                                 {
  257.                                                         delayms(600);
  258.                                                         Mode_count++;
  259.                                                         if(Mode_count>6)
  260.                                                         {
  261.                                                                 WriteCOMDATA(0x0C,0);
  262.                                                                 delayms(100);
  263.                                                                 WriteChar(1,0,16,disp1);  //第一行显示内容
  264.                                                                 WriteChar(2,0,16,disp2); //第二行显示内容
  265. ……………………

  266. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

这个程序是网上下载的,里面的hex可以运行,但是用keil编译后的程序不行 屏幕不显示,求大神指导如何修改:
粮仓粮库8点温度采集系统.rar (92.51 KB, 下载次数: 122)
这里有一个可用的版本,大家可以参考http://www.51hei.com/bbs/dpj-55028-1.html

评分

参与人数 2黑币 +55 收起 理由
dingqinhong + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:465246 发表于 2019-3-29 22:54 | 只看该作者
所下载的压缩包中,用其程序生成的.hex文件为错误文件,即其程序错误。之所以能运行,是因为其内部有正确的.hex文件, 也就是说,他并没有提供正确的程序。
回复

使用道具 举报

板凳
ID:670899 发表于 2019-12-25 08:49 | 只看该作者
大佬,如何改温度检测,上限大于40,下限小于-20,报警
回复

使用道具 举报

地板
ID:670899 发表于 2019-12-25 10:56 | 只看该作者
程序有错误
回复

使用道具 举报

5#
ID:730449 发表于 2020-4-16 12:19 来自手机 | 只看该作者
谁有24路的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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