资源简介
测试在STM8S103K3单片机上可以使用

代码片段和文件信息
#include
#define uint unsigned int
#define uchar unsigned char
#define DATA_SET PA_ODR_bit.ODR2 = 1
#define DATA_CLR PA_ODR_bit.ODR2 = 0
#define DATA_GET PA_IDR_bit.IDR2
uchar datatime = 0; //记录电平宽度
uchar datareg = 0; //存储八位数据
uchar datanum = 0; //获取当前数据情况,筛选出一字节数据
uchar dataall[3] = {0x00}; //储存所有的数据
uchar outline; //等待超时重来
uchar DHTFLAG = 0; //判断总线读取状态的标志位
//先配置时钟
void CLK_Config()
{
CLK_CKDIVR = 0x00;
}
//IO口配置,PA2 data数据总线
//把PA口的其余管脚设置为高电平,防止误触发
/*
void GPIO_Config()
{
PA_ODR_bit.ODR1 = 1;
PA_DDR_bit.DDR1 = 1;
PA_CR1_bit.C11 = 1;
PA_CR2_bit.C21 = 1;
PA_ODR_bit.ODR3 = 1;
PA_DDR_bit.DDR3 = 1;
PA_CR1_bit.C13 = 1;
PA_CR2_bit.C23 = 1;
}
*/
//参考18B20设置输出输入两种IO模式
void DATA_OUT()
{
PA_DDR_bit.DDR2 = 1; //一开始是输出模式
PA_CR1_bit.C12 = 1; //使用推挽输出模式
PA_CR2_bit.C22 = 0;
}
//输入模式
void DATA_IN() //中断上拉输入模式
{
PA_DDR_bit.DDR2 = 0;
PA_CR1_bit.C12 = 1;
PA_CR2_bit.C22 = 1;
}
//外部中断的配置
void EXTI_PA()
{
EXTI_CR1 = 0X02; //PD口对于外部中断下降沿触发
}
#pragma vector = 0x05 //PA的中断向量位
__interrupt void GPIOA_IRQHandler()
{
datatime = TIM4_CNTR; //获取两次下降沿之间的数据宽度
TIM4_CNTR = 0; //清零,再次获取下一位
datareg <<= 1; //高位先出,左移操作
if((datatime>75)&&(datatime<85)) //数据0 我就默认高位开始获取了
datareg &= 0xfe;
if((datatime>120)&&(datatime<130)) //数据1
datareg |= 0x01;
if(datanum == 7)
dataall[0] = datareg; //获取第一个字节也就是湿度整数位
if(datanum == 23) //获取第三个字节也就是温度整数位
dataall[1] = datareg;
if(datanum == 39) //获取第五个字节也就是校验(温度+湿度)位
dataall[2] = datareg;
datanum++; //每次读取一位进1
if(datanum >= 40) //数据接收完了结束
datanum = 0;
}
//定时器设定 使用通用定时器2进行精确地微秒延时
void TIM2_Config()
{
TIM2_PSCR = 0x00; //预分频器设定(该寄存器是四位寄存器)
TIM2_ARRH = 0x00; //16000 表示为 0x0010 就是说在 16000000的频率下,1微秒就会溢出
TIM2_ARRL = 0x10;
TIM2_CNTRH = 0x00; //计数器清零
TIM2_CNTRL = 0x00;
TIM2_SR1 = 0x00; //清除所有标志位
}
//基于以上设定的延时函数 本程序采用了查询等待方式进行精确延时 不过也的确是完全占用了CPU的时间,也算是一种非常粗暴的延时方式
void TIM2_Delayus(uint xus) //范围 0~65535毫秒
{
TIM2_CR1 = 0x81; //打开ARPE自动预装载使能,使能计数器
while(xus--)
{
while(!(TIM2_SR1&0X01));
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3714 2016-11-20 12:13 DHT11改写学习\Debug\Exe\STM8_DHT11.hex
文件 37732 2016-11-20 12:13 DHT11改写学习\Debug\Exe\STM8_DHT11.out
文件 44671 2016-11-20 12:13 DHT11改写学习\Debug\Obj\main.o
文件 150 2016-11-20 15:55 DHT11改写学习\Debug\Obj\STM8_DHT11.pbd
文件 11013 2016-11-20 12:13 DHT11改写学习\main.c
文件 1009 2016-11-20 15:55 DHT11改写学习\settings\STM8_DHT11.cspy.bat
文件 5627 2016-11-20 16:28 DHT11改写学习\settings\STM8_DHT11.dbgdt
文件 834 2016-11-20 16:28 DHT11改写学习\settings\STM8_DHT11.dni
文件 3244 2016-11-20 16:28 DHT11改写学习\settings\STM8_DHT11.wsdt
文件 2220 2016-11-20 16:28 DHT11改写学习\STM8_DHT11.dep
文件 41763 2016-11-13 13:26 DHT11改写学习\STM8_DHT11.ewp
文件 164 2016-11-13 13:26 DHT11改写学习\STM8_DHT11.eww
目录 0 2016-11-20 12:13 DHT11改写学习\Debug\Exe
目录 0 2016-11-13 12:35 DHT11改写学习\Debug\List
目录 0 2016-11-20 16:28 DHT11改写学习\Debug\Obj
目录 0 2016-11-13 12:35 DHT11改写学习\Debug
目录 0 2016-11-13 16:21 DHT11改写学习\settings
目录 0 2016-11-20 15:55 DHT11改写学习
----------- --------- ---------- ----- ----
152141 18
- 上一篇:ArcEngine加载地图
- 下一篇:线性换向,三维多线段变二维
相关资源
- 详细讲解柔性电子传感器和构造
- 单片机控制SHT75温湿度传感器测试
- stm32单片机IIC通讯采集sht20温湿度传感
- 基于STM32F103ZE的STH3x温湿度传感器代码
- DHT11温湿度传感器项目代码.rar
- hdc1080.pdf
- SHT30温湿度传感器程序
- STM32温湿度传感器DHT11代码,通过串口
- STM32-SHT20温湿度传感器驱动程序
- STM32F103C8T6-DHT11温湿度传感器.rar
- STM32F103--SHT30温湿度传感器
- DHT11温湿度传感器例程
- 数字温湿度传感器DHT11详解及例程利用
- stm32f103+dht11温湿度传感器例程
- 温湿度传感器DHT11资料+程序
- 乐鑫Esp8266驱动 ds18b20、dht11 温湿度传
- 基于STM32F103的温湿度SI7021程序
- CC2530+DHT11温湿度传感器+HC-SR04超声波传
- STM32+超声波传感器HC_RS04+光照传感器
- STM32F103驱动DHT22温湿度传感器、BH175
- STM32F4ZGT6控制烟雾与温湿度传感器
- DHT11数字温湿度传感器实验.rar
- STM8s读取AM2303温湿度传感器MODBUS协议
- sht20 sht30 温湿度传感器 stm8-stm32
- 温湿度传感器DHT11的Proteus仿真.zip
- STM32F103步进电机、压力传感器、温湿
- 基于STM32单片机的DHT11 温湿度传感器
- DHT11温湿度传感器串口显示,也可直接
- SHT30-31-35全套资料
- DHT22 - STM32 温湿度传感器
评论
共有 条评论