找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于太阳能热水器控制器仿真疑问

[复制链接]
跳转到指定楼层
楼主
5黑币
数码管不亮为什么?程序如下 求大神指导



/***************************************************/
#include<reg51.h>
#include<intrins.h>                           
#define  Disdata P0      
#define  uchar unsigned char
#define  uint unsigned int
sbit     b20=P3^7;
sbit     p20=P2^0;
sbit     p21=P2^1;                              
sbit     p22=P2^2;
sbit     p23=P2^3;
sbit     p24=P2^4;
sbit     p25=P2^5;                              
sbit     p26=P2^6;
sbit     p27=P2^7;
sbit     beet=P1^5;
sbit     heat=P1^0;
sbit     p11=P1^1;
sbit     qxjr=P1^2;
sbit     add=P1^3;
sbit     p14=P1^4;
sbit     qxss=P1^6;
uchar     a=35;
uint    temp,b,wd,h;
bit lock0=1;//加热标志位
bitlock1=1;               
uchar codedis[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};      
uchar datatemp_data[3]={0x00,0x000,0x00};           
uintkey_[2]={5,0};
/*****************11us延时函数*************************/
voiddelay(uint t)
{
  for (;t>0;t--);
}
/******************1ms延时函数*****************************/
voiddelay1ms(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
         for(y=110;y>0;y--);      
}
/****************发音函数***************************/
voidplay(uchar t)
{
  uchar i;
  for(i=0;i<1000;i++)
  {
         beet=~beet;
         delay1ms(t);
  }
  beet=0;
}
/****************显示扫描函数***************************/
scan()
{
  uint k=0;
  Disdata=~dis[temp_data[k]];
  p26=0;
  p27=1;
  delay1ms(5);
  k++;
  Disdata=~dis[temp_data[k]];
  p26=1;
  p27=0;
  delay1ms(5);
  p26=1;
  p27=1;
}
/*********************预置温度******************************/
voidyzwd(uint b)
{
  Disdata=~dis[b%10];
  p26=0;
  p27=1;
  delay1ms(5);
  Disdata=~dis[b/10];
  p26=1;
  p27=0;
  delay1ms(5);
  p26=1;
  p27=1;
}
/****************DS18B20复位函数************************/
ow_reset(void)
{
  char presence=1;
  while(presence)
  {
          while(presence)
          {
                b20=1;_nop_();_nop_();
                b20=0;                                       
                delay(50);         
                b20=1;                                       
                delay(6);           
                presence=b20;        
            }
    delay(45);           
    presence=~b20;         
  }
  b20=1;                  
}
/****************DS18B20写命令函数************************/
voidwrite_byte(uchar val)
{
  uchar i;
  for(i=8;i>0;i--)
  {
    b20=1;_nop_();_nop_();                 
    b20=0;_nop_();_nop_();_nop_();_nop_();
    b20=val&0x01;                           
    delay(6);                           
    val=val/2;                           
   }
   b20=1;
   delay(1);
}
//
/****************DS18B20读1字节函数************************/
ucharread_byte(void)
{
uchar i;
ucharvalue=0;
for(i=8;i>0;i--)
{
  b20=1;_nop_();_nop_();
  value>>=1;
  b20=0;_nop_();_nop_();_nop_();_nop_();        
  b20=1;_nop_();_nop_();_nop_();_nop_();         
  if(b20)value|=0x80;
  delay(6);                                    
}
b20=1;
return(value);
}
/****************读出温度函数************************/
uintread_temp()
{
   ow_reset();                  
   delay(200);
    write_byte(0xcc);            
   write_byte(0x44);            
   ow_reset();
   delay(1);
   write_byte(0xcc);            
   write_byte(0xbe);
   temp_data[0]=read_byte();   
   temp_data[1]=read_byte();   
   temp=temp_data[1];
   temp<<=8;                                               
   temp=temp|temp_data[0];      
    returntemp;                 
}
/****************温度数据处理函数************************/
work_temp(uinttem)        
{
  temp_data[2]=tem>>4;
  temp_data[0]=temp_data[2]%10;
  temp_data[1]=temp_data[2]/10;
}
/****************加热子函数************************/
voidheating(void)
{
  if(heat==0)
  {lock0=0;}
  if(lock0==0)
  {p11=0;}
  else
  {p11=1;}
  work_temp(read_temp());   
  wd=temp_data[1]*10+temp_data[0];
  if(wd>=a||qxjr==0)
  {lock0=1;p11=1;}
}
/****************上水子函数************************/
voidadding(void)
{
  if(add==0)
  {lock1=0;}
  if(lock1==0)
  {p14=0;}
  else
  {p14=1;}
  if(p20==1||qxss==0)
  {lock1=1;p14=1;}
}
/****************主函数************************/
void main()
{
  P0=0xff;               
  p26=1;
  p27=1;
  EX0=1;
  IT0=1;
  EX1=1;
  IT1=1;
  EA=1;
  ow_reset();           
  write_byte(0xcc);            
  write_byte(0x44);            
  while(1)
  {
  heating();
  adding();
  work_temp(read_temp());     
  scan();
    wd=temp_data[1]*10+temp_data[0];
  if(wd<80)
  {     
         while(p22==0)
         {
                p14=0;
                delay1ms(1);
                work_temp(read_temp());   
                scan();
         }     
  }                    
   if(wd>=80)
   {
        while(p24==1)
         {
                p14=0;
                work_temp(read_temp());   
                scan();     
         }
         while(p24==0)
         {
                play(2);
                p14=1;
                work_temp(read_temp());   
                scan();            
         }
   }
  }
}
/********************外部中断0(设定温度+)**************************/
voidwdxg(void) interrupt 0
{              
         uchari;
         a=a+1;
         delay1ms(50);
         if(a>99)
         {a=30;}   
     for(i=0;i<100;i++)
         {yzwd(a);}            
}
/********************外部中断1(设定温度-)**************************/
voidwdxg1(void) interrupt 2
{              uchari;
         a=a-1;
         delay1ms(50);
         if(a<30)
         {a=99;}
         for(i=0;i<100;i++)
         {yzwd(a);}     
}
/********************结束**************************/

QQ图片20160523022240.png (32.96 KB, 下载次数: 144)

QQ图片20160523022240.png

QQ图片20160523022240.png (32.96 KB, 下载次数: 138)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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