4466|4

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

这个程序看的不明白 [复制链接]

各位大侠,小弟是菜鸟,就懂点51单片机,最近公司要让用义隆的,小弟没接触过啊,现在忙着恶补呢,赶紧找了个程序熟悉一下。这个里面有一些地方不明白(小弟是超级菜鸟啊,如果有大侠好心就给赐教一下,千万别骂,好心的大侠可以加我84099711 (注明是单片机就行了) 当然不能让各位大侠白加,我们公司有时候有点小活,专门外包的。嘿嘿)
#include "em78x468xx.h"
#include "temp_table.h"
#define DISI()        _asm{disi}        (为什么这么定义呢?)
#define ENI()        _asm{eni}
#define SLEP()        _asm{slep}
#define NOP()        _asm{nop}
#define WDTC()        _asm{wdtc}
#define uchar unsigned char
#define ushort unsigned short
#define ulong unsigned long
#define Rp        R55                                 (这个代表什么意思?)
#define Rc        R61                                     (这个代表什么意思?)
#define Rm R60                            (这个代表什么意思?)
#define RST R64
#define SCL R63
#define SDA R62
#define LOW R65
#define MID R66
#define HI  R67
#define COOL R85
#define HOT  R86
#define COL_RST R87
#define LED R54
#define COOL_IF_L R57==0 //如果COOL关
#define COOL_IF_H R57==1 //如果COOL开
#define HEAT_IF_L R56==0 //如果HEAT关
#define HEAT_IF_H R56==1 //如果HEAT开  
#define SCL_L R63=0        //I2总线时钟线
#define SCL_H R63=1
#define SDA_L R62=0        //I2总线数据线
#define SDA_H R62=1
#define RST_L R64=0;
#define RST_H R64=1;
#define Rp_TO_IN P5CR|=0x20;NOP()       //(这个是定义哪个脚呢)
#define Rp_TO_OUT P5CR&=0xdf;NOP()         // (这个是定义哪个脚呢)
#define SDA_TO_IN P6CR|=0x04; NOP()        //设数据线位输入
#define SDA_OUT P6CR&=0xfb; NOP()        //设数据线位输出
#define SDA_IF_L R62==0                //如果sda为低
#define SDA_IF_H R62==1          //如果sda为高
#define DELAY_us NOP();NOP();NOP();NOP()
#define PAGE_SIZE 8
#define SIZE 0x00ff
#define ON_OFF    0x1e
#define MODE      0x1d
#define FAN       0x1b
#define INCREASE  0x17
#define DECREASE  0x0f
#define W_ADD_COM 0xa0        //写字节命令及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 0
#define R_ADD_COM 0xa1        //读命令字节及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 1
#define lcd_init(init_v)        _asm{mov a,@init_v}\
                                                        _asm{mov %LCDCR,a}
uchar lcd_ram[10]=
{ // 0  , 1  ,  2 , 3 ,  4  ,  5 , 6,   7  , 8 ,  9
        0xdf,0x0e,0xeb,0xaf,0x3e,0xbd,0xfd,0x0f,0xff,0xbf
};

ushort dly;       
ushort test_temp[6];
ushort Rm_t,Rc_t;

uchar RC_num,Rmin_p,Rmax_p;
ushort Rmin_t,Rmax_t;
ulong Ttmp;
uchar key_state = 0;//按键值
uchar new_key = 0;
uchar key_tcc = 0;
uchar key_temp= 0;
uchar timer_cnt=0;
uchar r_buf[2];
uchar w_buf[2];
uchar set_temper =0;
uchar fan_st   = 0;
uchar mode_on_off=0;
uchar timer1,timer2;times;
uchar s[3];
//ushort timer;
bit key_flag=0;
bit timer_2ms_ok=0;
bit COL_RST_FLAG=0;
bit timer_1s_ok=0;
/******************函数声明********************/
void sys_init(void);
void tms(uchar i);
void i2cstart(void);
uchar i2cwt(uchar a);
uchar i2crd(void);
void i2cstop(void);
uchar wt24c(uchar *p, uchar ad, uchar n);
void rd24c(uchar *p_dst, uchar ad_rsc, uchar num);
uchar KeyScan(void);
void KeyDo(uchar key);
void display(uchar temp_v,uchar tamp_v,uchar set_tmp);
unsigned char test_temperature(void);
unsigned char Bin1toBcd(unsigned char Xbin1);
void write_data(uchar addr,uchar data);
uchar read_data(uchar addr);
void init_1302(void);
void init_time(void);
/*********************end*********************/  

void sys_init(void)
{
        SBPCR=0x17;(我大概知道,不是太清楚)        //rc 2.13mhz,sleep->Idle mode,sub-clock run program
        IRCR=0;                //disable IR/PWM,port5 is general i/o
        ISR=0;                //clear count1 interrupt flag bit
       
        P5CR=0xc3; (是整个P5.0--P5.7都初始化了吗) //port7 is lcd segment,port8 is general i/o
        P6CR=0x00;
        P7CR=0;
        P8CR=0x1f;
        CNT12CR=0x06;
        CNT1PR=5;
        CNT1EN=1;
        HPWTPR=0;
        LPWTPR=0;
        IMR|=0x08;                //enable count1 interrupt
       
//        WUCR=0x70;        //enable p60~3 wake up
//        TCCCR=0x0f;        //disable main interrupt,TCC pre-scaler 1:256
        WDTCR=0xff; //0xf7;        //disable WDT               
        HLPWTCR=0x77;
        P6PH=0xff;                //enable  port6 internal pull high
        P6OD=0;                //disable por6 open-drain
        P8PH=0xff;                //disable port8 internal pull high
        P6PL=0;                //disable port6 internal pull down

        PORT5=0x00;
        PORT6=0x00;
        PORT8=0x00;
        //变量清零
        COL_RST_FLAG=0;
       
}
/************************************************
                       延时程序
************************************************/

void tms(uchar i)
{
uchar j;
for(;i>0;i--)
  {
   for(j=0;j<200;j++);
   WDTC();
   }
}

/****************************************************
                      写一个字节
****************************************************/
void write_data(uchar addr,uchar data)
{
unsigned char i,temp;
  SDA_OUT;
  RST_L;
  SCL_L;         
  DELAY_us;
  RST_H;                  //时钟信号低时拉高RST初始化
  temp=addr;
  for(i=0;i<8;i++)
  {
  if(temp&(1<                   SDA_H;  
  else
              SDA_L;
  NOP();
  NOP();
  SCL_H;             //时钟上升沿写入数据
  NOP();
  SCL_L;             //时钟拉低电平
  }
  temp=data;
    for(i=0;i<8;i++)
  {
  if(temp&(1<               SDA_H;  
  else
              SDA_L;
  NOP();
  NOP();
  SCL_H;             //时钟上升沿写入数据
  NOP();
  SCL_L;             //时钟拉低电平
  }
  RST_L;             //禁止DS1302
}

/***************************************************
                      读一个字节
***************************************************/
uchar read_data(uchar addr)
{
  uchar i,temp;
  temp=0;
  SDA_OUT;
  RST_L;
  SCL_L;         
  DELAY_us;
  RST_H;                  //时钟信号低时拉高RST初始化
  temp=addr;
  for(i=0;i<8;i++)
  {
          if(temp&(1<                   SDA_H;  
          else
                  SDA_L;
    NOP();
    NOP();
          SCL_H;             //时钟上升沿写入数据
          NOP();       
        SCL_L;             //时钟拉低电平
  }
   SDA_TO_IN;
for(i=0;i<8;i++)
{
  if(SDA_IF_H)
      temp|=(1<   else
            temp&=~(1<           NOP();
      NOP();
   SCL_H;              //上升沿读出数据
   NOP();
   SCL_L;             //时钟电平拉低
  }
  SDA_OUT;
  SCL_L;
  RST_L;             //禁止DS1302
return(temp);
}
//1302初始化
void init_1302()
{
write_data(0x8e,0x00);      //关闭寄存器写保护
write_data(0x90,0x00);            //写充电寄存器
write_data(0x80,0x00);      //秒寄存器停止位置0,时钟启动,初值设为0
}

void init_time()
{
  //write_data(0x80,0x50);//秒
  write_data(0x82,0x59);//分
  write_data(0x84,0x13);//时
  //write_data(0x86,0x05);//日
  //write_data(0x88,0x12);//月
  write_data(0x8a,0x01);//星期
}

/**********************W/R EEPROM*******************************************/
//起始信号
void i2cstart(void)
{   
        SCL_L; DELAY_us;
    SDA_H; DELAY_us;
    SCL_H; DELAY_us;
    SDA_L; DELAY_us;
    SCL_L; DELAY_us;
}


//把一个字节数据输入器件,并以收到应答信号为止
//写入成功返回1,失败返回0
uchar i2cwt(uchar a)
{   uchar i;
       
    for(i=0;i<8;i++)
    {   SCL_L; DELAY_us;
               if((a<             else SDA_L;
            DELAY_us;
        SCL_H; DELAY_us;
        
    }
    SCL_L; DELAY_us;
    SDA_H; DELAY_us;
    SCL_H; DELAY_us;
       
        SDA_TO_IN;                       
       
    if(SDA_IF_L)                //测试有无应答
    {        SDA_OUT;
            return(1);                //有应答
    }
    else
    {        SDA_OUT;
            return(0);                //无应答
    }
}


//i2c读要调用的函数
//从器件读出一个字节
uchar i2crd(void)
{   uchar i,temp;
            
    for(i=0;i<8;i++)
    {   SCL_L; DELAY_us;       
        SDA_H; DELAY_us;    //置数据线接上内部上拉(数据输入方式),此为必须
        SCL_H; DELAY_us;
        temp<<=1;
        
        SDA_TO_IN;                       
        
                if(SDA_IF_H) temp+=1;
        DELAY_us;
        
        SDA_OUT;                       
        }
    SCL_L; DELAY_us;                //主器件应答脉冲
    SDA_L; DELAY_us;
    SCL_H; DELAY_us;
    return(temp);
}
       

//停止信号
void i2cstop(void)
{   SCL_L; DELAY_us;
    SDA_L; DELAY_us;
    SCL_H; DELAY_us;
    SDA_H;
}


uchar wt24c(uchar *p, uchar ad, uchar n)
{        uchar t=0;
       
        i2cstart();                                        //发送起始信号
               
        if(i2cwt(W_ADD_COM))                //发送写字节命令及器件地址
        {       
                i2cwt(ad);                                //ad_dst的低位到器件
                       
                for(;n>0;n--)                        //发送要写入的数据
                {   i2cwt(*p);
                        p++;
                }
        }
//        else syserr=I2C_ERR;                //写字节命令及器件地址错
       
        i2cstop();
    tms(6);                                                //延时6ms
       
        return(*p);
}

//从24cxx读出数据
//参数: *p_dst要读入数据的主机内存地址指针; ad_rsc要输出数据的i2c的地址(整形); num数据个数(整形)
//参数条件:  ad_dst+(num-1)不能大于器件的最高地址; num必须>0;
void rd24c(uchar *p_dst, uchar ad_rsc, uchar num)
{  
    uchar t=0;
        i2cstart();                                        //发送起始信号
               
        if(i2cwt(W_ADD_COM))                //发送写字节命令及器件地址
        {       
                i2cwt(ad_rsc);                        //ad_rsc的低位
                               
                i2cstart();                                //再发送起始信号
                i2cwt(R_ADD_COM);                //发送SLA_R, 读命令字节及器件地址
                               
                for(;num>0;num--)
                {   *p_dst=i2crd();                //从器件读出一个字节
                        p_dst++;
                }
        }
//        else syserr=I2C_ERR;                //写字节命令及器件地址错或对方无应答
               
        i2cstop();

}

/***************************************************************************/
unsigned char Bin1toBcd(unsigned char Xbin1)
{
        unsigned short xBCD=0;
        do
        {
                //if(Xbin1>=100)
                //{
                //        Xbin1-=100;
                //        xBCD+=0x100;
                //}
                //else
                //{
                        if(Xbin1>=10)
                        {
                                Xbin1-=10;
                                xBCD+=0x10;
                        }
                        else
                        {
                                xBCD+=Xbin1;
                                break;
                        }
                //}
        }while(1);
        return xBCD;
}
此帖出自单片机论坛

最新回复

可以给大家说说你的理解啊,也为后来的人做参考  详情 回复 发表于 2009-8-3 07:36
点赞 关注
 

回复
举报

7

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

回复 楼主 whq080127 的帖子

unsigned char test_temperature(void)
{   
    uchar tamp=0;
    Ttmp=0;
        RC_num=0;
        do
        {
                P6CR&=0xfc;
                Rp_TO_OUT;
                Rm=0;
                Rc=0;
                Rp=0;
                for(dly=0xa00;dly;dly--)
                {
                        WDTC();
                }
       
                Rm_t=0;
                P6CR|=0x02;
                Rp_TO_IN;
                Rm=1;      //用基准电阻充电
                while(1)
                {
                        if(Rp)
                        {
                                break;
                        }
                        Rm_t++;
                }
                WDTC();
                test_temp[RC_num]=Rm_t;
                RC_num++;
        }while(RC_num<6);
       
        RC_num=0;               
        Rmin_p=0;
        Rmax_p=5;
        Rmin_t=test_temp[0];
        Rmax_t=test_temp[5];
        do
        {
                if(test_temp[RC_num+1]                 {
                        Rmin_t=test_temp[RC_num+1];
                        Rmin_p=RC_num+1;
                }
                if(test_temp[4-RC_num]>Rmax_t)
                {
                        Rmax_t=test_temp[4-RC_num];
                        Rmax_p=4-RC_num;
                }
                RC_num++;
        }while(RC_num<5);
       
        RC_num=0;
        Rm_t=0;
        do
        {
                if(RC_num!=Rmin_p)
                {
                        if(RC_num!=Rmax_p)
                        {
                                Rm_t+=test_temp[RC_num];
                        }
                }
                RC_num++;
        }while(RC_num<6);//去max,min,取平均值
        Rm_t>>=2;

        RC_num=0;
        do
        {
                P6CR&=0xfc;
                Rp_TO_OUT;
                Rm=0;
                Rc=0;
                Rp=0;
                for(dly=0xa00;dly;dly--)
                {
                        WDTC();
                }
       
                Rc_t=0;
                P6CR|=0x01;//用NTC充电
                Rp_TO_IN;
                Rc=1;
                while(1)
                {
                        if(Rp)
                        {
                                break;
                        }
                        Rc_t++;
                }
                WDTC();
                test_temp[RC_num]=Rc_t;
                RC_num++;
        }while(RC_num<6);
       
        RC_num=0;               
        Rmin_p=0;
        Rmax_p=5;
        Rmin_t=test_temp[0];
        Rmax_t=test_temp[5];
        do
        {
                if(test_temp[RC_num+1]                 {
                        Rmin_t=test_temp[RC_num+1];
                        Rmin_p=RC_num+1;
                }
                if(test_temp[4-RC_num]>Rmax_t)
                {
                        Rmax_t=test_temp[4-RC_num];
                        Rmax_p=4-RC_num;
                }
                RC_num++;
        }while(RC_num<5);
       
        RC_num=0;
        Rc_t=0;
        do
        {
                if(RC_num!=Rmin_p)
                {
                        if(RC_num!=Rmax_p)
                        {
                                Rc_t+=test_temp[RC_num];
                        }
                }
                RC_num++;
        }while(RC_num<6);//去max,min,取平均值
        Rc_t>>=2;
       
        Ttmp=(unsigned long)Rc_t*9950;
        Ttmp=Ttmp/Rm_t;//求ntc值
       
        if(Ttmp>=32960)
        {
                return 0;
        }
        if(Ttmp<=3588)
        {
                return 0x50;
        }
       
        RC_num=0;
        Rm_t=Ttmp;

        do
        {
                if(Rm_t>=temp_table[RC_num+1])//查表微调
                {
                        /*Rm_t-=temp_table[RC_num+1];
                        Rc_t=temp_table[RC_num]-temp_table[RC_num+1];
                        Rm_t*=10;
                        Rm_t=Rm_t/Rc_t;
//                        RC_num++;*/
                        break;
                }
                RC_num++;
        }while(RC_num<48);

        tamp=Bin1toBcd(RC_num);
        //Rc_t<<=4;
        //Rm_t|=Rc_t;
        P6CR&=0xfC;
        PORT6&=0xfC;

        return tamp;
}
void display(uchar temp_v,uchar tamp_v,uchar set_tmp)
{      
        uchar real_dep,tmp1;
        
        LCD_ADDR=6;
        LCD_DB=0x08;
        //风速+冷热
        LCD_ADDR=0;
        LCD_DB=tamp_v;
        LCD_ADDR=23;
             _asm
                {
                        swap %tamp_v
                }
            LCD_DB=tamp_v;
            //当时温度
            real_dep=temp_v;
            temp_v>>=4;
               
            real_dep&=0x0f;       
                LCD_ADDR=4;
                tmp1=lcd_ram[real_dep];
                tmp1&=0xf7;
                LCD_DB=tmp1;
               
                LCD_ADDR=3;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;               
               
                tmp1=temp_v&0x0f;       
                LCD_ADDR=2;
                tmp1=lcd_ram[tmp1];
                LCD_DB=tmp1;
                LCD_ADDR=1;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;
                //设置温度
                real_dep=set_tmp;
            set_tmp>>=4;
               
            real_dep&=0x0f;       
                LCD_ADDR=10;
                tmp1=lcd_ram[real_dep];
                LCD_DB=tmp1;
               
                LCD_ADDR=9;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;               
               
                tmp1=set_tmp&0x0f;       
                LCD_ADDR=8;
                tmp1=lcd_ram[tmp1];
                LCD_DB=tmp1;
                LCD_ADDR=7;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;
                //实时时间(时)
                real_dep=s[0];
            s[0]>>=4;
               
            real_dep&=0x0f;       
                LCD_ADDR=14;
                tmp1=lcd_ram[real_dep];
                if(timer_1s_ok)
                {
                tmp1|=0x08;
                timer_1s_ok=0;
                }
                LCD_DB=tmp1;
               
                LCD_ADDR=13;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;               
               
                tmp1=s[0]&0x0f;       
                LCD_ADDR=12;
                tmp1=lcd_ram[tmp1];
                LCD_DB=tmp1;
                LCD_ADDR=11;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;
                //实时时间(分)
                real_dep=s[2];
            s[2]>>=4;
               
            real_dep&=0x0f;       
                LCD_ADDR=18;
                tmp1=lcd_ram[real_dep];
                tmp1|=0x08;
                LCD_DB=tmp1;
               
                LCD_ADDR=17;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;               
               
                tmp1=s[2]&0x0f;       
                LCD_ADDR=16;
                tmp1=lcd_ram[tmp1];
                LCD_DB=tmp1;
                LCD_ADDR=15;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;
                //实时时间(星期)
                real_dep=s[1];               
            real_dep&=0x0f;       
                LCD_ADDR=20;
                tmp1=lcd_ram[real_dep];
                LCD_DB=tmp1;
               
                LCD_ADDR=19;
                _asm
                {
                        swap %tmp1
                }
                LCD_DB=tmp1;               
                               
                                       
}

/*void lcd_on_off(void)
{   
    uchar i;
        for(i=0;i<32;i++)
        {
                LCD_ADDR=i;
                LCD_DB=0xff;
        }
       
        for(dly=0x00ff;dly;dly--)
        {
                WDTC();
        }
          
        for(i=32;i;i--)
        {
                LCD_ADDR=i;
                LCD_DB=0;
        }
       
        for(dly=0x1fff;dly;dly--)
        {
                WDTC();       
        }
               
}*/

/******************************按键扫描************************/
此帖出自单片机论坛
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 whq080127 的帖子

/*****************************按键处理************************/
void KeyDo(uchar key)
{   
           uchar fan_temp;
    if (key == ON_OFF){
      if(mode_on_off==0)
        {
         key_flag=1;
         mode_on_off=1;
        }
      else
        {
         mode_on_off=0;
        }

    }
    else if (key == FAN)
    {
            timer1=0;
             key_flag=1;
        if(mode_on_off==1)
         {
         fan_temp=fan_st&0xe0;
         if(fan_temp==0x80)
                 {
                         fan_st|=0x40;
                         fan_st&=0x7f;
                 }
         else if(fan_temp==0x40)
                 {
                         fan_st|=0x20;
                         fan_st&=0xbf;
                 }
         else if(fan_temp==0x20)
                 {
                         fan_st|=0x80;
                         fan_st&=0xdf;
                 }
         }
    }
          else if (key == MODE)
          {
                  timer1=0;
            key_flag=1;
            if(mode_on_off==1)
             {
               fan_temp=fan_st&0x03;
               if(fan_temp==0x01)
           fan_st++;
           else
           {
           fan_st|=0x01;
           fan_st&=0xfd;
           }             
             }
           }
    else if (key == DECREASE)
    {      
                  timer1=0;
                  key_flag=1;
            if (set_temper == 10)
            {
                set_temper = 10;
            }
            else
            {
                set_temper--;
            }
    }
    else if (key == INCREASE)
    {       timer1=0;
                  key_flag=1;
            set_temper++;
            if (set_temper > 30)
            {
               set_temper = 30;
            }

    }

}
uchar KeyScan(void)
{
      uchar temp = 0;
      temp = PORT8;
      temp&=0x1f;
      if(temp!=0x1f)
      return temp;
    return 0x1f;
}

void _intcall counter1_l(void) @ 0x0C:low_int 3
{

}

void _intcall counter1(void) @ int 3
{
  //backup R4
  _asm
   {
     SWAPA 0x04
     MOV 0x1F,A
   }         

   //backup C system
  _asm
    {
    BS 0X4,6
    BS 0X4,7   
        MOV A,0X10        // USE 1 BYTE C TYPE,C SYSTEM BACKUP
        MOV 0X3C+1,A
        MOV A,0X14
        MOV 0X3B+1,A
        MOV A,0X18
        MOV 0X3A+1,A
        MOV A,0X1B
        MOV 0X39+1,A
        MOV A,0X1C
        MOV 0X38+1,A
    }
   
            ISR=0;
            timer_2ms_ok=1;
            if (key_state == 0)
           {
            new_key = KeyScan();
            if (new_key != 0x1f)
            {
                key_state++;
            }
           }
        else if (key_state < 5)
        {
            if (KeyScan() == new_key)
            {
                key_state++;
            }
            else
            {
                key_state = 0;
            }
        }
        else if (key_state == 5)
        {
            key_state++;
            KeyDo(new_key);
        }
        else if (key_state == 6)
        {
            key_temp = KeyScan();
            if (key_temp == 0x1f)
            {
                key_state ++;
            }
            else if (key_temp == DECREASE || key_temp == INCREASE)
            {
                if (key_tcc >= 10)
                {
                    key_tcc = 5;
                    KeyDo(key_temp);
                }
                else
                {
                    key_tcc++;
                }
            }
        }
        else if (key_state < 10)
        {
            if (KeyScan() == 0x1f)
            {
                key_state ++;
            }
            else
            {
                key_state = 6;
            }
        }
        else if (key_state == 10)
        {
            key_state = 0;
            key_tcc = 0;
        
        }
     if(mode_on_off)
     {
     times++;
     timer1++;
       if(++timer2>=100)
       {
        timer_1s_ok=1;
        timer2=0;
        }
     }

  // Write your code (inline assembly or C) here
  
   //restore C system
  _asm
    {  
    BS 0X4,6
    BS 0X4,7
        MOV A,0X3C+1        // USE 1 BYTE C TYPE,C SYSTEM RESTORE
        MOV 0X10,A
        MOV A,0X3B+1
        MOV 0X14,A
        MOV A,0X3A+1
        MOV 0X18,A
        MOV A,0X39+1
        MOV 0X1B,A
        MOV A,0X38+1
        MOV 0X1C,A
    }


  //restore R4
  _asm
   {
     SWAPA 0x1F
     MOV 0X04,A
   }
       
}

void  main()
  {
         uchar temp1,temp2;
         uchar i,j;
         uchar *r;
     uchar b;
     uchar c;
     uchar stst;
     uchar *w;
     uchar x;
     uchar y;
       DISI();       
           tms(10);
           sys_init();
           //lcd_init(0xf7);
       r_buf[0]=0;
       r_buf[1]=0;

     r=r_buf;        //读参数
     b=0x00;
     c=2;

     w=w_buf;        //写参数
     x=0x00;
     y=2;
     
     //w_buf[0]=0x81;
     //w_buf[1]=0x19;
     // wt24c(w,x,y);        //出厂写EEPROM

     rd24c(r,b,c);        //初始读EEPROM
     fan_st=r_buf[0];
     set_temper=r_buf[1];
     init_1302();
     temp1=test_temperature();
                for(i=0;i<32;i++)// 清屏
        {
                LCD_ADDR=i;
                LCD_DB=0;
        }
                for(dly=0x1fff;dly;dly--)
        {
                WDTC();       
        }
        //LED=1;
        ENI();
        init_time();//出厂写实时时间
        while(1)
        {   
            //key_find();
          while(timer_2ms_ok)
          {
          timer_2ms_ok=0;
          if(mode_on_off==1)
           {
            lcd_init(0xf7);
          for(i=0;i<4;i+=2)
           {
               s=read_data(0x85-i);
           }
            s[1]=read_data(0x8b);              
            if(key_flag)
            {
            LED=1;
            if(timer1>=200)
                    {
                    timer1=0;
                    LED=0;
                    if((r_buf[0]!=fan_st)||(r_buf[1]!=set_temper))
                    {
                    r_buf[0]=fan_st;
                    r_buf[1]=set_temper;
                    w_buf[0]=fan_st;
                    w_buf[1]=set_temper;
                    wt24c(w,x,y);        //写
                    }
                    key_flag=0;                   
                }
             }
        if(times>=250)
         {
          temp1=test_temperature();
              times=0;
             }
              temp2=Bin1toBcd(set_temper);
                  display(temp1,fan_st,temp2);
                  PORT6=fan_st&0xe0;
                  stst=fan_st&0x01;
                  if(stst==0x01)
                  {  
                     COOL=1;
                     HOT=0;
                     tms(1);
                     if((temp1>temp2)&&(COL_RST_FLAG==0))
                       {  
                          j=0;
                        while((COOL_IF_L)&&(j<=3))
                          {
                           j++;
                           COL_RST=1;
                   tms(10);
                   COL_RST=0;
                           COL_RST_FLAG=1;                  
                           }                       
                   j=0;
                        }
                      else if((temp1                        {   
                          j=0;
                      while((COOL_IF_H)&&(j<=3))
                           {
                           j++;   
                           COL_RST=1;
                   tms(10);
                   COL_RST=0;
                           COL_RST_FLAG=0;                  
                           }                       
                  j=0;
                       }                        
                  }
                      //stst=fan_st&0x02;
                  else
                          {  
                             COOL=0;
                       if((temp1                        HOT=1;
                       else
                       HOT=0;
                    }
               
           }
           else
           {
            LED=0;
            lcd_init(0x00);
            LOW=0;
            MID=0;
            HI=0;
            COOL=0;
            HOT=0;
            }

        WDTC();       
          }       
        WDTC();       
        }
  }
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 whq080127 的帖子

我弄明白了,义隆这破玩意
此帖出自单片机论坛
 
 
 

回复

2万

帖子

74

TA的资源

管理员

5
 

回复 4楼 whq080127 的帖子

可以给大家说说你的理解啊,也为后来的人做参考
此帖出自单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表