本文主要是介绍蓝桥杯单片机省赛——第十一届“温度与电压输出”程序部分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
往期回顾
第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛
第八届蓝桥杯单片机省赛
第九届蓝桥杯单片机省赛
第十届蓝桥杯单片机省赛
文章目录
- 往期回顾
- 一、前期准备
- 二、代码详情
- 1.基础代码
- 蜂鸣器/继电器/led/定时器之类的代码
- 2.按键详解
- 按键写法讲解
- 3.驱动的处理
- 驱动写法讲解
- 4.温度/数码管部分处理
- 5.总代码
一、前期准备
1:本文使用的头文件是由stc生成
点击保存文件之后,保存至自己文件目录下方即可
2:本文使用的都是官方提供的底层驱动代码
二、代码详情
1.基础代码
蜂鸣器/继电器/led/定时器之类的代码
参考之前写的文章
第四届蓝桥杯代码讲解
2.按键详解
按键写法讲解
直接跳转以前的文章即可
多种蓝桥杯/51按键写法详解
3.驱动的处理
驱动写法讲解
直接跳转以前的文章即可
蓝桥杯驱动处理
4.温度/数码管部分处理
直接跳转以前的文章即可
蓝桥杯温度部分处理
5.总代码
#include<stc15f2k.h>
#include<iic.h>
#include<onewire.h>
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;char dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6,0x8c};
char disdula[]={0,0,0,0,0,0,0,0};int diswela,wei=9,key,ms,sign,temp;
int max=30,min=20,t_max=30,t_min=20;
int lock=1,lock_h,lock_l,lock_1;bit flag,shezhi,yichang;void buzz()
{P2=((P2&0x1f)|0xa0);P0=0x00;P2&=0x1f;P2=((P2&0x1f)|0x80);P0=0xff;P2&=0x1f;
}void led(int on)
{P2=((P2&0x1f)|0x80);P0=on;P2&=0x1f;
}void delay(int x)
{int i;while(x--)for(i=0;i<5*123;i++);
}void din()
{TMOD=0x10;TH1=(65536-11059/12)/256;TL1=(65536-11059/12)%256; EA=1;ET1=1;TR1=1;
}void display()
{if(diswela==wei&&ms>=1000){diswela=diswela+2;}P2=((P2&0x1f)|0xe0);P0=0xff;P2&=0x1f;P2=((P2&0x1f)|0xc0);P0=1<<diswela;P2&=0x1f;P2=((P2&0x1f)|0xe0);P0=dula[disdula[diswela]];P2&=0x1f;if(++diswela>=8)diswela=0;
}void display_temp()
{disdula[0]=12;disdula[1]=11;disdula[2]=11;disdula[3]=11;disdula[4]=11;disdula[5]=11;disdula[6]=temp/10;disdula[7]=temp%10;
}void wendu()
{int LSB,MSB;Init_DS18B20();Write_DS18B20(0xcc);Write_DS18B20(0x44);delay(100);Init_DS18B20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);LSB=Read_DS18B20();MSB=Read_DS18B20();Init_DS18B20();temp=0x00;temp=MSB;temp=(temp<<8)|LSB;if((temp&0xf800)==0x0000){temp>>=4;temp=temp+(LSB&0X0F)*0.0625;}
}char anjian()
{static int key_up=1;int keyscan=0;if(key_up&(s7==0||s6==0||s5==0||s4==0)){delay(20);key_up=0;if(s4==0)keyscan=4;else if(s5==0)keyscan=5;else if(s6==0)keyscan=6;else if(s7==0)keyscan=7;}else if(s4==1&&s5==1&&s6==1&&s7==1)key_up=1;return keyscan;
}void display_shezhi()
{disdula[0]=13;disdula[1]=11;disdula[2]=11;disdula[3]=max/10%10;disdula[4]=max/1%10;disdula[5]=11;disdula[6]=min/10%10;disdula[7]=min/1%10;
}void da(int date)
{IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(0x40);IIC_WaitAck();IIC_SendByte(date);IIC_WaitAck();IIC_Stop();
}void shuchu()
{if(temp>max)da((255/5)*4); else if(temp>=min&&temp<=max)da((255/5)*3); else if(temp<min)da((255/5)*2);
}void main()
{buzz();wendu();din();while(1){shuchu();if(shezhi==0){wendu();display_temp();}else if(shezhi==1){display_shezhi();}if(flag==1){if(yichang==0){if(temp>max)led(0xfe); else if(temp>=min||temp<=max)led(0xfd); else if(temp<min)led(0xfb);} else led(0xf7);flag=0;key=anjian();switch(key){case 4:if(shezhi==0){shezhi=1;wei=6;}else {shezhi=0;wei=9;}if(max>=min){yichang=0;t_max=max;t_min=min;}else if(max<min){yichang=1;max=t_max;min=t_min;} break;case 5: if(wei!=9){if(wei==6)wei=3;else wei=6; } break;case 6:if(wei==3){if(max==99)max=99;else max++; } else if(wei==6){if(min==99)min=99;else min++;} break;case 7:if(wei==3){if(max==0)max=0;else max--; } else if(wei==6){ if(min==0)min=0;else min--;} break;}}}
}void qa() interrupt 3
{TH1=(65536-11059/12)/256;TL1=(65536-11059/12)%256;ms++;if(!(ms%100))flag=1;if(ms>=1500)ms=0;display();
}
这篇关于蓝桥杯单片机省赛——第十一届“温度与电压输出”程序部分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!