⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mian4-21.c

📁 温度传感器
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include "lcm1602.h"
#include "12c887.h"
#include "key.h"
#define uchar unsigned char
#define uint unsigned int

unsigned char str2[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',':','-'};
unsigned char str[6]={8,8,8,8,8,8};           //此数组是用来存储改变后的年月日时分秒,后面会把他写入1288
bit m=0;//模式标志位
/******************************给12887写调整后的数据*******************************/
write_adjust()           
{
           Adr_second=str[5];
           Adr_min=str[4];
           Adr_hour=str[3];
           Adr_day=str[2];
           Adr_month=str[1];
           Adr_year=str[0];    //  写完成
           
}
/******************************给12887写调整后的数据*******************************/

/*************************显示时间***********************************************/
display_time()//调整时间时的显示界面,程序
{          DisplayOneChar(3,0,str2[2]);
           DisplayOneChar(4,0,str2[0]);
           DisplayOneChar(5,0,str2[year/10]);
           DisplayOneChar(6,0,str2[year%10]);
           DisplayOneChar(7,0,str2[16]);
           DisplayOneChar(8,0,str2[month/10]);
           DisplayOneChar(9,0,str2[month%10]);
           DisplayOneChar(10,0,str2[16]);
           DisplayOneChar(11,0,str2[day/10]);
           DisplayOneChar(12,0,str2[day%10]);
           
           DisplayOneChar(4,1,str2[hour/10]);
           DisplayOneChar(5,1,str2[hour%10]);
           DisplayOneChar(6,1,str2[16]);
           DisplayOneChar(7,1,str2[min/10]);
           DisplayOneChar(8,1,str2[min%10]);
           DisplayOneChar(9,1,str2[16]);
           DisplayOneChar(10,1,str2[second/10]);
           DisplayOneChar(11,1,str2[second%10]);
}
display_time1()//正常工作时的显示界面,只显示月日时分秒。
{          DisplayOneChar(1,0,str2[month/10]);
           DisplayOneChar(2,0,str2[month%10]);
           DisplayOneChar(3,0,str2[16]);
           DisplayOneChar(4,0,str2[day/10]);
           DisplayOneChar(5,0,str2[day%10]);
           
           DisplayOneChar(6,0,str2[17]);
           DisplayOneChar(7,0,str2[17]);
           
           DisplayOneChar(8,0,str2[hour/10]);
           DisplayOneChar(9,0,str2[hour%10]);
           DisplayOneChar(10,0,str2[16]);
           DisplayOneChar(11,0,str2[min/10]);
           DisplayOneChar(12,0,str2[min%10]);
           DisplayOneChar(13,0,str2[16]);
           DisplayOneChar(14,0,str2[second/10]);
           DisplayOneChar(15,0,str2[second%10]);
}

           
          

/*************************调整时间***********************************************/
adjust_time()
{         uchar a=16;
          bit c=1;               //C用于标志十位和个位1为十位0为个位。
          uchar *b=str;          //数组存放的是设定的时间
          uchar e=3;               //用于对移动位数进行计数,左右移不会移出范围
          write_command(0x01,1);   //清屏
          while(a!=15&&a!=14)    //15,14键值各为推出和确定,完成对时
          {     a=kbscan1();
/*******************************************************************************/                
               if(a==13)
                   {b++;
                    e++;
                    if(e>8)
                    {b=str;
                     e=3;
                     c=1;}
                   }
               else if(a==12)   //13左移,12右移按键
                   {b--;
                    e--;
                    if(e<3)
                    {b=&str[5];
                     e=8;
                     c=1;}
                    }
              else if(a<10)
                   {if(c==1)    
                      {*b=((*b)%10)+a*10;
                       c=0;
                       write_adjust();
                      }
                    else if(c==0)
                      {*b=((*b)/10)*10+a;
                        c=1;
                        write_adjust();
                      }
                   }
                
/*******************************************************************************/
           
/*******************************************************************************/
           get_time_DS12887();//读12887数据
           display_time();
           }
          
          
Adr_B=0x06;
Adr_A=0x20;//设置12887内部时钟不再计时.          
write_command(0x01,1);   //清屏         
}

main()
{          uchar d;
           initialization_Lcd();  
           start_DS12887();
    while(1)
         { 
         
         get_time_DS12887();//读12887数据
         display_time1();//正常工作时的时钟显示。
         
         d=kbscan1();     //扫描键盘
/*******************************校时程序***********************************************/         
                                           if(d==10)      //10是校时键值
                                              {Adr_B=0x86;//设置时间停止,读出的值不再变,但12887内部的时钟还在走着。
                                               Adr_A=0x00;//设置12887内部时钟不再计时.
                                               adjust_time();
                                              }
/*******************************校时程序***********************************************/            
/*******************************设置模式程序***********************************************/            
                                            else if(d==11)//11是模式切换键值
                                                   {if(m==0)//改变标志位M,在两种模式之间切换
                                                    m=1;
                                                    else m=0;
                                                   }
/*******************************设置模式程序***********************************************/  
/*******************************设定时间段,温度程序***********************************************/           
       
       
/*******************************设定时间段,温度程序***********************************************/           
               
         }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -