您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC16F877A单片机万年历程序 正文
PIC16F877A单片机万年历程序

PIC16F877A单片机万年历程序

点击数:7120 次   录入时间:03-04 11:37:01   整理:http://www.55dianzi.com   PIC单片机
{
  ADCON1=0X07;                                //设置A口为普通数字口
  TRISA=0X00;                                 //设置A口方向为输出
  //TRISC3=0;                                 //设置D口方向为输出
}
//-----------------------------------------------
//复位DS18B20函数
reset(void)
{
  char presence=1;
  while(presence)
  {
    DQ_LOW() ;                                //主机拉至低电平
    delay(2,90);                              //延时503us
    DQ_HIGH();                                //释放总线等电阻拉高总线,并保持15~60us
    delay(2,8);                               //延时70us
    if(DQ==1) presence=1;                     //没有接收到应答信号,继续复位
    else presence=0;                          //接收到应答信号
    delay(2,70);                              //延时430us
   }
  }
//-----------------------------------------------
//写18b20写字节函数
void write_byte(uch val)
{
 uch i;
 uch temp;
 for(i=8;i>0;i--)
 {
   temp=val&0x01;                            //最低位移出
   DQ_LOW();
   NOP();
   NOP();
   NOP();
   NOP();
   NOP();                                    //从高拉至低电平,产生写时间隙
   if(temp==1)  DQ_HIGH();                   //如果写1,拉高电平
   delay(2,7);                               //延时63us
   DQ_HIGH();
   NOP();
   NOP();
   val=val>>1;                               //右移一位
  }
}
//------------------------------------------------
//18b20读字节函数
uch read_byte(void)
{
 uch i;
 uch value=0;                                //读出温度
 static bit j;
 for(i=8;i>0;i--)
 {
   value>>=1;
   DQ_LOW();
   NOP();
   NOP();
   NOP();
   NOP();                                   //6us
   DQ_HIGH();                               //拉至高电平
   NOP();
   NOP();
   NOP();                                //4us
   j=DQ;
   if(j) value|=0x80;
   delay(2,7);                             //63us
  }
  return(value);
}
//-------------------------------------------------
//启动温度转换函数
void get_temp()
{
int i;
DQ_HIGH();
reset();                                 //复位等待从机应答
write_byte(0XCC);                        //忽略ROM匹配
write_byte(0X44);                        //发送温度转化命令 
for(i=10;i>0;i--)
    {       
        delay(201,132);                       //调用多次延迟函数,确保温度转换完成所需要的时间
    }
reset();                                 //再次复位,等待从机应答
write_byte(0XCC);                        //忽略ROM匹配
write_byte(0XBE);                        //发送读温度命令
TLV=read_byte();                         //读出温度低8
THV=read_byte();                         //读出温度高8位
DQ_HIGH();                               //释放总线
TZ=(TLV>>4)|(THV<<4);
}

3.日历显示程序
/***************************************************

上一页  [1] [2] [3] [4]  下一页


本文关键字:单片机  程序  万年历  PIC单片机单片机-工控设备 - PIC单片机