蓝桥杯单片机学习过程记录(十三)第五届温度采集控制
一是锁存器的使用
P2=(P2&0X1F)
二是使用了官方提供的底层驱动程序,
有两点改动:一是onewire.c中的Delay函数要改成12个循环,因为52跟15的振荡不一样
二是onewire.h中的头文件把.c中的函数加进去,要不然报错,官方提供中没有。
三是把.c文件加到main里。
主函数
//第五届温度采集及控制
#include <STC15F2K60S2.H>
#include <intrins.h>
#include "onewire.h"
unsigned char num;
unsigned char max_1,max_2,min_1,min_2,temp_set,num_set;
unsigned char flag_jiemian,flag_led,flag_false;
unsigned char t;
unsigned char wendu,wendu_min,wendu_max;
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char seg[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
void allinit();
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void Delay500us();
void delayms(int ms);
void time0_init();
void key_scan();
unsigned char ds18_get(void);
void main(){
//初始化参数
allinit();
wendu_min=20;
wendu_max=30;
//定时器初始化
time0_init();
EA=1;ET0=1;
yi=10;er=11;san=10;si=11;wu=11;liu=11;qi=11;ba=11;
while(1){
//温度获取
wendu=ds18_get();
//进入界面功能判断
//温度显示页面
if(flag_jiemian==0){
//进行温度判断
//小于温度设定最低
if(wendu<wendu_min){
//0模式,继电器关闭,小灯0.8闪
er=0;
flag_led=0;
P2=(P2&0x1f)|0XA0;P0=0X00;
P2=P2&0x1f;
}
//大于温度设定最高
else if(wendu>wendu_max){
//2模式,小灯0.2闪,继电器开
er=2;
P2=(P2&0x1f)|0XA0;P0=0X10;
P2=P2&0x1f;
flag_led=2;
}
//中间值
else{
//1模式,小灯0.4闪,继电器关闭
er=1;
P2=(P2&0x1f)|0XA0;P0=0X00;
P2=P2&0x1f;
flag_led