这个传感器网上的资料很少,自己研究了几天,大致搞出来了。下面是仿真图:
单片机源程序:
- #include<reg52.h>
- #include"delay.h"
- #include"lcd602.h"
- //**************端口定义*******************
- sbit DIN=P3^1; //串行数据
- sbit LOAD=P3^2; //片选
- sbit CLK=P3^0; //串行时钟
- //**************数组定义*******************
- //uchar tab1[]={"temp: "};
- /*******************变量定义********************/
- int temp1;
- bit flag_temp;
- /*********************************SPI读两个字节*************************************/
- spi_read_byte(uint dat)
- {
- uchar i;
- uint date;
- LOAD=0; //拉低片选线,选中器件
- delayxms(5);
- //读取数据
- for (i=0;i<13;i++) //移位循环 16 次
- {
- date<<=1; // 低一位移位到最高位
- CLK=1; //清零时钟总线
-
- if(DIN)
- date|=0x0001; //每次取高字节
- CLK=0; //时钟上升沿,发送地址
- }
- for (i=0;i<16;i++) //移位循环 16 次
- {
- CLK=1; //清零时钟总线
- DIN=(bit)(dat&0x8000); //每次取高字节
- dat<<=1; //左移一位
- CLK=0; //时钟上升沿,发送地址
- }
- LOAD=1; //发送结束,上升沿锁存数据
- return(date); // 返回读出的一字节
- }
- /*******************主函数********************/
- void main(void)
- {
- chushihua();
- while(1)
- {
- temp1=spi_read_byte(0xffff); //关断模式
-
- if(temp1>0x0fff) //temp1>0x0fff 温度为负数
- {
- flag_temp=1;
- temp1=(~temp1+1)&0x1fff;
- }
- else
- {
- flag_temp=0;
- }
- if(flag_temp==0)
- {write_zifu(1,5,'+');}
- if(flag_temp==1)
- {write_zifu(1,5,'-');}
-
- write_num3(1,6,temp1*0.0625*10);
- }
- }
复制代码
全部资料51hei下载地址:
TC77温度传感器.rar
(138.06 KB, 下载次数: 57)
|