DS18B20温度传感器和数码管显示例程_第1页
DS18B20温度传感器和数码管显示例程_第2页
DS18B20温度传感器和数码管显示例程_第3页
DS18B20温度传感器和数码管显示例程_第4页
DS18B20温度传感器和数码管显示例程_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/DS18B20温度传感器和数码管显示/编程时间:2010.4.7-2010.4.9/*/连线表: CPU=stc89C52 SysClock=12MHz / LEDLE=P1.0 控制位高电平有效 LEDSEG=P2 KEYBOARD=P3 LEDWEI=P0.5-0,LED高到底/*/DS18B20/*/连线表: CPU=stc89C52 SysClock=12MHz */单总线: TMDAT=P1.1/ /* #include #define uchar unsigned char#define uint unsigned intuchar discount=0;/显示扫描位计数uchar last=0;/最终温度值uchar itcount=0x13;/定时器延时计数uchar seg4;/数码管显示暂存uchar tem2;/读取温度暂存uchar flag=0;/温度正负标志位/*LED引脚定义*/ sfr LEDSEG=0x80;/P2 sfr LEDWEI=0xA0;/P3/*DS18B20引脚定义*/ sbit TMDAT=P10; /温度传感器数据位/*DS18B20函数定义*/void dmsec(uint count);/延时(count)毫秒void tmreset(void); /产生复位信号void tmpre(void); /检测器件应答信号bit tmrbit(void); /从总线读一个bituchar tmrbyte(void); /从总线读一个字节void mwbyte(uchar dat);/向总线写一个字节void tmstart(void); /启动一次温度转换uchar tmrtemp(void); /读取温度数据/*LED函数定义*/uchar * uchartodectoseg(uchar unm);/字符转换为十进制然后转换为数码管段表void disp(uchar *seg);/显示函数void delay_ms(uint t); /延时函数/*/uchar code table= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xc6;/*数码表*0 1 2 3 4 5 6 7 8 9 无显示 C*/*/ uchar * uchartodectoseg(uchar unm)uchar x00,xx,x0,x,n;x00=unm/100;/取百位xx=unm%100;/取余x0=xx/10;/取十位x=xx%10;/取余即取个位n=0;segn=tablex00;n+;segn=tablex0;n+;segn=tablex;n+;segn=table11;/最后一位显示摄氏度符号Cif(flag=1)seg0=0x40;/显示负号-if(seg0=table0)seg0=table10; /如果百位为零则不显示if(seg0=table0)&(seg1=table0)seg1=table10;/如果百位为零且十位为零则十位不显示return seg; /*/*DELAY*/void delay_ms(uint t)uint m,n;for(m=0;mt;m+)for(n=0;n950;n+);/*/*显示LEDSEG*/void disp(uchar *seg)uchar wei=0x08,0x04,0x02,0x01;/位扫描码/LEDSEG=seg10; LEDWEI =weidiscount;LEDSEG = segdiscount;delay_ms(1);discount+; if(discount=4)delay_ms(1);discount=0;/LEDSEG=seg10; LEDWEI=weidiscount;LEDSEG=segdiscount;/检测是否扫描完,扫描完的话则重新置初值/*/*DS18B20函数体定义*/void dmsec(uint count)uint i;while(count-) for(i=0;i0) i-;TMDAT=1;i=4;while(i0) i-;void tmpre(void)uint i;while(TMDAT);while(TMDAT);i=4;while(i0) i-;bit tmrbit(void)uint i;bit dat;TMDAT=0;i+;TMDAT=1;i+;i+;dat=TMDAT;i=8;while(i0) i-;return(dat);uchar tmrbyte(void)uchar i,j,dat;dat=0;for(i=1;i=8;i+) j=tmrbit(); dat=(j1);return(dat);void tmwbyte(uchar dat)uint i;uchar j;bit testb;for(j=1;j1; if(testb) TMDAT=0; i+; i+; TMDAT=1; i=8; while(i0) i-; else TMDAT=0; i=8; while(i0) i-; TMDAT=1; i+; i+; void tmstart(void)tmreset();tmpre();dmsec(1);tmwbyte(0xcc);tmwbyte(0x44);uchar tmrtemp(void)uchar y1,y2,y3;tmreset();tmpre();dmsec(1);tmwbyte(0xcc);tmwbyte(0xbe);tem0=tmrbyte();tem1=tmrbyte();if(tem1127) tem1=(255-tem1);tem0=(255-tem0);flag=1; /负温度求补码y1=tem04;y2=tem14;y3=y1|y2;return(y3);/*/void main()TMOD=0X01;TL0=0XB0;TH0=0X3C;EA=1;ET0=1;TR0=1;dmsec(1);tmstart();while(1)uchartodectoseg(las

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论