STM32温度报警传感器代码Word文件下载.docx

上传人:b****8 文档编号:21958796 上传时间:2023-02-01 格式:DOCX 页数:18 大小:18.40KB
下载 相关 举报
STM32温度报警传感器代码Word文件下载.docx_第1页
第1页 / 共18页
STM32温度报警传感器代码Word文件下载.docx_第2页
第2页 / 共18页
STM32温度报警传感器代码Word文件下载.docx_第3页
第3页 / 共18页
STM32温度报警传感器代码Word文件下载.docx_第4页
第4页 / 共18页
STM32温度报警传感器代码Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

STM32温度报警传感器代码Word文件下载.docx

《STM32温度报警传感器代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《STM32温度报警传感器代码Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

STM32温度报警传感器代码Word文件下载.docx

);

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;

//TIM3中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

//先占优先级0级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;

//从优先级3级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

//IRQ通道被使能

NVIC_Init(&

NVIC_InitStructure);

//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

TIM_Cmd(TIM3,ENABLE);

//使能TIMx外设

}

u8flag=0;

intmain(void)

u8t=0;

u8shuzu[20];

u8keyvalue=0;

u8gaibianshui=0;

shorttemperature;

delay_init();

//延时函数初始化

uart_init(9600);

//串口初始化为9600

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//设置中断优先级分组2

LED_Init();

//初始化与LED连接的硬件接口

TIM3_Int_Init(9999,7199);

//10Khz的计数频率,计数到5000为500ms

LCD_Init();

POINT_COLOR=RED;

//设置字体为红色

LCD_ShowString(0,50,200,16,16,"

STM32test"

);

LCD_ShowString(0,70,200,16,16,"

name:

zhangqiqi"

//LCD_ShowString(0,90,200,16,16,"

Max32CMin26C"

memset(shuzu,0,20);

sprintf(shuzu,"

Maxis%2dC,Minis%2dC"

temp_high,temp_low);

LCD_ShowString(0,90,200,16,16,shuzu);

while(DS18B20_Init())//DS18B20初始化

{

LCD_ShowString(0,130,200,16,16,"

DS18B20Error"

delay_ms(200);

LCD_Fill(0,130,239,130+16,WHITE);

}

POINT_COLOR=BLUE;

//设置字体为蓝色

LCD_ShowString(0,110,260,16,16,"

Thetemperatureis:

.Cnow"

LCD_ShowChar(0+25*8,110,'

'

16,0);

LCD_ShowChar(0+29*8,110,'

!

'

while

(1)

POINT_COLOR=BLUE;

if(t%10==0)//每100ms读取一次

t=0;

temperature=DS18B20_Get_Temp();

if(temperature<

0)

LCD_ShowChar(0+40,150,'

-'

16,0);

//显示负号

temperature=-temperature;

//转为正数

else

'

//去掉负号

memset(shuzu,0,20);

sprintf(shuzu,"

%3d.%1dC"

temperature/10,temperature%10);

LCD_ShowString(0,110,200,16,16,shuzu);

delay_ms(10);

//判断温度

zanshi_low=temp_low*10;

zanshi_hign=temp_high*10;

if((temperature<

zanshi_low)||(temperature>

zanshi_hign))

{

if(temperature<

zanshi_low)

{

flag=1;

printf("

chaoxiaxian"

}

if(temperature>

zanshi_hign)

flag=2;

chaoshangxian"

}

else

flag=0;

LED0=1;

//正常情况灯不亮

LED1=1;

}

//获取温度时间控制t

t++;

//浏览开关

KEY_Init();

delay_ms(10);

keyvalue=KEY_Scan(0);

if(keyvalue!

=0)

if(keyvalue==3)

{

gaibianshui=(gaibianshui+1)%3;

if(gaibianshui==1)//改变上限

if(keyvalue==2)//key1按下

{

temp_high++;

memset(shuzu,0,20);

sprintf(shuzu,"

LCD_ShowString(0,90,200,16,16,shuzu);

}

if(keyvalue==1)//key0按下

temp_high--;

if(gaibianshui==2)//改变上限

temp_low++;

temp_low--;

keyvalue=0;

voidTIM3_IRQHandler(void)//TIM3中断

if(TIM_GetITStatus(TIM3,TIM_IT_Update)!

=RESET)//检查指定的TIM中断发生与否:

TIM中断源

{

TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

//清除TIMx的中断待处理位:

//温度不正常处理灯

if(flag==1)

LED0=!

LED0;

if(flag==2)

LED1=!

LED1;

}

LED函数led.c

voidLED_Init(void)

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);

//使能PA,PD端口时钟

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;

//LED0-->

PA.8端口配置

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

//IO口速度为50MHz

GPIO_Init(GPIOA,&

GPIO_InitStructure);

//根据设定参数初始化GPIOA.8

GPIO_SetBits(GPIOA,GPIO_Pin_8);

//PA.8输出高

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;

//LED1-->

PD.2端口配置,推挽输出

GPIO_Init(GPIOD,&

//推挽输出,IO口速度为50MHz

GPIO_SetBits(GPIOD,GPIO_Pin_2);

//PD.2输出高

温度代码s18b20.c

voidDS18B20_Rst(void)

{

DS18B20_IO_OUT();

//SETPA0OUTPUT

DS18B20_DQ_OUT=0;

//拉低DQ

delay_us(750);

//拉低750us

DS18B20_DQ_OUT=1;

//DQ=1

delay_us(15);

//15US

//等待DS18B20的回应

//返回1:

未检测到DS18B20的存在

//返回0:

存在

u8DS18B20_Check(void)

u8retry=0;

DS18B20_IO_IN();

//SETPA0INPUT

while(DS18B20_DQ_IN&

&

retry<

200)

retry++;

delay_us

(1);

};

if(retry>

=200)return1;

elseretry=0;

while(!

DS18B20_DQ_IN&

240)

=240)return1;

return0;

//从DS18B20读取一个位

//返回值:

1/0

u8DS18B20_Read_Bit(void)//readonebit

u8data;

//SETPA0OUTPUT

delay_us

(2);

//SETPA0INPUT

delay_us(12);

if(DS18B20_DQ_IN)data=1;

elsedata=0;

delay_us(50);

returndata;

//从DS18B20读取一个字节

读到的数据

u8DS18B20_Read_Byte(void)//readonebyte

u8i,j,dat;

dat=0;

for(i=1;

i<

=8;

i++)

j=DS18B20_Read_Bit();

dat=(j<

<

7)|(dat>

>

1);

}

returndat;

//写一个字节到DS18B20

//dat:

要写入的字节

voidDS18B20_Write_Byte(u8dat)

{

u8j;

u8testb;

//SETPA0OUTPUT;

for(j=1;

j<

j++)

testb=dat&

0x01;

dat=dat>

1;

if(testb)

//Write1

delay_us(60);

else

//Write0

//开始温度转换

voidDS18B20_Start(void)//ds1820startconvert

{

DS18B20_Rst();

DS18B20_Check();

DS18B20_Write_Byte(0xcc);

//skiprom

DS18B20_Write_Byte(0x44);

//convert

}

//初始化DS18B20的IO口DQ同时检测DS的存在

不存在

存在

u8DS18B20_Init(void)

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

//使能PORTA口时钟

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;

//PORTA0推挽输出

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&

GPIO_SetBits(GPIOA,GPIO_Pin_2);

//输出1

returnDS18B20_Check();

//从ds18b20得到温度值

//精度:

0.1C

温度值(-550~1250)

shortDS18B20_Get_Temp(void)

u8temp;

u8TL,TH;

shorttem;

DS18B20_Start();

//ds1820startconvert

DS18B20_Write_Byte(0xbe);

//convert

TL=DS18B20_Read_Byte();

//LSB

TH=DS18B20_Read_Byte();

//MSB

if(TH>

7)

TH=~TH;

TL=~TL;

temp=0;

//温度为负

}elsetemp=1;

//温度为正

tem=TH;

//获得高八位

tem<

tem+=TL;

//获得底八位

tem=(float)tem*0.625;

//转换

if(temp)returntem;

//返回温度值

elsereturn-tem;

键盘代码key.c

//按键初始化函数

//PA15和PC5设置成输入

voidKEY_Init(void)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);

//使能PORTA,PORTC时钟

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

//关闭jtag,使能SWD,可以用SWD模式调试

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;

//PA15

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

//设置成上拉输入

//初始化GPIOA15

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

//PC5

GPIO_Init(GPIOC,&

//初始化GPIOC5

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

//PA0

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

//PA0设置成输入,默认下拉

//初始化GPIOA.0

//按键处理函数

//返回按键值

//mode:

0,不支持连续按;

1,支持连续按;

//0,没有任何按键按下

//KEY0_PRES,KEY0按下

//KEY1_PRES,KEY1按下

//WKUP_PRES,WK_UP按下

//注意此函数有响应优先级,KEY0>

KEY1>

WK_UP!

u8KEY_Scan(u8mode)

staticu8key_up=1;

//按键按松开标志

if(mode)key_up=1;

//支持连按

if(key_up&

(KEY0==0||KEY1==0||WK_UP==1))

delay_ms(10);

//去抖动

key_up=0;

if(KEY0==0)returnKEY0_PRES;

elseif(KEY1==0)returnKEY1_PRES;

elseif(WK_UP==1)returnWKUP_PRES;

}elseif(KEY0==1&

KEY1==1&

WK_UP==0)key_up=1;

//无按键按下

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1