蓝桥杯c51单片机省赛温度记录器

温度记录器

#include <STC15F2K60S2.H>
#include “DS18b20.H”
#include <INTRINS.H>
#define Y(n) P2=P2&0x1F|(n<<5),P2=P2&0x1F
unsigned char digit[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF,0xC6};
unsigned char num[8];
unsigned char c;
static unsigned long s=0;
void buzz_relay(char i,char j)
{
if(i0&&j0)
{
P0=~((1<<6)|(1<<4));
Y(5);
}
}
void led_on(unsigned char n)
{
if(n1)
{
P0=0xFF;
P00=0;
Y(4);
}
if(n
2)
{
P0=0xFF;
P01=0;
Y(4);
}
if(n==3)
{
P0=0xFF;
P02=0;
Y(4);
}

}

void digit0num(unsigned char a,unsigned long n)
{
char i;
for(i=7;i>=4;i–)
{
num[i]=n%10;
n/=10;
}
num[0]=11;
num[1]=a;
num[2]=11;
num[3]=10;
}
void digit1num(unsigned long n)
{
char i;
for(i=6;i>=5;i–)
{
num[i]=n%10;
n/=10;
}
num[0]=11;
num[1]=4;
num[2]=11;
num[3]=10;
num[4]=10;
num[7]=12;

}

void display()
{
static char i=0;

P0=0xFF;
Y(7);

P0=(1<<i);
Y(6);

P0=digit[num[i]];
Y(7);

if(++i==8)
    i=0;

}
unsigned short TH1_H,TL1_H,TH1_L,TL1_L;
unsigned short W;
bit keyflag0=0; //有时间就减
bit keyflag1=0; //一秒一秒减

static unsigned short keycount0=0;

void timer0_init()
{
EA=1;
ET0=1;
ET1=1;
TMOD=TMOD&0x00|0x11;
TH0=(65536-2000)>>8;
TL0=(65536-2000)&0x0F;
TR0=1;
TR1=0;

}

void timer0_isr() interrupt 1
{
TH0=(65536-2000)>>8;
TL0=(65536-2000)&0x0F;
display();
if(++keycount0==500)
{
keycount0=0;
keyflag1=1;
}

}
void timer1_isr() interrupt 3
{

    if(P34==1)
    {
        TH1=TH1_H; 
        TL1=TL1_H;
        P34=0;
    }
    else 
    {
        TH1=TH1_L; 
        TL1=TL1_L;
        P34=1;
    }     

}
unsigned char key_id()
{
unsigned char id=0;
P3=P3|0x0F;
if(P300)
id=7;
if(P31
0)
id=6;
if(P320)
id=5;
if(P33
0)
id=4;
return id;

}
unsigned char key_id_down()
{
static unsigned char lastid=0;
unsigned char thisid;
static unsigned char ret=0;
thisid=key_id();
if(lastid==0&&thisid!=0)
ret=thisid;
else
ret=0;
lastid=thisid;
return ret;
}

void key_proc(unsigned char id)
{

static unsigned char n=1;
static unsigned char d=0;
if(id==4)
{
    n=n+1;
    if(n==4)
        n=1;                
}
if(id==5)
{
    s=s+60;        
    keyflag0=1;                  
}
if(keyflag0==1)
{
    if(keyflag1==1)
    {                    
        s--; 
        keyflag1=0;
        if(s==0)
        {
            keyflag0=0;  //当没时间,停止减
            TR1=0;
        }
            
    } 
           
}
if(id==6)
{
    TR1=0;
    s=0;
    keyflag0=0;
    
    //led_off();
    

} 
if(id==7)
{
    d=d+1; 
    if(d==2)
        d=0;
             
}
if(d==1)
{             
        digit1num(c);                                                                    
}
if(d==0)
{
    digit0num(n,s);
}
if(n==1)
{ 
    led_on(n);
    W=200;
    TH1_H=(65536-W)>>8; 
    TL1_H=(65536-W)&0x00FF;
    
    TH1_L=(65536-(1000-W))>>8; 
    TL1_L=(65536-(1000-W))&0x00FF;
    TR1=1;
    
}
if(n==2)
{
    led_on(n);
    W=300;
    TH1_H=(65536-W)>>8; 
    TL1_H=(65536-W)&0x00FF;
    
    TH1_L=(65536-(1000-W))>>8; 
    TL1_L=(65536-(1000-W))&0x00FF;
    TR1=1;
         
}
if(n==3)
{
    led_on(n);
    W=700;
    TH1_H=(65536-W)>>8; 
    TL1_H=(65536-W)&0x00FF;
    
    TH1_L=(65536-(1000-W))>>8; 
    TL1_L=(65536-(1000-W))&0x00FF;
    TR1=1;
    
}

}

int main()
{

buzz_relay(0,0); 
digit0num(1,0);
timer0_init();
while(1)
{          
    key_proc(key_id_down());
    c=ds18b20_read_value();  
            
}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值