喉咙疼吃什么药| 锦是什么面料| 林冲到底属什么生肖的| 减肥吃什么好而且瘦的快| 蚯蚓中药叫什么| pp是什么材质| 月经提前十几天是什么原因| 溺爱什么意思| 10月28日是什么日子| 喝什么茶对身体好| 心电图异常q波什么意思| 枸杞泡酒有什么作用和功效| miffy是什么意思| 10月20日是什么星座| 血糖高什么症状| 原来是什么意思| 什么茶减肥效果好| 啐是什么意思| 有志什么成| 富二代是什么意思| 河童是什么意思| 桃胶什么时候采摘最好| 考试穿什么颜色最吉利| 血糖高能吃什么主食| 联姻是什么意思| 眉毛淡的女人代表什么| 吃什么东西补钙| 燊读什么| 什么血型招蚊子咬| 心电图伪差是什么意思| 骨加客读什么| 胸闷气短吃什么中成药| 梦见兔子是什么预兆| 银河系的中心是什么| 喝完酒头疼吃什么药| 冉字五行属什么| 经信委是干什么的| 老人嘴唇发紫是什么原因| 治疗晕病有什么好方法| 朱元璋为什么不传位给朱棣| 肾气虚吃什么药| 副厅长是什么级别| 什么叫子宫腺肌症| 刚柔并济是什么意思| 浙江属于什么方向| 经前期综合症吃什么药| 尾椎骨疼是什么原因| 幼儿牙齿黑是什么原因| cos是什么| 酒花浸膏是什么| 表姐的儿子叫什么| 什么牌子的保温杯好| 肚脐眼下面疼是什么原因| 五月一日是什么节日| 丑人多作怪什么意思| 什么是鼻炎| 窦性心动过速是什么意思| 初级会计考什么科目| 起大运是什么意思| 洗脑是什么意思| 鸭子喜欢吃什么食物| 两拐是什么军衔| 纳财是什么意思| 蚊子喜欢咬什么血型| 梦见自己相亲是什么征兆| 鼻子出汗多是什么原因| 0属于什么数| 元气什么意思| 榴莲坏了是什么味道| 天秤座男生喜欢什么样的女生| 四面受敌是什么动物| 互为表里是什么意思| 汛期是什么| 投喂是什么意思| 口干是什么原因引起的怎么治疗| 桑葚泡酒有什么功效| 牵牛花什么时候开花| 任性的女孩有什么特点| 沸去掉三点水念什么| 单招是什么学历| 手指关节肿大是什么原因| 属猪生什么属相宝宝好| 孩子注意力不集中是什么原因| 颉在姓氏里念什么| 月经不来吃什么| 腰间盘膨出和突出有什么区别| 眼睛视力模糊用什么眼药水| 男人为什么会出轨| 11月12日什么星座| 五月二十四是什么星座| 不约而至是什么意思| 葡萄胎有什么症状反应| 格五行属什么| 意会是什么意思| 豹子是什么牌子| 沉鱼落雁什么意思| 银手镯对身体有什么好处| ad什么时候吃最好| 白头翁吃什么| crp偏高说明什么| 南瓜什么人不能吃| 怡的意思和含义是什么| 卫生湿巾是干什么用的| 站久了脚后跟疼是什么原因| 因子是什么意思| 猫什么时候绝育| 卵泡刺激素是什么意思| 心悸吃什么药好| 杞菊地黄丸治什么病| 小乌龟吃什么| 愚公移山是什么故事| 枯草芽孢杆菌治什么病| 女人更年期吃什么药| 身份证号码最后一位代表什么| 什么样的升旗仪式| 吃什么补钾| 动物蛋白是什么| 缺锌会有什么症状| 心跳过快用什么药| 心脾两虚吃什么食物补最快| 朋友搬家送什么礼物好| molly是什么意思| gpr是什么意思| 什么是紫苏| 什么是中性洗涤剂| 胃总疼是什么原因| 初恋是什么| 什么是神经性皮炎| 采耳是什么意思| 社会是什么| 梦见吃酒席是什么意思| 什么动物不喝水| 2月20号是什么星座| 不举什么意思| 嘴里有粘液是什么原因| 现代是什么时候| 什么桥下没有水| 1990属马佩戴什么最佳| 细菌性感染吃什么药| 单立人加吉念什么| 下午2点是什么时辰| 吉利丁片是什么| 为什么拍照脸是歪的| 老蒯是什么意思| 女人脚浮肿是什么原因| 鱼头和什么搭配煲汤好| 苜蓿是什么| 青柠檬和黄柠檬有什么区别| lee属于什么档次| 黑醋是什么醋| 喝蒲公英茶有什么作用| 哪吒的妈妈叫什么| 什么叫夫妻| 紫色心情是什么意思| 女性头部出汗吃什么药| 舌边有齿痕是什么原因| beginning什么意思| 冲羊煞东是什么意思| 小美女是什么意思| rca是什么意思| 静脉曲张是什么引起的| 梦见婆婆去世预示什么| 什么的精神| 爸爸的爷爷叫什么| 手指甲月牙代表什么| 什么大专好就业| 凌晨4点是什么时辰| 心动是什么意思| 心凉是什么意思| 福生无量是什么意思| 眼睛上火用什么眼药水| 血糖高能吃什么主食| ac是什么意思| 胡萝卜什么时候种| 拉大便肛门口疼痛什么原因| 白骨精是什么动物| 芽原基发育成什么| 蟑螂为什么会飞| 酵素什么牌子好| 有什么不能说| 胎盘前置是什么意思| 脚踝肿什么原因| 砂仁后下是什么意思| 开方是什么意思| 小孩磨牙是什么原因引起的| 脂肪肝看什么指标| 为什么端午节要吃粽子| 移植后需要注意什么| 郡字五行属什么| 什么是uv| 两鬓长白发是什么原因| 抽象思维是什么意思| 结晶体是什么意思| 什么是马赛克| 7月4号什么星座| 感觉心慌是什么原因| 骨密度低吃什么药最快| 红眼病滴什么眼药水| 蛇为什么怕鹅| 闲暇的意思是什么| 羽衣甘蓝是什么菜| 什么的灵魂| a型血与o型血生的孩子是什么血型| 肺主治节是什么意思| 甲醇和乙醇有什么区别| 手串13颗代表什么意思| 低血糖什么不能吃| 清心寡欲什么意思| 爱出者爱返福往者福来是什么意思| 光斑是什么意思| 发声是什么意思| 欧舒丹属于什么档次| 501是什么意思| 卧推60公斤什么水平| 贝壳是什么垃圾| 水蛭是什么东西| pgi是什么意思| 查幽门螺杆菌挂什么科| giada是什么牌子| 头疼嗓子疼吃什么药| 亲热是什么意思| 人肉什么意思| 打一个喷嚏代表什么意思| 眉什么目什么| 膝关节疼痛用什么药效果最好| 目赤是什么意思| 水痘开始痒了说明什么| x表示什么| xxoo是什么意思| 宁五行属什么| 老年人脚肿挂什么科| 82年的拉菲是什么意思| crayons什么意思| 2月25日什么星座| 阿司匹林和阿莫西林有什么区别| 社畜是什么意思| 大便是黑色是什么原因| 异丙醇是什么| 什么可以误诊为畸胎瘤| 检查是否怀孕挂什么科| 月经来头疼是什么原因引起的| 花洒不出水什么原因| 大地色眼影是什么颜色| 吊瓜是什么瓜| 画蛇添足的寓意是什么| 生蚝吃了有什么好处| 后生可畏是什么意思| 孕妇吃西红柿对胎儿有什么好处| bso是什么意思| 肺痈是什么意思| 牡丹花是什么颜色| 脖子落枕贴什么膏药| 琛字五行属什么| 嗦是什么意思| 照护保险是什么| 关塔那摩监狱为什么在古巴| 节制的意思是什么| 被利用的信任是什么歌| 上皮细胞什么意思| member是什么意思| 腔调是什么意思| 老年人出虚汗是什么原因引起的| cp是什么单位| 走马观花的走是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 企业专区 ? TI ? 【MSP焕新大作战】课程三+任务一---MSPM01306实现DS18B20温度

共1条 1/1 1 跳转至

【MSP焕新大作战】课程三+任务一---MSPM01306实现DS18B20温度报警

工程师
2025-08-05 12:11:20     打赏
百度 当时人们只是觉得特朗普善用互联网,但围绕脸书的最新披露却让人们看到了互联网上的更多门道。

    本文的主要开发内容是对温度传感器的编程驱动以及实现温度报警器功能,温度报警使用有源蜂鸣器实现,首先需要设置温度传感器与MCU的引脚连接。下图为温度传感器的电路原理图、引脚功能定义,所用到的温度传感器是DS18B20,这是一颗温度检测分辨率达0.0625C°且支持单总线通信的传感器芯片。

    DS18B20原理图:

QQ图片20240511115724.png

QQ图片20240511115814.png

有源蜂鸣器原理图:

QQ图片20240511121035.png

    DS18B20概述:DS18B20是美国DALLAS半导体公司生产的单总线数字温度传感器,其可直接将温度转化成数字信号输出,具有体积小、低功耗、抗干扰能力强、精度高等优点。DS18B20采用1-Wire通信即仅采用一根数据线与微控制器进行通信。该传感器的温度检测范围为-55℃至+125℃。

    其工作特性:

    • 独特的1-Wire接口只需要一个端口引脚用于通信。

    • 多路采集能力使得分布式温度采集应用更加简单。

    • 无需外围器件。

    • 可以采用数据线供电,供电范围为3.0V至5.5V。

    • 温度可测量范围为:-55℃到+125℃(-67至+125)。

    • 内部温度采集精度可以由用户自定义为9-Bit至12-Bit。

    • 12Bit的温度采集精度转换时间最大为750ms。

    • 用户可自定义非易失性的温度报警设置。

    • 报警搜索命令识别并寻址温度超出编程限值的设备(温度报警条件)。

    • 应用于温度控制、工业系统、民用产品、温度传感器或者任何温度检测系统中。

    OneWire总线通信机制:

    

QQ图片20240511122108.png

    DS18B20需要遵循严格的时序通信才能正确写入、读取数据,如上图所示:初始化DS18B20需要发送不小于480us的低电平信号,然后拉高总线信号,拉高时间不小于15us。在之后480us内及时判断DS18B20的返回脉冲数据,判断器件是否有效。

写时隙时序图:

QQ图片20240511122709.png

读时隙时序图:

QQ图片20240511122752.png

syscfg配置:

下载链接syscfg.zip

UPP)8(DEC7C`98}7)M[O7LA.png

源代码:

#include "ti_msp_dl_config.h"
#include <math.h>
#define DS18B20_DQ_IN_Read() DL_GPIO_readPins(PORT_TempSensor_PORT,PORT_TempSensor_PIN_TempSensor_PIN)
#define delay_us 32
#define NUM_MAXLENGTH 8
uint8_t Num_List[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf};//数码管数字
volatile float temp=0.0;
uint8_t Reserved_points=4;   //默认保留4位小数
uint8_t temp_level[]={28,29};//三档温度报警

/**
 *  @brief      DS18B20时钟上升沿配置
 *
 *  @param[in]  外设端口PORTx、延时t1、延时t2
 *
 */
void DS18B20_OneWireRisingEdge_Config(GPIO_Regs* PORTx,uint32_t PINx,uint32_t t1,uint32_t t2){
        DL_GPIO_clearPins(PORTx, PINx);
        delay_cycles(delay_us*t1);
        DL_GPIO_setPins(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
        delay_cycles(delay_us*t2);
}
/**
 *  @brief      单总线配置为输入模式
 *
 *  @param[in]  None
 *
 */
void DS18B20_DQ_IN(){           //配置通信引脚为输入模式
        DL_GPIO_disableOutput(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
        DL_GPIO_initDigitalInput(PORT_TempSensor_PIN_TempSensor_IOMUX);
        DL_GPIO_setPins(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
        DL_GPIO_enableOutput(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
}
/**
 *  @brief      单总线配置为输出模式
 *
 *  @param[in]  None
 *
 */
void DS18B20_DQ_OUT(){          //配置通信引脚为输出模式
        DL_GPIO_disableOutput(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
        DL_GPIO_initDigitalOutput(PORT_TempSensor_PIN_TempSensor_IOMUX);
        DL_GPIO_setPins(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
        DL_GPIO_enableOutput(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN);
}
/**
 *  @brief      复位DS18B20
 *
 *  @param[in]  None
 *
 */
void DS18B20_RESET(){
        DS18B20_DQ_OUT();
        DS18B20_OneWireRisingEdge_Config(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN,750,60);
}
/**
 *  @brief      判断DS18B20是否存在
 *
 *  @param[in]  None
 *
 */
uint8_t DS18B20_CHECK(){
        uint8_t counters=0;
        DS18B20_DQ_IN();
        while(DS18B20_DQ_IN_Read()&&counters<200){
            counters++;
            delay_cycles(delay_us*1);
        }
        if(counters>100)        //超时未检测到器件,返回1
            return 1;
        else
            counters=0;
        while(!(DS18B20_DQ_IN_Read())&&counters<240){
            counters++;
            delay_cycles(delay_us*1);
        }

        if(counters>240)        //检测到器件但总线电平持续拉低,返回2
            return 2;
        else
    //        DL_UART_transmitData(UART_0_INST,counters);
            return 0;           //检测到器件且总线电平有效,返回0
}
/**
 *  @brief      向DS18B20写入字节数据
 *
 *  @param[in]  data字节数据
 *
 */
void DS18B20_WRITE_Byte(uint8_t data){
        uint8_t byte=data;
        DS18B20_DQ_OUT();
        for(uint8_t i=1;i<=8;i++){
            if(byte&0x01){
                DS18B20_OneWireRisingEdge_Config(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN,2,60);
            }
            else{
                DS18B20_OneWireRisingEdge_Config(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN,60,2);
            }
            byte=byte>>1;
        }
}
/**
 *  @brief      从DS18B20读取比特数据
 *
 *  @param[in]  None
 *
 */
uint8_t DS18B20_READ_Bit(){
        uint8_t bit;
        DS18B20_DQ_OUT();
        DS18B20_OneWireRisingEdge_Config(PORT_TempSensor_PORT, PORT_TempSensor_PIN_TempSensor_PIN,2,5);
        DS18B20_DQ_IN();
        delay_cycles(delay_us*12);
        if(DS18B20_DQ_IN_Read())
            bit=1;
        else
            bit=0;
        delay_cycles(delay_us*50);
        return bit;
}
/**
 *  @brief      从DS18B20读取字节数据
 *
 *  @param[in]  None
 *
 */
uint8_t DS18B20_READ_Byte(){
        uint8_t bit=0;
        uint8_t byte=0;
        for(uint8_t i=1;i<=8;i++){
            bit=DS18B20_READ_Bit();
            byte|=bit<<(i-1);
        }
        return byte;
}
/**
 *  @brief      启用DS18B20
 *
 *  @param[in]  None
 *
 */
void DS18B20_START(void){
        DS18B20_RESET();
        DS18B20_CHECK();
        DS18B20_WRITE_Byte(0xcc);
        DS18B20_WRITE_Byte(0x44);
        DS18B20_RESET();
        DS18B20_CHECK();
        DS18B20_WRITE_Byte(0xcc);
        DS18B20_WRITE_Byte(0xbe);
}
/**
 *  @brief      初始化DS18B20
 *
 *  @param[in]  None
 *
 */
uint8_t DS18B20_INIT(void){
        DS18B20_RESET();
        return DS18B20_CHECK();
}
/**
 *  @brief      获取DS18B20温度数据(小数点数据)
 *
 *  @param[in]  None
 *
 */
float DS18B20_GetTemp(void){
        float temp_value=0.0;
        uint8_t temp_msb,temp_lsb=0;
        uint16_t temp=0;

        DS18B20_START();                //采样温度值
        temp_lsb=DS18B20_READ_Byte();
        temp_msb=DS18B20_READ_Byte();
        temp=(temp_msb<<8)+temp_lsb;
        if((temp&0xF800)==0xF800){      //高5位为1表示负温度
            temp=(~temp)+1;             //将补码取反运算+1得到负温值
            temp_value=temp*(-0.0625);
        }
        else
            temp_value=temp*0.0625;
        return temp_value;
}
/**
 *  @brief      HC595时钟上升沿配置
 *
 *  @param[in]  外设端口PORTx、延时t1、延时t2
 *
 */
void HC595_CLKRisingEdge_Config(GPIO_Regs* PORTx,uint32_t PINx,uint32_t t1,uint32_t t2){
        DL_GPIO_clearPins(PORTx, PINx);
        delay_cycles(delay_us*t1);
        DL_GPIO_setPins(PORTx, PINx);
        delay_cycles(delay_us*t2);
}
/**
 *  @brief      HC595写入字节数据
 *
 *  @param[in]  byte字节数据
 *
 */
void LED_Segment_WriteByte(uint8_t byte){
    for(uint8_t i=1;i<=8;i++){
        if(byte&0x80){
            DL_GPIO_setPins(PORT_HC595_PORT,PORT_HC595_PIN_HC595_DIO_PIN);
        }
        else
        {
            DL_GPIO_clearPins(PORT_HC595_PORT,PORT_HC595_PIN_HC595_DIO_PIN);
        }
        HC595_CLKRisingEdge_Config(PORT_HC595_PORT,PORT_HC595_PIN_HC595_SCLK_PIN,2,2);
        byte<<=1;
    }
}
/**
 *  @brief      数码管显示1位数字
 *
 *  @param[in]  Num_one数字,index显示位置
 *
 */
void LED_Segment_Display_Num_One(uint8_t Num_one,uint8_t index){

    LED_Segment_WriteByte(Num_List[Num_one]);
    LED_Segment_WriteByte(1<<index);
    HC595_CLKRisingEdge_Config(PORT_HC595_PORT,PORT_HC595_PIN_HC595_RCLK_PIN,2,2);
}
/**
 *  @brief      数码管显示数字处理
 *
 *  @param[in]  Num数字
 *
 */
void Num_LED_Segment_Process(uint32_t Num){
    uint8_t num_lsb=0;
    uint8_t i;
    for(i=0;i<NUM_MAXLENGTH;i++)
    {
        num_lsb=Num%10;
        Num/=10;
        LED_Segment_Display_Num_One(num_lsb,i);
        if(Num==0)break;
    }
}
/**
 *  @brief      数码管显示浮点数处理
 *
 *  @param[in]  Num数字,Reserved_points保留小数点位数
 *
 */
void Num_LED_Segment_Process_Float(float Num,uint8_t Reserved_points){//处理数码管显示浮点数,Reserved_points为保留小数点后几位
        int Num_int=Num*pow(10,Reserved_points+1);

        if(Num_int%10>=5)//四舍五入
            Num_int=Num_int/10+1;
        else
            Num_int=Num_int/10;
        if(Reserved_points==0)
            Num_LED_Segment_Process(Num_int);
        else
        {
            Num_LED_Segment_Process(Num_int);
            LED_Segment_Display_point(0x7f,Reserved_points);
            LED_Segment_Display_point(0xff,Reserved_points);
            LED_Segment_Display_point(0xff,Reserved_points);
        }
}
int main(void)
{
        SYSCFG_DL_init();

        NVIC_SetPriority(TIMER_0_INST_INT_IRQN, 2);
        NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
        DL_TimerG_startCounter(TIMER_0_INST);//定时刷新数码管显示

        NVIC_SetPriority(TIMER_1_INST_INT_IRQN, 0);
        NVIC_EnableIRQ(TIMER_1_INST_INT_IRQN);
        DL_TimerG_startCounter(TIMER_1_INST);

        while (1) {
//            Num_LED_Segment_Process_Float(temp,Reserved_points);
            delay_cycles(delay_us*500);
        }
}
/**
 *  @brief      定时器0中断回调函数
 *
 *  @param[in]  None
 *
 */
void TIMER_0_INST_IRQHandler(void)
{
    Num_LED_Segment_Process_Float(temp,Reserved_points);
    Num_LED_Segment_Process_Float(temp,Reserved_points);
    Num_LED_Segment_Process_Float(temp,Reserved_points);
    Num_LED_Segment_Process_Float(temp,Reserved_points);
//    switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
//        case DL_TIMER_IIDX_ZERO:
//            Num_LED_Segment_Process_Float(temp,Reserved_points);
//            break;
//        default:
//            break;
//    }
}
/**
 *  @brief      定时器1中断回调函数
 *
 *  @param[in]  None
 *
 */
void TIMER_1_INST_IRQHandler(void)
{
    if(DS18B20_INIT()==0){
        temp=DS18B20_GetTemp();
        if(temp<temp_level[0]){
            DL_GPIO_setPins(PORT_BEEP_PORT,PORT_BEEP_PIN__BEEP_PIN);
        }
        else if(temp>=temp_level[0]&&temp<temp_level[1]){
            DL_GPIO_togglePins(PORT_BEEP_PORT,PORT_BEEP_PIN__BEEP_PIN);
        }
        else {
            DL_GPIO_clearPins(PORT_BEEP_PORT,PORT_BEEP_PIN__BEEP_PIN);
        }
    }
    else{
        temp=0.1000;
        DL_GPIO_setPins(PORT_BEEP_PORT,PORT_BEEP_PIN__BEEP_PIN);
        delay_cycles(delay_us*1000);//温度传感器不存在、异常,LED_Red不断闪烁
        DL_GPIO_togglePins(PORT_LED_Red_PORT,PORT_LED_Red_PIN_LED_Red_PIN);
    }

//    switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
//        case DL_TIMER_IIDX_ZERO:
//            Num_LED_Segment_Process_Float(temp,Reserved_points);
//            break;
//        default:
//            break;
//    }
}

    温度报警器实现思路是,通过编程驱动DS18B20获取当前环境温度数据,判断温度是否低于28C°,则蜂鸣器保持静音。温度处于28~29C°,蜂鸣器发出间隔报警声音。温度大于29C°,蜂鸣器发出连续报警声音。温度数据的获取由定时器1中断完成,在作者课程二任务一中有介绍过定时器中断的工作机制。数码管温度值刷新显示由定时器0中断完成。在温度报警器系统运行期间,每次温度检测均需判断温度传感器是否存在,如果器件不存在或响应异常,那么红色LED会不断闪烁,以提示系统运行出现故障。

    效果图:

0c84e5885338fca8a3a7e1cfefab9943.jpg

2427283f908da34cf14e70e3ddc04126.jpg





关键词: MSPM01306     DS18B20     温度报警器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
进仓是什么意思 沐什么意思 三个鱼读什么 一鸣惊人指什么生肖 尿频尿急小腹胀痛吃什么药
翘楚是什么意思 塞翁失马是什么意思 乳房挂什么科 姜为什么不能晚上吃 兔和什么相冲
思春是什么意思啊 点痣后用什么修复最好 睡眠不好会引起什么症状 孜然是什么 心脏支架和搭桥有什么区别
帆船像什么 小孩自闭症是什么原因引起的 胆怯的什么 肠胃镜挂什么科 pac是什么
腹肌不对称是什么原因tiangongnft.com 肚脐眼位置疼是什么原因hcv9jop6ns3r.cn 双离合是什么意思jingluanji.com 1965属什么生肖hcv8jop3ns7r.cn 什么是烤瓷牙hcv9jop5ns9r.cn
鼠冲什么生肖hcv9jop4ns2r.cn 什么是雌激素hcv9jop0ns5r.cn 青岛有什么玩的hcv8jop2ns5r.cn 中暑吃什么药见效快ff14chat.com 十月二十五是什么星座hcv8jop6ns8r.cn
白炽灯属于什么光源hcv7jop7ns4r.cn 楚门的世界是什么意思hcv8jop7ns4r.cn au是什么意思hcv9jop3ns2r.cn 扁平足适合穿什么鞋hcv8jop0ns7r.cn 眼泪多是什么原因hcv7jop7ns0r.cn
0m是什么意思hcv7jop5ns4r.cn 睡觉磨牙齿是什么原因hcv8jop2ns4r.cn 阴道b超检查什么hcv9jop3ns6r.cn 革兰阴性杆菌是什么hcv9jop7ns3r.cn 维生素B3叫什么名字cl108k.com
百度