注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 |
首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 |
选择分类:当前分类——学单片机 相关联或者相类似的文章: 三十分钟一个小时学会单片机(9045) 什么是单片机?单片机有什么用? (8723) 如何用STC板将代码烧录进IC(8681) 怎样安装AT51编程板的USB转串口软件?(8206) 送给单片机爱好者——LED在线编码器(1814) 送给单片机爱好者——LED点阵在线编码器(1544) 单片机系统中的汉字显示(1492) 带语音报数功能的抢答器(1489) 用VB进行串口实时数据采集(1347) 用AT89C2051设计超声波测距仪(1171) 小小电子闹钟 生活学习良伴(1165) DS1820测温原理(1129) 几句代码实现控制摄像头(转)(1117) STC单片机选型指南(1111) 自制PIC单片机编程器(1105) USB转串口芯片CH340(1010) 快速学习单片机之黄金机会!(1010) 告戒购单片机开发实验板初学者(970) 新款实用旋转LED显示屏A(890) 使用市售 USB转RS232串口与PLC通信的测试报告 (881) 首页 前页 后页 尾页 本站推荐: | 四个DS1820温度读取C源程序 四个DS1820温度读取C源程序 日期:2006-1-14 9:29:30 人气:3 查看:[大字体 中字体 小字体] // 以下是四个DS1820温度读取程序 //使用时先调用"rom()"子程序读出每个器件的序列号 //再将各个序列号填入SN数组中才能读出各个温度 #include #define uchar unsigned char sbit TMDAT = P0^1; //根据实实际情况设定 uchar TMP[4]; //读取后的4个温度值,将其除以2即可得出实际温度; uchar SN[4][8]; //4个器件的序列号,先读出单个序列号后填上才可以读取温度 uchar f[4]; //结果是否为负温,“0”为正温,“1”为负温。 ////////////////////////////////////////延时部分////////////////////////// void dmsec (unsigned int count) // { // unsigned int i; // while (count) // { // i = 115; // while (i>0) i--; // count--; // } // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////// 发送复位////////////////////////// void tmreset (void) // { // unsigned int i; // TMDAT = 0; // i = 103; // while (i>0) i--; // 延时 900 uS(11.0592Mhz时) // TMDAT = 1; // i = 4; // while (i>0) i--; // } // ////////////////////////////////////////////////////////////////////////// //判断DS1820是否存在的子程序。最好不要用,因为当器件不存在时将会进入死循环 ////////////////////////////////////// 等待存在脉冲/////////////////////// void tmpre (void) //判断器件是否存在 // { // unsigned int i; // while (TMDAT); // while (~TMDAT); // i = 4; while (i>0) i--; // } // ////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 读一位////////////////////////////// bit tmrbit (void) // { // unsigned int i; // bit dat; // TMDAT = 0; i++; // TMDAT = 1; i++; i++; //微量延时 // dat = TMDAT; // i = 8; while (i>0) i--; // 延时 // return (dat); // } // ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// 读一个字节/////////////////////// unsigned char tmrbyte (void) // { // unsigned char i,j,dat; // dat = 0; // for (i=1;i<=8;i++) // { // j = tmrbit (); // dat = (j << 7) | (dat >> 1); // } // return (dat); // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////// 写一个字节//////////////////////// void tmwbyte (unsigned char dat) // { // unsigned int i; // unsigned char j; // bit testb; // for (j=1;j<=8;j++) // { // testb = dat & 0x01; // dat = dat >> 1; // if (testb) // { // TMDAT = 0; // 写0 // i++; i++; // TMDAT = 1; // i = 8; while (i>0) i--; // } // else // { // TMDAT = 0; // 写0 // i = 8; while (i>0) i--; // TMDAT = 1; // i++; i++; // } // } // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////发送ds1820 开始转换////////////////////// void tmstart (void) // { // tmreset (); //复位 // //tmpre (); //等待存在脉冲 // dmsec (1); //延时 // tmwbyte (0xcc); //跳过序列号命令,对所有器件有效 // tmwbyte (0x44); //发转换命令 44H, // } // ////////////////////////////////////////////////////////////////////////// //////////////////////////////////读取温度//////////////////////////////// void tmrtemp () // { // uchar i,j; // uchar a,b; // for(j=0;j<4;j++) // { // tmreset(); //复位 // dmsec(1); //延时 // tmwbyte(0x55); //发送ROM匹配命令 // for(i=0;i<8;i++) // { // tmwbyte(SN[j][i]); //发送64位序列号 // } // tmwbyte (0xbe); //发送读取命令 // a = tmrbyte (); //连续读取两位温度 // b = tmrbyte (); // f[j]=b; //若b为1则为负温 // if(f[j]) // { // TMP[j]=~a+1; //如果为负温则去除其补码 // } // else // { // TMP[j]=a; // } // } // } // ////////////////////////////////////////////////////////////////////////// //以下是读取器件序列号的子程序,需要读取序列时可在程序中调用; //调用时确保总线中只有一只器件,若有多个器件时则读取出来的号码无效; //将读取出来的序列号填到前面的数组中即可使用; //平时可以将此子程序删除以节约空间。 //////////////////////////读取器件序列号子程序//////////////////////////// void rom() // { // //以下是定义8个序列号变量 // uchar sn1; // uchar sn2; // uchar sn3; // uchar sn4; // uchar sn5; // uchar sn6; // uchar sn7; // uchar sn8; // // tmreset (); //复位 // dmsec (1); //延时 // tmwbyte(0x33); //发送读序列号子程序 // sn1=tmrbyte(); //读取第一个序列号,应为16H; // sn2=tmrbyte(); //读取第二个序列号,应为10H; // sn3=tmrbyte(); // sn4=tmrbyte(); // sn5=tmrbyte(); // sn6=tmrbyte(); // sn7=tmrbyte(); // sn8=tmrbyte(); // } // ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// main() // { // do{ // rom(); //调用读序列号子程序 // //tmstart(); // dmsec(100); //如果是不断地读取的话可以不延时 // //tmrtemp(); //读取温度,执行完毕温度将存于TMP[]数组中// }while(1); // } // ////////////////////////////////////////////////////////////////////////// 1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。 2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! |
本站协议 |
版权信息 |
关于我们 |
本站地图 |
营业执照 |
发票说明 |
付款方式 |
联系方式
深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102 E-mail:51dz$163.com($改为@);Tel:(0755)27947428 工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389 |