找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1611|回复: 2
收起左侧

蓝桥杯温度记录器

[复制链接]
ID:656258 发表于 2019-12-4 20:42 | 显示全部楼层 |阅读模式
         #include "reg52.h"
         #include "onewire.h"
         #include "ds1302.h"
         #define uchar unsigned char
         #define uint unsigned int
         sfr AUXR=0x8e;
    unsigned char code ds[]={50,59,23};
    unsigned char shijian[7];
    unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
    void smg_xianshi(uchar yi,er,san,si,wu,liu,qi,ba);
    void delay(uint x);
    uchar yi,er,san,si,wu,liu,qi,ba;
           void readtime();
        void dsinit();
        void allinit();
       
        uchar key_panjian();
          void Timer0Init(void);
        void zhongduan();
    uchar  tab1[10];
        uchar jiemian=0x10,ww=0,qiehuan_flag=0;         //10自动界面//20时钟界面//30温度显示界面 //40温度采集显示界面//
        uint tt=0;
        uchar k=0,aa;
    uchar q=0;
        uint times=0;
        uchar work_flag=0,work_end=0,p=0;



         void readtime()
                {
                        unsigned char i;
                        unsigned char addr=0x81;
                    Ds1302_Single_Byte_Write(0x8e,0x00);
               
               
                        for(i=0;i<7;i++)
                        {         
                            shijian[i]=Ds1302_Single_Byte_Read(addr);
                                addr=addr+2;
                        }
                        Ds1302_Single_Byte_Write(0x8e,0x80);       
                }
               
               
                 void dsinit()
                {
                        unsigned char i;
                        unsigned char addr=0x80;
                        Ds1302_Single_Byte_Write(0x8e,0x00);
                        for(i=0;i<7;i++)
                        {
                                Ds1302_Single_Byte_Write(addr,ds[i]);
                                addr=addr+2;
                        }
                        Ds1302_Single_Byte_Write(0x8e,0x80);
                       
                }

       
           void delay(uint x)
                 {
                         uchar i;
                         while(x--)
                 {
                        for(i=0;i<120;i++);
                 
                 }
                 }

                 void smg_xianshi(uchar yi,er,san,si,wu,liu,qi,ba)
       
                  {
                           P2=0xc0;
                         P0=0x01;
                         P2=0xe0;
                         P0=tab[yi];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x02;
                         P2=0xe0;
                         P0=tab[er];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x04;
                         P2=0xe0;
                         P0=tab[san];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x08;
                         P2=0xe0;
                         P0=tab[si];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x10;
                         P2=0xe0;
                         P0=tab[wu];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x20;
                         P2=0xe0;
                         P0=tab[liu];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x40;
                         P2=0xe0;
                         P0=tab[qi];
                         delay(10);
       
                         P2=0xc0;
                         P0=0x80;
                         P2=0xe0;
                         P0=tab[ba];
                         delay(10);
       
                  }
         
          void main()
          {       
                          uchar j=0,flag=0,flag1=0,ls1=0,qi=0,ba=1;
                          uchar set_time=1;
                          
               
                          dsinit();
                          allinit();
                          Timer0Init();
                            while(1)
                  {          
                        j=key_panjian();
                                  switch(jiemian)
                                {
                                 case 0x10:
//                                 times=200;
                                 yi=11,er=11,san=11,si=11,wu=11,liu=10;    //11//
                                 switch(j)
                                 {
                                  case 1:
                                  break;
                                  case 2:
                                  break;
                                  case 3:
                                  work_flag=1;
                                  jiemian=0x20;
                                  q=0;
                                  break;
                                  case 4:
                                  set_time++;
                                  if(set_time>4)
                                  set_time=1;
                                  if(set_time==1)
                                  {       
                                          qi=0;
                                          ba=1;
                                          times=200;
                                  }
                                  else if(set_time==2)
                                  {
                                             qi=0;
                                          ba=5;
                                          times=1000;
                                  }
                                   else if(set_time==3)
                                  {
                                             qi=3;
                                          ba=0;
                                          times=6000;
                                  }
                                   else if(set_time==4)
                                  {
                                             qi=6;
                                          ba=0;
                                          times=12000;
                                  }
                                      break;
                                      default:break;
                                 }
                                      break;
                                 case 0x20:
                                 
                                readtime();
                                yi=shijian[2]/10;er=shijian[2]%10;                 //22//
                                si=shijian[1]/10;wu=shijian[1]%10;
                                   qi=shijian[0]/10;ba=shijian[0]%10;
                                       
                                if(shijian[0]%2==0)
                                            {
                                                         san=11;
                                                         liu=11;
                                             }       
                                             else
                                             {
                                                         san=10;
                                                         liu=10;
                                            }
                                if(work_end==1)
                                  {
                                  jiemian=0x30;                        //55//
                                   }
                                 break;
                                 case 0x30:
                                 yi=10,er=0,san=0,si=11,wu=11,liu=10;         //66//
                                 qi=tab1[9]/10;
                                 ba=tab1[9]%10;
                                  switch(j)
                                 {
                                  case 1:

                                  break;
                                  case 2:
                                  work_end=0;
                                  P2=0x80;P0=0xff;P2=0x1f;          //77//
                                  jiemian=0x40;

                                  break;
                                  case 3:
                                  
                                  break;
                                  case 4:
                                  
                                  break;
                                  default:break;
                                 
                                 }
                                 break;
                                 case 0x40:

                                if(qiehuan_flag!=0)                                                                 //88//
                                {
                                 qiehuan_flag=0;
                                 qi=tab1[p]/10;
                                 ba=tab1[p]%10;
                                 yi=10,er=(p+1)/10,san=(p+1)%10,si=11,wu=11,liu=10;
                                 p++;
                                 if(p>9)
                                 p=0;
                                 }
                                         switch(j)
                                 {
                                  case 1:
                                         qiehuan_flag=0xff;
                                         jiemian=0x10;
                                          if(times==200)
                                  {       
                                          qi=0;
                                          ba=1;
                                         
                                  }
                                  else if(times==1000)
                                  {
                                            qi=0;
                                         ba=5;
                               
                                  }
                                   else if(times==6000)
                                  {
                                            qi=3;
                                         ba=0;
                               
                                  }
                                   else if(times==12000)
                                  {
                                            qi=6;
                                         ba=0;
                                       
                                  }
                                  break;
                                  case 2:
                                  

                                  break;
                                  case 3:
                                  
                                  break;
                                  case 4:
                                  
                                  break;
                                  default:break;
                                 
                                 }

                                 break;
                                 default:break;

                                }
                             
                                 



           smg_xianshi(yi,er,san,si,wu,liu,qi,ba);
                       }
                       }



                 //判键子程序//
                 uchar key_panjian()
         {

                     uchar i,key=0;
                     P3=0x0f;
                         i=P3;
                         i=i&0x0f;
                         if(i!=0x0f)
                 {
                    delay(20);
                         i=P3;
                        i=i&0x0f;
                        if(i!=0x0f)
             {
                switch (i)
                    {
                    case 0x0e:key=1;break;
                    case 0x0d:key=2;break;
                    case 0x0b:key=3;break;
                    case 0x07:key=4;break;
                        default: break;
                }
         }
             }                    
                                      i=P3;
                                i=i&0x0f;
                         while(i!=0x0f)
                                {         
                    P3=0x0f;
                                       i=P3;
                                i=i&0x0f;
                                }
           return key;

      }

                void allinit()
                            {
                                P2=0XA0;
                                P0=0X00;//关闭蜂鸣器,继电器
                               
                                P2=0X80;
                                P0=0XFF;//关闭LED灯
                               
                            }
                        void Timer0Init(void)                //5毫秒@11.0592MHz
                   {
                                AUXR |= 0x80;                //定时器时钟1T模式
                                TMOD &= 0xF0;                //设置定时器模式
                                TL0 = 0x00;                //设置定时初值
                                TH0 = 0x28;                //设置定时初值
                                TF0 = 0;
                                EA=1;
                                 ET0=1;                //清除TF0标志
                                TR0=1;                //定时器0开始计时
                   }

                        void zhongduan() interrupt 1
                        {
                          
                          
                          aa++;
                          ww++;
                             tt++;
                    if(work_flag==1)
                        {
               
                          if(tt>=times)
                         {        
                             tt=0;
                            k=RD_temper();
                          if(q<10)
                                 {          
                                 tab1[q++]=k;  
                                 }
                                else
                                {
                            q=0;
                                work_flag=0;
                                work_end=1;                   //33//

                                }
                         }
                        }
                        if((work_end==1)&&(aa==200))
                        {
                        aa=0;
                          P2=0x80;P0=0xfe;P2=0x1f;
                        }
                        else if((work_end==1)&&(aa==100))
                        {
                         
                         P2=0x80;P0=0xff;P2=0x1f;
                        }
                  if(jiemian==0x40)
                  {
                   if(ww==200)
                   {
                        ww=0;
                           qiehuan_flag=1;
                   }
//                   else if(ww==100)
//                   {
//                         qiehuan_flag=0;
//                   }
                  }
                        }


回复

使用道具 举报

ID:1 发表于 2019-12-5 15:12 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:785152 发表于 2020-6-20 23:30 | 显示全部楼层
有仿真图?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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