模拟风扇控制
解题思路
1.首先写出DS18B20的代码,显示出温度。具体请看蓝桥杯官方范例DS18B20的范程。
2.在此上面加上键扫描,read_key
3.在keycan进行对LED灯的相关操作,
4.可以另外写一个函数装填数码管的值(在这里直接在display中装载)
此次数码管显示的方法是官方范例提供,我觉得十分巧妙,应用性广,如果有更好的欢迎大家指正!!!
main.c
#include "stc15f2k60s2.h"
#include "onewire.h"
#define uchar unsigned char
#define uint unsigned int
code unsigned char tab[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0xc6};
uchar dspbuf[8] = {
10, 10, 10, 10, 10, 10, 10, 10};
uchar temper_flag = 0;
uchar temperature;
uchar flag;
uchar key5Num = 0,pwm,pwmnum = 0;
uint time = 0;
uchar count = 0,temp;
void display();
void keycan(uchar);
unsigned char read_key(void);
//close buzz and led
void cls_buzz()
{
P2 = (P2 & 0x1f) | 0xa0;
P0 = 0x00;
P2 = 0x1f;
}
void cls_led()
{
P2 = (P2 & 0x1f) | 0x80;
P0 = 0xff;
P2 = 0x1f;
}
//主函数
void main()
{
cls_buzz();
cls_led();
AUXR |= 0x80;
TMOD = 0xf0;
TL0 = 0xcd; //定时100us
TH0 = 0xd4; //
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
if(temper_flag)
{
temper_flag = 0;
temperature = rd_temperature(); //读取温度
}
keycan(read_key()); //read是键扫描
}
}
void time0(void) interrupt 1
{
static unsigned char intr;
static long int num = 0;
if(++intr