Proteus和Keils程序下载(百度网盘)
链接:https://pan.baidu.com/s/1sxLmNcx8sUK-0OkzDexNVQ?pwd=nxfn
提取码:nxfn
(有一说一,CSDN上传资源就算本来下载积分设成0,也会自己调高,真的难受,还是放链接了)
STM32开发之传感器 DHT11 (读取温度和湿度))
proteus仿真图
keil程序
#include <stdio.h>//单片机工程可以不用
#include <stm32f4xx.h>//这个头文件一定要包含 ---这个头文件官方帮我们定义好了所有寄存器的地址
#define LCD_RS GPIO_Pin_0
#define LCD_RW GPIO_Pin_1
#define LCD_EA GPIO_Pin_2
int Tem = 8;
int Hum;
unsigned char table[]="Tem 00 Hum 00";
/*----systick定时器模块,用于精准延时------------------------------------------------------------------*/
void systick_init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
}
void delay_us(unsigned int us)
{
unsigned int set_time = us*84;//得到设定值 us*84<16777215 us<199728
unsigned int tmp;
//初始化
SysTick->LOAD = set_time;//把当前获取需要的延时的时间设定值丢给LOAD寄存器 24bit
SysTick->VAL = 0;//先清空计数器的当前值 写0 之后再开启定时器后 会将LOAD的设定值自动装载进VAL
//开滴答定时器
SysTick->CTRL |= 0x01;//给最低位1 开滴答定时器
while(1)
{
tmp = SysTick->CTRL;//读取
//只要该条件为非零 就表示已经递减计数到0
if(tmp & 0x10000)
{
break;//跳出
}
}
SysTick->VAL = 0;//把计数值清零
SysTick->CTRL &= (~0x01) ;//关闭定时器 0xFFFFFFFE 1110
//0|任何位不会改变该位
//1|任何位都会变为1
}
void delay_ms(unsigned int ms)
{
unsigned int set_time = ms*84000;//得到设定值 us*84000<16777215 us<199.728 最高这一次延时
unsigned int tmp;
//初始化
SysTick->LOAD = set_time;//把当前获取需要的延时的时间设定值丢给LOAD寄存器 24bit
SysTick->VAL = 0;//先清空计数器的当前值 写0 之后再开启定时器后 会将LOAD的设定值自动装载进VAL
//开滴答定时器
SysTick->CTRL |= 0x01;//给最低位1 开滴答定时器
while