友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
九色书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

lcd带温度显示万年历-第2章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



时间设定程序
程序说明:
        
*******************************************************f*********************************************************/

void time_set()
{ 
//按1下数字键“0”,进入时间设定状态,时间停止走动,光标在秒钟处闪动
 if(key00)
 delay(5);
 if(key00)
 { 
  while(!key0);  //松手检测
  delay(5);
  while(!key0);
  funtion_flag++;
  if(funtion_flag1)
  {
   write_(0x0f;1);
   write_(0x80+0x0f;1);   
  }
//当按两下“0”按键时,光标跑到分钟上闪动
  if(funtion_flag2)
  { 
   write_(0x80+0x0c;1);
   
  }
//当按三下“0”按键时,光标跑到小时上闪动
  if(funtion_flag3)
  { 
   write_(0x80+0x09;1);
  }

//当按4下“0”按键时,光标跑年时上闪动
  if(funtion_flag4)
  { 
   write_(0x80+0x40+3;1);
  }
//当按5下“0”按键时,光标跑月时上闪动
  if(funtion_flag5)
  { 
   write_(0x80+0x40+6;1);
  }
//当按6下“0”按键时,光标日时上闪动
  if(funtion_flag6)
  { 
   write_(0x80+0x40+9;1);
  }

//当按7下“0”按键时,光标星期时上闪动
  if(funtion_flag7)
  { 
   write_(0x80+0x40+13;1);
  }
//当按第八下的时候,退出时间设定,时间继续开始运行  
  if(funtion_flag8)
  { 
   l_tmpdate'1'=fen;
   l_tmpdate'2'=shi;
   l_tmpdate'5'=nian;
   l_tmpdate'4'=yue;
   l_tmpdate'3'=ri;
   l_tmpdate'6'=xin;
   Set_RTC();
   write_(0x0c;1);
   funtion_flag=0;
  }
 }
 if(funtion_flag!=0)
 {
  if(key10)//加
  delay(10);
  if(key10)
  {
   while(!key1);
   delay(10);
   while(!key1);
   temp_num=funtion_flag; 
   switch(temp_num)
   {
    
    case 2:
    { //分钟加
     l_tmpdate'2'=fen++;
     if(fen60) fen=0; 
     display_scan(11;fen);
     write_(0x80+0x0c;1);
     break;
    }
    case 3:
    {//时钟加
     l_tmpdisplay'2'=shi++;
     if(shi24) shi=0;
     display_scan(8;shi);
     write_(0x80+0x09;1);
     break;
    }
    case 4:
    {

     l_tmpdisplay'5'=nian++;
     if(nian100) nian=0;
     display_scan(0x40+2;nian);
     write_(0x80+0x40+3;1);
     break;

    }
    case 5:
    {
     l_tmpdisplay'4'=yue++;
     if(yue13) yue=0;
     display_scan(0x40+5;yue);
     write_(0x80+0x40+6;1);
     break;
    }
    case 6:
    {
     l_tmpdisplay'3'=ri++;
     if(ri32) ri=0;
     display_scan(0x40+8;ri);
     write_(0x80+0x40+8;1);
     break;
    }
    case 7:
    {
     l_tmpdisplay'6'=xin++;
     if(xin8) xin=0;
     week_display();
     write_(0x80+0x40+11;1);
     break;
    }
   }
  } 
 }
  if(key20) //减
  delay(10);
  if(key20)
  {
   while(!key2);
   delay(10);
   while(!key2);
   temp_num=funtion_flag; 
   switch(temp_num)
   {
    
    case 2:
    {
     l_tmpdate'1'=fen;
     if(fen…1) fen=59; 
     display_scan(11;fen);
     write_(0x80+0x0c;1);
     break;
    }
    case 3:
    {
     l_tmpdisplay'2'=shi;
     if(shi…1) shi=23;
     display_scan(8;shi);
     write_(0x80+0x09;1);
     break;
    }
    case 4:
    {
     l_tmpdisplay'2'=nian;
     if(nian…1) nian=12;
     display_scan(0x40+2;nian);
     write_(0x80+0x40+3;1);
     break;
    }
    case 5:
    {
     l_tmpdisplay'2'=yue;
     if(yue…1) shi=31;
     display_scan(0x40+5;yue);
     write_(0x80+0x40+6;1);
     break;
    }
    case 6:
    {
     l_tmpdisplay'3'=ri;
     if(ri…1) ri=31;
     display_scan(0x40+8;ri);
     write_(0x80+0x40+8;1);
     break;
    }
    case 7:
    {
     l_tmpdisplay'6'=xin;
     if(xin…1) xin=7;
     week_display();
     write_(0x80+0x40+11;1);
     break;
    }
   }
    
  }


 /*us级延时函数                                        */
/*******************************************************************/

void Delay1(uint num)

  while( num ) ;


/*******************************************************************/
Init_DS18B20(void)
{  
     DQ = 1 ;      //DQ复位
     Delay1(8) ;    //稍做延时

     DQ = 0 ;      //单片机将DQ拉低
     Delay1(90) ;   //精确延时 大于 480us

     DQ = 1 ;       //拉高总线
     Delay1(8) ;

     presence = DQ ;    //如果=0则初始化成功 =1则初始化失败
     Delay1(100) ;
     DQ = 1 ; 
     
     return(presence) ; //返回信号,0=presence;1= no presence



/* 读一个字节                     */
/*******************************************************************/
 ReadOneChar(void)

uchar i = 0 ;
uchar dat = 0 ;

for (i = 8 ; i 》 0 ; i)
  {
    DQ = 0 ; // 给脉冲信号
    dat 》》= 1 ;
    DQ = 1 ; // 给脉冲信号

    if(DQ)
     dat |= 0x80 ;
   Delay1(4) ;
  }

    return (dat) ;


/* 写一个字节                                         */
/*******************************************************************/
 WriteOneChar(uchar dat)

  unsigned char i = 0 ;
  for (i = 8 ; i 》 0 ; i)
  {
    DQ = 0 ;
    DQ = dat&0x01 ;
  Delay1(5) ;

    DQ = 1 ;
    dat》》=1 ;
  }


/* 读取温度                            */
/*******************************************************************/
 Read_Temperature(void)

     Init_DS18B20() ;
  
     WriteOneChar(0xCC) ;  // 跳过读序号列号的操作
     WriteOneChar(0x44) ;  // 启动温度转换

     Init_DS18B20() ;
     WriteOneChar(0xCC) ;  //跳过读序号列号的操作
     WriteOneChar(0xBE) ;  //读取温度寄存器

     temp_data'0' = ReadOneChar() ;   //温度低8位
     temp_data'1' = ReadOneChar() ;   //温度高8位 

/*  设定显示位置                                    */
/*******************************************************************/
void lcd_pos(uchar pos)
{                          
  write_ (pos | 0x80) ;  //数据指针=80+地址变量


/*自定义字符写入CGRAM                                   */
/* 数据转换与温度显示                                              */
/*******************************************************************/
 Disp_Temperature()

  display'4'=temp_data'0'&0x0f ;
  display'0'=ditab'display'4''+0x30 ;     //查表得小数位的值
  
  display'4'=((temp_data'0'&0xf0)》》4)|((temp_data'1'&0x0f)
返回目录 上一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!