找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用proteus仿真无法实现报警功能和“char L_temp2=2”这部分的阀值修改,为什么?

[复制链接]
跳转到指定楼层
楼主
ID:538503 发表于 2019-5-15 00:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序:#include<reg51.h>
#define uchar unsigned char  
#define uint unsigned int
sbit DQ=P0^0;
sbit DQ2=P0^1;
sbit DS=P2^0;
sbit RS=P1^5;
sbit RW=P1^6;
sbit EN=P1^7;
sbit KEY1=P2^1;
sbit KEY2=P2^2;
sbit KEY3=P2^3;
sbit BEEP=P2^7;
sbit Switch=P2^0;
uchar code str0[]=("Temperature 1:");
uchar code str1[]=("TH 1:         ");
uchar code str2[]=("TL 1:         ");
uchar code str3[]=("Temperature 1:");
uchar code str4[]=("TH 2:         ");
uchar code str5[]=("TL 2:         ");
uchar data disdata[5];
char mode=0;
char mode2=0;
char H_temp=35;
char L_temp=1;
char H_temp2=40;
char L_temp2=2;
uint tvalue;
uchar tflag;
void delay1ms(uint ms)
{
   uchar i;
   uchar j;
   for(i=0;i<ms;i++)
   for(j=0;j<100;j++);
}
void wr_com(uchar com)
{
   delay1ms(1);
   RS=0;
   RW=0;
   EN=0;
   P3=com;
   delay1ms(1);
   EN=1;
   delay1ms(1);
   EN=0;
}
void wr_dat(uchar dat)
{
   delay1ms(1);
   RS=1;
   RW=0;
   EN=0;
   P3=dat;
   delay1ms(1);
   EN=1;
   delay1ms(1);
   EN=0;
}                               
void lcd_init()
{
   delay1ms(15);
   wr_com(0x38);
   delay1ms(5);
   wr_com(0x08);
   delay1ms(5);
   wr_com(0x01);
   delay1ms(5);
   wr_com(0x06);
   delay1ms(5);
   wr_com(0x0c);
   delay1ms(5);
}
void display(uchar*p)
{
    while(*p!='\0')
        {
            wr_dat(*p);
                p++;
                delay1ms(1);
         }
}
void init_play(uchar st)
{
    wr_com(0x80);
        switch(st)
        {
           case0: display(str0);break;                                                         
           case1: display(str1);break;
           case2: display(str2);break;
           case3: display(str3);break;
           case4: display(str4);break;
           case5: display(str5);break;
         }
}
void delay_18B20(uint i)
{
    while(i--);
}                                                                                                                          
void ds1820rst(bit flag)
{
  uchar x=0;
  if(flag==0)
  {
  DQ=1;
  delay_18B20(4);
  DQ=0;
  delay_18B20(100);
  DQ=1;
  delay_18B20(40);
  }
  if(flag==1)
  {
  DQ2=1;
  delay_18B20(4);
  DQ2=0;
  delay_18B20(100);
  DQ2=1;
  delay_18B20(40);
  }
}
uchar ds1820rd(bit flag)
{
  uchar i=0;
  uchar dat=0;
  if(flag==0)
  {
  for(i=8;i>0;i--)
   {
     DQ=0;
         dat>>=1;
         DQ=1;
         if(DQ)
     dat|=0x80;
         delay_18B20(10);
        }
  }
  if(flag==1)
  {
     for(i=8;i>0;i--)
   {
     DQ2=0;
         dat>>=1;
         DQ2=1;
         if(DQ2)
     dat|=0x80;
         delay_18B20(10);
        }
   }
     return(dat);
}
void ds1820wr(uchar wdata,bit flag)
{
   uchar i=0;
   if(flag==0)
   {
   for(i=8;i>0;i--)
    {
                DQ=0;
                DQ=wdata&0x01;
                delay_18B20(10);
                DQ=1;
                wdata>>=1;
         }       
        }
     if(flag==1)
   {
   for(i=8;i>0;i--)
    {
                DQ2=0;
                DQ2=wdata&0x01;
                delay_18B20(10);
                DQ2=1;
                wdata>>=1;
         }       
        }        
}
uint read_temp(bit flag)
{
  uchar a,b;
  ds1820rst(flag);
  ds1820wr(0xcc,flag);
  ds1820wr(0x44,flag);
  ds1820rst(flag);
  ds1820wr(0xcc,flag);
  ds1820wr(0xbe,flag);
  a=ds1820rd(flag);
  b=ds1820rd(flag);
  tvalue=b;
  tvalue<<=8;                          
  tvalue=tvalue|a;
if(tvalue<0x0fff)
  tflag=0;
else
{
   tvalue=~tvalue+1;
   tflag=1;
}
   tvalue=tvalue*(0.625);
   return(tvalue);
}
void ds1820disp()
{
   uchar flagdat;
   disdata[0]=tvalue/1000+0x30;
   disdata[1]=tvalue%1000/100+0x30;
   disdata[2]=tvalue%100/10+0x30;
   disdata[3]=tvalue%10+0x30;
   if(tflag==0)
      flagdat=0x20;
   else
     flagdat=0x2d;
   if(disdata[0]==0x30)
   {
     disdata[0]=0x20;
         if(disdata[1]==0x30)
         {
                   disdata[1]=0x20;
         }
   }
                wr_com(0xc0);
                wr_dat(flagdat);
                wr_com(0xc1);
                wr_dat(disdata[0]);
                wr_com(0xc2);
                wr_dat(disdata[1]);
                wr_com(0xc3);
                wr_dat(disdata[2]);
                wr_com(0xc4);
                wr_dat(0x2e);
                wr_com(0xc5);
                wr_dat(disdata[3]);
                wr_com(0xc6);
                wr_dat(0xdf);
                wr_com(0xc7);
                wr_dat(0x43);
}
uchar key_scan()
{
  uchar key_back;
   key_back=0;
    if(!KEY1|!KEY2|!KEY3)
        {
          delay1ms(5);
          if(!KEY1|!KEY2|!KEY3)
          {
           if(!KEY1)
              key_back=1;
           else if(!KEY2)
              key_back=2;
           else if(!KEY3)
              key_back=3;
           while(!KEY1|!KEY2|!KEY3);
          }
        }       
return key_back;
}
void key_action(uchar key_back)
{
if(Switch==0)
{
if(key_back==1)
   {mode++;
      if(mode>2)
          mode=0;
   }
else if(key_back==2)
{if(mode==1)
  {H_temp++;
           if(H_temp>125)
           H_temp=125;
  }
   else if(mode==2)
   {L_temp++;
    if(L_temp>125)
        L_temp=125;
   }
}
else if(key_back==3)
{if(mode==1)
    {H_temp--;
         if(H_temp<-50)  
         H_temp=-50;
        }
else if(mode==2)
   {L_temp--;
    if(L_temp<-50)
        L_temp=-50;
   }
}
}
if(Switch==1)
{
  if(key_back==1)
   {mode2++;
      if(mode2>2)
          mode2=0;
   }
else if(key_back==2)
{if(mode2==1)
  {H_temp2++;
           if(H_temp2>125)
           H_temp2=125;
  }
   else if(mode2==2)
   {L_temp2++;
     if(L_temp2>125)
        L_temp2=125;
   }
}
else if(key_back==3)
{if(mode2==1)
    {H_temp2--;
         if(H_temp2<-50)
         H_temp2=-50;
        }
else if(mode2==2)
   {L_temp2--;
    if(L_temp2<-50)
        L_temp2=-50;
   }
}
}
}
void display_transaction()
{
  if(Switch==0)
  {
   if(mode==0)
    {
          init_play(0);
          read_temp(0);
          ds1820disp();
         }
         if(mode==1)
         {
           init_play(1);
           tvalue=H_temp*10;
           if(H_temp<0)
             tflag=1;
            else
                  tflag=0;
                ds1820disp();
          }
          if(mode==2)
          {
            init_play(2);
                tvalue=L_temp*10;
           if(L_temp<0)
             tflag=1;
           else
                  tflag=0;
                ds1820disp();
           }
  }
  else
  {
  if(mode2==0)
  {
    init_play(3);
        read_temp(1);
        ds1820disp();
   }
   if(mode2==1)
   {
     init_play(4);
         tvalue=H_temp2*10;
         if(H_temp<0)
                 tflag=1;
         else
            tflag=0;
         ds1820disp();
        }
        if(mode2==2)
        {
          init_play(5);
          tvalue=L_temp*10;
          if(L_temp<0)
             tflag=1;
          else
                  tflag=0;
                ds1820disp();
         }       
   }
}
void beep(void)       
  {
    int i;
        for(i=0;i<100;i++)
           {
             BEEP=0;
                 delay1ms(4);
                 BEEP=1;
                 delay1ms(4);
           }
   }
void cheek_alarm(void)
{
   read_temp(0);
   if(tflag==0)
     {
           if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
           {
              delay1ms(10);
                  read_temp(0);
                  if(tflag==0)
                     {
                           if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
                              beep();
                          }
            }
     }
         if(tflag==1)
     {
          tvalue=-tvalue;
          if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
           {
              delay1ms(10);
                  read_temp(0);
                  if(tflag==1)
                     {
                           tvalue=-tvalue;
                           if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
                              beep();
                          }
            }
     }
read_temp(1);
   if(tflag==0)
     {
           if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
           {
              delay1ms(10);
                  read_temp(1);
                  if(tflag==0)
                     {
                           if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
                            {
                                  beep();
                                }
                          }
            }
     }
         if(tflag==1)
     {
          tvalue=-tvalue;
          if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
           {
              delay1ms(10);
                  read_temp(1);
                  if(tflag==1)
                     {
                           tvalue=-tvalue;
                           if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
                            {
                                  beep();
                                }
                          }
            }
     }
}
void main()
{
  uchar Key_Back;
  BEEP=0;
  lcd_init();
  while(1)
    {
          Key_Back=key_scan();
          if(Key_Back)
          key_action(Key_Back);
          display_transaction();
        }
}
keil编译错误:
Build target '目标 1'
compiling 4.c...
4.c(89): warning C280: 'case0': unreferenced label
4.c(90): warning C280: 'case1': unreferenced label
4.c(91): warning C280: 'case2': unreferenced label
4.c(92): warning C280: 'case3': unreferenced label
4.c(93): warning C280: 'case4': unreferenced label
4.c(94): warning C280: 'case5': unreferenced label
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DISPLAY?4
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?CHEEK_ALARM?4
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?CO?4
Program Size: data=27.2 xdata=0 code=3388
creating hex file from "24"...
"24" - 0 Error(s), 9 Warning(s).

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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