资源简介
测试在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加载地图
- 下一篇:线性换向,三维多线段变二维
相关资源
- 51单片机DHT11温湿度传感器12864显示
- DHT11温湿度传感器 资料
- DHT11程序液晶1602显示湿度和温度
- 基于Atmega16湿度传感器源代码
- am2301 温湿度传感器程序
- DSP28335控制DHT11温湿度传感器
- 基于MC9S12XS128的温湿度传感器DHT11程序
- SHT20温湿度传感器程序gpio模拟I2C+中文
- hdc1080_drive.rar
- SHT20温湿度传感器英文数据手册。内含
- SHT20温湿度传感器
- ATH15调试 - 20190528 - SHERAUPLOAD.rar
- 温湿度传感器DHT11数字(附1602显示程
- Arduino uno+esp8266+onenet+dht11温湿度传感器
- 基于STM32F103ZET DHT11 温湿度传感器程序
- SHT11 温湿度传感器 STM32驱动
- MSP430G2553驱动DHT11温湿度传感器
- Arduino-DHT11温湿度传感器库文件
- 基于STM32F103的SHT11温湿度传感器采集程
- SHT11温湿度传感器仿真
- STM32F103读SHT31温湿度传感器代码,实测
- 温湿度传感器DHT11+1602显示+串口
- 温湿度传感器DHT11在mini2440上基于lin
- STC15+AHT10温湿度传感器+LCD12864.rar
- 基于STM32F4的DHT11温湿度传感器的源代
- DHT11库文件和
- STC15F2K60S2读取DHT11温湿度传感器数据串
- DHT11温湿度传感器MSP430F149)
- stc12单片驱动DHT11温湿度传感器
- DHT11 温湿度传感器1602显示 可用程序
评论
共有 条评论