完整word版STM32温度报警传感器代码Word文档下载推荐.docx
- 文档编号:6536195
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:18
- 大小:19.09KB
完整word版STM32温度报警传感器代码Word文档下载推荐.docx
《完整word版STM32温度报警传感器代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整word版STM32温度报警传感器代码Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
TIM_IT_Update,
ENABLE//使能
);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
//TIM3中断
NVIC_InitStructure。
NVIC_IRQChannelPreemptionPriority=0;
//先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
//从优先级3级
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);
delay_ms(200);
}
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,’!
'
16,0);
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
LCD_ShowChar(0+40,150,’'
,16,0);
//去掉负号
memset(shuzu,0,20);
sprintf(shuzu,”Thetemperatureis:
%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,”Maxis%2dC,Minis%2dC"
temp_high,temp_low);
LCD_ShowString(0,90,200,16,16,shuzu);
}
if(keyvalue==1)//key0按下
temp_high--;
memset(shuzu,0,20);
sprintf(shuzu,”Maxis%2dC,Minis%2dC"
,temp_high,temp_low);
LCD_ShowString(0,90,200,16,16,shuzu);
if(gaibianshui==2)//改变上限
{
temp_low++;
memset(shuzu,0,20);
sprintf(shuzu,"
Maxis%2dC,Minis%2dC”,temp_high,temp_low);
LCD_ShowString(0,90,200,16,16,shuzu);
temp_low--;
memset(shuzu,0,20);
sprintf(shuzu,”Maxis%2dC,Minis%2dC”,temp_high,temp_low);
LCD_ShowString(0,90,200,16,16,shuzu);
}
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
#include”led。
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_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,&GPIO_InitStructure);
//推挽输出,IO口速度为50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2);
//PD。
2输出高
温度代码s18b20.c
ds18b20。
#include”delay.h"
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&
&
retry<
240)
retry++;
delay_us
(1);
};
if(retry〉=240)return1;
return0;
//从DS18B20读取一个位
//返回值:
1/0
u8DS18B20_Read_Bit(void)//readonebit
u8data;
//SETPA0OUTPUT
delay_us
(2);
DS18B20_DQ_OUT=1;
DS18B20_IO_IN();
//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〈=8;
j++)
testb=dat&0x01;
dat=dat>
>
1;
if(testb)
//Write1
delay_us(60);
}
else
//Write0
delay_us(60);
delay_us
(2);
//开始温度转换
voidDS18B20_Start(void)//ds1820startconvert
{
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);
//skiprom
DS18B20_Write_Byte(0x44);
//convert
}
//初始化DS18B20的IO口DQ同时检测DS的存在
//返回1:
不存在
存在
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_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
//输出1
DS18B20_Rst();
returnDS18B20_Check();
}
//从ds18b20得到温度值
//精度:
0。
1C
//返回值:
温度值(—550~1250)
shortDS18B20_Get_Temp(void)
u8temp;
u8TL,TH;
shorttem;
DS18B20_Start();
//ds1820startconvert
DS18B20_Check();
DS18B20_Write_Byte(0xcc);
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<
〈=8;
tem+=TL;
//获得底八位
tem=(float)tem*0。
625;
//转换
if(temp)returntem;
//返回温度值
elsereturn—tem;
键盘代码key.c
#include”key。
#include”delay.h”
//按键初始化函数
//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;
//设置成上拉输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
//初始化GPIOA15
GPIO_Pin=GPIO_Pin_5;
//PC5
GPIO_Init(GPIOC,&GPIO_InitStructure);
//初始化GPIOC5
GPIO_Pin=GPIO_Pin_0;
//PA0
GPIO_Mode=GPIO_Mode_IPD;
//PA0设置成输入,默认下拉
GPIO_Init(GPIOA,&
GPIO_InitStructure);
//初始化GPIOA。
//按键处理函数
//返回按键值
//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;
//无按键按下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word STM32 温度 报警 传感器 代码