ayld

    1. [分享] 16*16点阵字符代码生成器 21/22243 单片机 2024-09-26
      谢谢!
    2. 点阵的学习 5/2646 51单片机 2024-08-12
      谢谢!
    3. led点阵显示屏设计文档 4/3545 电源技术 2024-08-12
    4. 我用的查询,也只能传送一次,也正在找原因。
    5. 是不是能发送不接收?
    6. 慢慢调,总会好的,按要求做好读写的时序!
    7. Keil C51开发系统基本知识 10/7723 51单片机 2023-10-22
      谢谢!!!!!!!!!!!!!!!
    8. 用时分制不行吗?
    9. RISC-V 手册(中文,一本开源指令集的指南) 99/13241 国产芯片交流 2023-10-22
      看看
    10. 读出的温度是0 10/1022 51单片机 2023-08-30
      好了.
    11. tt=t*0.625 8/923 51单片机 2023-08-30
      谢谢!
    12. 读出的温度是0 10/1022 51单片机 2023-08-24
      是的,r2阻值写错了,我也发现了,时序在示波器调整后能读温度了,现在的问题是读出的温度和DS1822的不一致。谢谢!
    13. 请教DS18B20初始化失败,用MSP430F149单片机 11/8340 微控制器 MCU 2023-08-21
      是的,分享一下经验。
    14. DS18B20初始化失败 6/7777 Microchip MCU 2023-08-21
      用模拟示波器,如何得到波形的时长? 工具可以监视1-wire的状态,如何调出?
    15. 温度传感器DS18B20 10/2837 51单片机 2023-08-16
      看看
    16. 单总线温度传感器DS18B20读写实例 3/3074 微控制器 MCU 2023-08-16
      研究一下。
    17. 读出的温度是0 10/1022 51单片机 2023-08-16
       
    18. 读出的温度是0 10/1022 51单片机 2023-08-16
      #include <reg51.h> #include <intrins.h> #define uchar unsigned char    // 以后unsigned char就可以用uchar代替 #define uint  unsigned int    // 以后unsigned int 就可以用uint 代替 sbit LcdRs_P   = P3^5;        // 1602液晶的RS管脚        sbit LcdRw_P   = P3^6;        // 1602液晶的RW管脚  sbit LcdEn_P   = P3^7;        // 1602液晶的EN管脚 sbit DQ= P3^4;        // 温度传感器的引脚定义 /*********************************************************/ // 毫秒级的延时函数,time是要延时的毫秒数 /*********************************************************/ void DelayMs(uint time) {     uint i,j;     for(i=0;i<time;i++)         for(j=0;j<112;j++); } /*********************************************************/ // 延时15微秒 /*********************************************************/ void Delay15us(void) {     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_();     _nop_(); } /*********************************************************/ // 1602液晶写命令函数,cmd就是要写入的命令 /*********************************************************/ void LcdWriteCmd(uchar cmd) {      LcdRs_P = 0;     LcdRw_P = 0;     LcdEn_P = 0;     P2=cmd;     DelayMs(2);     LcdEn_P = 1;         DelayMs(2);     LcdEn_P = 0;     } /*********************************************************/ // 1602液晶写数据函数,dat就是要写入的数据 /*********************************************************/ void LcdWriteData(uchar dat) {     LcdRs_P = 1;      LcdRw_P = 0;     LcdEn_P = 0;     P2=dat;     DelayMs(2);     LcdEn_P = 1;         DelayMs(2);     LcdEn_P = 0; } /*********************************************************/ // 1602液晶初始化函数 /*********************************************************/ void LcdInit() {     LcdWriteCmd(0x38);        // 16*2显示,5*7点阵,8位数据口     LcdWriteCmd(0x0C);        // 开显示,不显示光标     LcdWriteCmd(0x06);        // 地址加1,当写入数据后光标右移     LcdWriteCmd(0x01);        // 清屏 } /*********************************************************/ // 液晶光标定位函数 /*********************************************************/ void LcdGotoXY(uchar line,uchar column) {     // 第一行     if(line==0)                 LcdWriteCmd(0x80+column);      // 第二行     if(line==1)                 LcdWriteCmd(0x80+0x40+column);  } /*********************************************************/ // 液晶输出字符串函数 /*********************************************************/ void LcdPrintStr(uchar *str) {     while(*str!='\0')             LcdWriteData(*str++); } /*********************************************************/ // 液晶输出数字 /*********************************************************/ void LcdPrintNum(uint num) {     LcdWriteData(num/100+0x30);                // 百位     LcdWriteData(num%100/10+0x30);        // 十位     LcdWriteData(num%10+0x30);                // 个位 } /*********************************************************/ // 在液晶上显示温度 /*********************************************************/ void LcdPrintTemp(int temp) {     if(temp<0)                                      {         LcdWriteData('-');                            // 负号             temp=0-temp;                                        // 负数转为正数     }     if(temp>999)                                        {         LcdWriteData(temp/1000+0x30);        // 百位         }     LcdWriteData(temp%1000/100+0x30);    // 十位     LcdWriteData(temp%100/10+0x30);        // 个位     LcdWriteData('.');                                 // 小数点     LcdWriteData(temp%10+0x30);                // 小数后一位     LcdWriteData(0xdf);                                // 摄氏度符号     LcdWriteData('C');     LcdWriteData(' '); } /*********************************************************/ // 复位DS18B20(初始化) /*********************************************************/ void DS18B20_ReSet(void) {     uchar i;     DQ=0;     i=240;     while(--i);     DQ=1;     i=30;     while(--i);     while(~DQ);     i=4;     while(--i); } /*********************************************************/ // 向DS18B20写入一个字节 /*********************************************************/ void DS18B20_WriteByte(uchar dat) {     uchar j;     uchar btmp;          for(j=0;j<8;j++)     {         btmp=0x01;         btmp=btmp<<j;         btmp=btmp&dat;                  if(btmp>0)        // 写1         {             DQ=0;//DQ=0             Delay15us();             DQ=1;             Delay15us();             Delay15us();             Delay15us();             Delay15us();         }         else            // 写0         {             DQ=0;             Delay15us();             Delay15us();             Delay15us();             Delay15us();             DQ=1;             Delay15us();         }     } } /*********************************************************/ // 读取温度值 /*********************************************************/ int DS18B20_ReadTemp(void) {     uchar j;     int b,temp=0;         DS18B20_ReSet();                            // 产生复位脉     DS18B20_WriteByte(0xcc);            // 忽略ROM指令     DS18B20_WriteByte(0x44);            // 启动温度转换指令     DS18B20_ReSet();                            // 产生复位脉     DS18B20_WriteByte(0xcc);            // 忽略ROM指令     DS18B20_WriteByte(0xbe);            // 读取温度指令     for(j=0;j<16;j++)                            // 读取温度数量     {                                 DQ=0;         _nop_();         _nop_();         DQ=1;             Delay15us();         b=DQ;         Delay15us();         Delay15us();         Delay15us();         b=b<<j;         temp=temp|b;     }          temp=(temp*625/1);                    // 合成温度值并放大10倍                         return (temp);                                // 返回检测到的温度值 } /*********************************************************/ // 主函数 /*********************************************************/ void main() {     int  temp;                                                // 保存温度传感器测量到的结果     LcdInit();                                                // 执行液晶初始化     LcdGotoXY(0,0);                                    // 定位到第0行第0列     LcdPrintStr("  temp=         ");    // 第0行显示“  temp=         ” //    LcdGotoXY(1,0);                                    // 定位到第1行第0列 //    LcdPrintStr("  dist=   cm    ");    // 第1行显示“  dist=   cm    ”          while(DS18B20_ReadTemp()==850)        // 等待温度传感器初始化完成     {         DelayMs(10);     }          while(1)     {         temp=DS18B20_ReadTemp();                // 获取温度传感器的温度值         LcdGotoXY(0,7);                                    // 定位到第0行第7列         LcdPrintTemp(temp);                            // 显示当前的温度值         LcdGotoXY(1,7);                                // 光标定位     } } 这是修改的下载代码。
    19. 读出的温度是0 10/1022 51单片机 2023-08-16
      改为 :temp=(temp*625/1);     显示 -62.5 度,可是不随温度调整而变化》
    20. 10分钟理解DS18B20数字温度计模块 23/4752 51单片机 2023-08-14
      看看

最近访客

< 1/1 >

统计信息

已有3人来访过

  • 芯积分:310
  • 好友:--
  • 主题:9
  • 回复:60

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言