• 蓝桥杯单片机第十一届代码(省一)


    //结果出来了,省一,感觉还是稍有点瑕疵

    //main.c

    #include<i2c.h>
    #include<ds18b20.h>
    #include<key.h>
    u16 code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x73};
    u8 date[8]=0;
    bit mode=0;
    bit chose=0;
    u8 new_temp[2]={30,20};
    u8 old_temp[2]={30,20};
    bit fault=0;
    void allinit()
    {
     P2=0x80;
     P0=0xff;
     P2=0xa0;
     P0=0x00;
     P2=0x00;
    }
    void led1()
    {
     P2=0x80;
     if(fault==0)
     {
     P0=0xfe; 
     }
     else
     {
     P0=0xf6;
     }
     P2=0x00;
    }
    void led2()
    {
     P2=0x80;
     if(fault==0)
     {
     P0=0xfd; 
     }
     else
     {
     P0=0xf5;
     }
     P2=0x00;
    }
    void led3()
    {
     P2=0x80;
     if(fault==0)
     {
     P0=0xfb; 
     }
     else
     {
     P0=0xf3;
     }
     P2=0x00;
    }
    void judgeone()
    {
     u8 temp=Ds_Read();
     if((temp>new_temp[0]))
     {
      led1();
      Pcf8591_dac(210);
      
     }
     if((temp>=old_temp[1])&&(temp<=old_temp[0]))
     {
      led2();
      Pcf8591_dac(153);
     }
     if(temp<new_temp[1])
     {
      led3();
      Pcf8591_dac(105);
     }
    }
    void Delay1ms()  //@11.0592MHz
    {
     unsigned char i, j;
     _nop_();
     _nop_();
     _nop_();
     i = 11;
     j = 190;
     do
     {
      while (--j);
     } while (--i);
    }
    void display()
    {
     u8 i;
     for(i=0;i<8;i++)
     {
      
      P2=0xc0;
      P0=0x01<<i;
      P2=0xff;
      P0=~duan[date[i]];
      Delay1ms();
      P0=0xff;
      P2=0x00;
     }
    }
    void show()
    {
     u8 temp;
     if(mode==0)
     {
      judgeone();
      temp=Ds_Read();
      date[0]=12;
      date[1]=16;
      date[2]=16;
      date[3]=16;
      date[4]=16;
      date[5]=16;
      date[6]=temp/10;
      date[7]=temp%10;
     }
     if(mode==1)
     {
      date[0]=17;
      date[1]=16;
      date[2]=16;
      date[3]=new_temp[0]/10;
      date[4]=new_temp[0]%10;
      date[2]=16;
      date[6]=new_temp[1]/10;
      date[7]=new_temp[1]%10;
     }
    }
    void key_do()
    {
     Key_Scan();
     Key_Judge();
     if(key_flag==1)
     {
      key_flag=0;
      if(mode==1)
      {
       if(key_value==3)
       {
        chose=~chose;
       }
       if(key_value==2)
       {
        new_temp[chose]+=1;
       }
       if(key_value==1)
       {
        new_temp[chose]-=1;
       }
      }
      if((key_value==4)&&(mode==0))
      {
       chose=1;
       mode=~mode;
       old_temp[0]=new_temp[0];
       old_temp[1]=new_temp[1];
      }
      else if((key_value==4)&&(mode==1))
      {
       if(new_temp[1]>new_temp[0])
       {
        fault=1;
        new_temp[0]=old_temp[0];
        new_temp[1]=old_temp[1];
       }
       else
       {
        fault=0;
        old_temp[0]=new_temp[0];
        old_temp[1]=new_temp[1];
       }
       mode=~mode;
      }
     }
    }
    void main()
    {
     allinit();
     while(1)
     {
      key_do();
      show();
      display();
     }
    }
     
    //key.h
    #ifndef _key_h
    #define _key_h
    #include<STC15F2K60S2.h>
    #define KEY 1
    #define u8 unsigned char
    #define u16 unsigned int
    sbit key1=P4^4;
    sbit key2=P4^2;
    sbit key3=P3^5;
    sbit key4=P3^4;
    sbit keyrow1=P3^0;
    sbit keyrow2=P3^1;
    sbit keyrow3=P3^2;
    sbit keyrow4=P3^3;
    void Key_Scan();
    void Key_Judge();
    extern u8 key_value;
    extern bit key_flag;
    #endif
     
    //key.c
    #include<key.h>
    u8 key_value;
    bit key_flag;
    #if KEY
    u8 pdata key_catch[4]={0xff,0xff,0xff,0xff};
    u8 pdata key_backup[4]={1,1,1,1};
    u8 pdata key_statue[4]={1,1,1,1};
    u8 code button[4]={1,2,3,4};
    void Key_Scan()
    {
     u8 i=0;
     key_catch[0]=key_catch[0]<<1|keyrow1;
     key_catch[1]=key_catch[1]<<1|keyrow2;
     key_catch[2]=key_catch[2]<<1|keyrow3;
     key_catch[3]=key_catch[3]<<1|keyrow4;
     for(;i<4;i++)
     {
      if((key_catch[i]&0xff)==0x00)
      {
       key_statue[i]=0;
      }
      else if((key_catch[i]&0xff)==0xff)
      {
       key_statue[i]=1;
      }
     }
    }
    void Key_Judge()
    {
     u8 i=0;
     for(;i<4;i++)
     {
      if(key_statue[i]!=key_backup[i])
      {
       if(key_backup[i]==0)
       {
        key_value=button[i];
        key_flag=1;
       }
       key_backup[i]=key_statue[i];
      }
     }
    }
    #else
    u8 pdata key_catch[4][4]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
    u8 pdata key_backup[4][4]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    u8 pdata key_statue[4][4]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    u8 code button[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    void Key_Scan()
    {
     static u8 row=0;
     u8 i=0;
     key_catch[row][0]=key_catch[row][0]<<1|keyrow1;
     key_catch[row][1]=key_catch[row][1]<<1|keyrow2;
     key_catch[row][2]=key_catch[row][2]<<1|keyrow3;
     key_catch[row][3]=key_catch[row][3]<<1|keyrow4;
     for(;i<8;i++)
     {
      if((key_catch[row][i]&0x0f)==0x00)
      {
       key_statue[row][i]=0;
      }
      else if((key_catch[row][i]&0x0f)==0x0f)
      {
       key_statue[row][i]=1;
      }
     }
     row++;
     row&=0x03;
     switch(row)
     {
      case 0:key1=0;key4=1;break;
      case 1:key2=0;key1=1;break;
      case 2:key3=0;key2=1;break;
      case 3:key4=0;key3=1;break;
      default:break;
     }
    }
    void Key_Judge()
    {
     u8 i=0,j;
     for(;i<8;i++)
     {
      for(j=0;j<8;j++)
      {
      if(key_statue[i][j]!=key_backup[i][j])
      {
       if(key_backup[i][j]==0)
       {
        key_value=button[i][j];
        key_flag=1;
       }
       key_backup[i][j]=key_statue[i][j];
      }
      }
     }
    }

    #endif
     
     
    //i2c.c

    #include "stc15f2k60s2.h"
    #include "intrins.h"
    #define DELAY_TIME 5
    #define SlaveAddrW 0xA0
    #define SlaveAddrR 0xA1
    sbit SDA = P2^1; 
    sbit SCL = P2^0;
    void IIC_Delay(unsigned char i)
    {
        do{_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();}
        while(i--);       
    }
    void IIC_Start(void)
    {
        SDA = 1;
        SCL = 1;
        IIC_Delay(DELAY_TIME);
        SDA = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 0; 
    }
    void IIC_Stop(void)
    {
        SDA = 0;
        SCL = 1;
        IIC_Delay(DELAY_TIME);
        SDA = 1;
        IIC_Delay(DELAY_TIME);
    }

    bit IIC_WaitAck(void)
    {
        bit ackbit;
     
        SCL  = 1;
        IIC_Delay(DELAY_TIME);
        ackbit = SDA;
        SCL = 0;
        IIC_Delay(DELAY_TIME);
        return ackbit;
    }

    void IIC_SendByte(unsigned char byt)
    {
        unsigned char i;
        for(i=0; i<8; i++)
        {
            SCL  = 0;
            IIC_Delay(DELAY_TIME);
            if(byt & 0x80) SDA  = 1;
            else SDA  = 0;
            IIC_Delay(DELAY_TIME);
            SCL = 1;
            byt <<= 1;
            IIC_Delay(DELAY_TIME);
        }
        SCL  = 0; 
    }

    void Pcf8591_dac(unsigned char dat)
    {
        IIC_Start();
        IIC_SendByte(0x90);
        IIC_WaitAck();
        IIC_SendByte(0x40);
        IIC_WaitAck();
        IIC_SendByte(dat);
        IIC_WaitAck();
        IIC_Stop();
    }
     
    //i2c.h
    #ifndef _IIC_H
    #define _IIC_H
    void IIC_Start(void);
    void IIC_Stop(void); 
    bit IIC_WaitAck(void); 
    void Pcf8591_dac(unsigned char dat);
    #endif
     
    //ds18b20.c
    #include<ds18b20.h>
    void Delay15us()  //@11.0592MHz
    {
     unsigned char i;
     i = 39;
     while (--i);
    }
    void Delay60us()  //@11.0592MHz
    {
     unsigned char i, j;
     i = 1;
     j = 162;
     do
     {
      while (--j);
     } while (--i);
    }
    void Delay500us()  //@11.0592MHz
    {
     unsigned char i, j;
     _nop_();
     _nop_();
     i = 6;
     j = 93;
     do
     {
      while (--j);
     } while (--i);
    }
    void ds_init()
    {
     dq=1;
     dq=0;
     Delay500us();
     dq=1;
     Delay500us();
    }
    void write(u8 date)
    {
     u8 i=0;
     for(;i<8;i++)
     {
      dq=1;
      dq=0;
      Delay15us();
      dq=(date>>i)&0x01;
      Delay60us();
     }
    }
    u8 read()
    {
     int i=0,date;
     for(i=0;i<8;i++)
     {
      date>>=1;
      dq=0;
      dq=1;
      if(dq==1)
      {
       date|=0x80;
      }
      Delay60us();
     }
     return date;
    }
    void wr()
    {
     ds_init();
     write(0xcc);
     write(0x44);
     
    }
    void re()
    {
     ds_init();
     write(0xcc);
     write(0xbe);
    }
    u8 Ds_Read()
    {
     u8 date,low,high;
     wr();
     re();
     low=read();
     high=read();
     date=high<<4|low>>4;
     return date;
    }
     
    //ds18b20.h
    #ifndef _ds18b20_h
    #define _ds18b20_h
    #include<STC15F2K60S2.h>
    #include<intrins.h>
    #define u8 unsigned char
    #define u16 unsigned int
    sbit dq=P1^4;
    u8 Ds_Read();
    #endif
  • 相关阅读:
    iOS之蓝牙开发—CoreBluetooth详解
    iOS-GCD使用详解
    iOS—Mask属性的使用
    idea导入eclipse中的maven项目
    SQL Server 查找字符串中指定字符出现的次数
    lLinux的常用命令
    从excel表中生成批量SQL
    ORA-00911: invalid character 错误解决
    sqlserver sp_who2和inputbuffer的使用,连接数
    如果存在这个表,则删除这个表的sql
  • 原文地址:https://www.cnblogs.com/a1113775906/p/13833902.html
Copyright © 2020-2023  润新知