北梦夏栀QAQ 2019-02-27 17:23
浏览 483

蓝桥杯单片机2014-简易温度采集与控制装置的一些问题

求求大家帮我看看问题在哪里
题目附图片
#include "STC15F2K60S2.h"
#include "intrins.h"
#include "ds18b20.h"
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //0 1 2 3 4 5 6 7 8 9 ¿Õλ -
unsigned char a[8];
unsigned char b[4]={3,0,2,0};
unsigned char max,min,Temp,qujian,key_value,jiebian,key,count,led_time,flag,flag1;
sbit r1=P3^0;
sbit r2=P3^1;
sbit r3=P3^2;
sbit r4=P3^3;
sbit c1=P4^4;
sbit c2=P4^2;
sbit c3=P3^5;
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;

i = 108;
j = 145;
do
{
    while (--j);
} while (--i);

}

void Timer0Init(void) //1ms@11.0592MHz
{
AUXR |= 0x80;

TMOD &= 0xF0;

TL0 = 0xCD;

TH0 = 0xD4;

TF0 = 0;

TR0 = 1;

}

unsigned char key_scan()
{
r1=0;
r2=r3=r4=1;
c1=c2=c3=1;
if(!c1) key_value=0;
else if(!c2) key_value=1;
else if(!c3) key_value=2;
r2=0;
r1=r3=r4=1;
c1=c2=c3=1;
if(!c1) key_value=4;
else if(!c2) key_value=5;
else if(!c3) key_value=6;
r3=0;
r1=r2=r4=1;
c1=c2=c3=1;
if(!c1) key_value=8;
else if(!c2) key_value=9;
else if(!c3) key_value=10;
r4=0;
r1=r2=r3=1;
c1=c2=c3=1;
if(!c1) key_value=12;
else if(!c2) key_value=13;
else if(!c3) key_value=14;
return key_value;
}
unsigned char ReadTemp()
{
unsigned char TL,TH,temp;

init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);

init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
TL=Read_DS18B20();
TH=Read_DS18B20();
temp=(TH<<4)|(TL>>4);

return temp;

}

void display()
{
unsigned char number;
P2=((P2&0x1f)|0xE0);
P0=0xff;
P2=((P2&0x1f)|0xC0);
P0=1<<number;
P2=((P2&0x1f)|0xE0);
P0=tab[a[number]];
if(++number==8)
number=0;
}

void jiemian()
{
Temp=ReadTemp();
if(jiebian==0)
{
a[0]=11;
a[1]=qujian;
a[2]=11;
a[3]=a[4]=a[5]=10;
a[6]=Temp/10;
a[7]=Temp%10;

}
if(jiebian==1)
{
a[0]=11;
a[1]=b[0];
a[2]=b[1];
a[3]=a[4]=10;
a[5]=11;
a[6]=b[2];
a[7]=b[3];

}
}

void shezhi()
{
if(key>4)key=4;
if(key<0)key=0;
switch(key_value)
{
case 0:if(jiebian==1){b[key]=0;key+=1;}break;
case 1:if(jiebian==1){b[key]=1;key+=1;}break;
case 2:if(jiebian==1){b[key]=2;key+=1;}break;

    case 4:if(jiebian==1){b[key]=3;key+=1;}break;
    case 5:if(jiebian==1){b[key]=4;key+=1;}break;
    case 6:if(jiebian==1){b[key]=5;key+=1;}break;

    case 8:if(jiebian==1){b[key]=6;key+=1;}break;
    case 9:if(jiebian==1){b[key]=7;key+=1;}break;
    case 10:if(jiebian==1){b[key]=8;key+=1;}break;

    case 12:if(jiebian==1){b[key]=9;key+=1;}break;
    case 13:flag1++;
    if(flag1==2)
    {
        flag1=0;
        jiebian=0;
    }
    if(flag1==1)
    {
        jiebian=1;
    }

    break;          
    case 14:if(jiebian==1){key-=1;b[key]=10;}break;
}

}
void panding1()
{

if(Temp {
Delay10ms();
if(Temp {
qujian=0;
led_time=800;
P2=((P2&0x1f)|0xA0);
P0=0x00;
}
}
if(min {
Delay10ms();
if(min {
qujian=1;
led_time=400;
P2=((P2&0x1f)|0xA0);
P0=0x00;
}
}
if(Temp>max)
{
Delay10ms();
if(Temp>max)
{
qujian=2;
led_time=200;
P2=((P2&0x1f)|0xA0);
P0=0x10;
}
}
}
void panding2()
{
if(max<min)
{
P2=((P2&0x1f)|0x80);
P0=0xfd;
}
else
{
P2=((P2&0x1f)|0x80);
P0=0xff;
}
}
void Timer0() interrupt 1
{
display();
count++;
if(count==led_time)
{
count=0;
flag++;
}
if(flag==2)flag=2;
if(flag==1)
{
P2=((P2&0x1f)|0x80);
P0=0xfe;
}
if(flag==0)
{
P2=((P2&0x1f)|0x80);
P0=0xff;
}
}
void mian()
{
P2=((P2&0x1f)|0xA0);
P0=0x00;
P2=((P2&0x1f)|0x80);
P0=0xff;
Timer0Init();
EA=1;
ET0=1;
while(1)
{
key_scan();
max=b[0]*10+b[1];
min=b[2]*10+b[3];
panding1();
jiemian();
shezhi();
panding2();

}
}

图片说明图片说明图片说明图片说明

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 易语言把MYSQL数据库中的数据添加至组合框
    • ¥20 求数据集和代码#有偿答复
    • ¥15 关于下拉菜单选项关联的问题
    • ¥20 java-OJ-健康体检
    • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
    • ¥15 使用phpstudy在云服务器上搭建个人网站
    • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
    • ¥15 vue3+express部署到nginx
    • ¥20 搭建pt1000三线制高精度测温电路
    • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况