完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
用C++编写的控制DS1624温度传感器的程序
unsigned char timecount; unsigned char displaycount; bit secondflag=0; unsigned char secondcount=0; unsigned char retn; unsigned int result; unsigned char x; unsigned int k; unsigned int ks; void delay(void); void delay10ms(void); void i_start(void); void i_stop(void); void i_init(void); void i_ack(void); bit i_clock(void); bit i_send(unsigned char i_data); unsigned char i_receive(void); bit start_temperature_T(void); bit read_temperature_T(unsigned char *p); void delay(void) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } void delay10ms(void) { unsigned int i; for(i=0;i<1000;i++) { delay(); } } void i_start(void) { SCL=1; delay(); SDA=0; delay(); SCL=0; delay(); } void i_stop(void) { SDA=0; delay(); SCL=1; delay(); SDA=1; delay(); SCL=0; delay(); } void i_init(void) { SCL=0; i_stop(); } void i_ack(void) { SDA=0; i_clock(); SDA=1; } bit i_clock(void) { bit sample; SCL=1; delay(); sample=SDA; _nop_(); _nop_(); SCL=0; delay(); return(sample); } bit i_send(unsigned char i_data) { unsigned char i; for(i=0;i<8;i++) { SDA=(bit)(i_data & 0x80); i_data=i_data<<1; i_clock(); } SDA=1; return(~i_clock()); } unsigned char i_receive(void) { unsigned char i_data=0; unsigned char i; for(i=0;i<8;i++) { i_data*=2; if(i_clock()) i_data++; } return(i_data); } bit start_temperature_T(void) { i_start(); if(i_send(0x90)) { if(i_send(0xee)) { i_stop(); delay(); return(1); } else { i_stop(); delay(); return(0); } } else { i_stop(); delay(); return(0); } } bit read_temperature_T(unsigned char *p) { i_start(); if(i_send(0x90)) { if(i_send(0xaa)) { i_start(); if(i_send(0x91)) { *(p+1)=i_receive(); i_ack(); *p=i_receive(); i_stop(); delay(); return(1); } else { i_stop(); delay(); return(0); } } else { i_stop(); delay(); return(0); } } else { i_stop(); delay(); return(0); } } void main(void) { P1=0xff; timecount=0; displaycount=0; TMOD=0x21; TH1=0x06; TL1=0x06; TR1=1; ET1=1; ET0=1; EA=1; if(start_temperature_T()) //向DS1624发送启动A/D温度转换命令,成功则启动T0定时1s。 { secondflag=0; secondcount=0; TH0=55536/256; TL0=55536%256; TR0=1; } while(1) { if(secondflag==1) { secondflag=0; TR0=0; if(read_temperature_T(temperdata)) //T0定时1s时间到,读取DS1624的温度值 { for(x=0;x<8;x++) { displaybuffer[x]=16; } x=2; result=temperdata[1]; //将读取的温度值进行数据处理,并送到显示缓冲区 while(result/10) { displaybuffer[x]=result%10; result=result/10; x++; } displaybuffer[x]=result; result=temperdata[0]; result=result>>3; displaybuffer[0]=(dotcode[result])%10; displaybuffer[1]=(dotcode[result])/10; if(start_temperature_T()) //温度值数据处理完毕,重新启动DS1624开始温度转换 { secondflag=0; secondcount=0; TH0=55536/256; TL0=55536%256; TR0=1; } } } } } void t0(void) interrupt 1 using 0 //T0用于定时1s时间到 { secondcount++; if(secondcount==100) { secondcount=0; secondflag=1; } TH0=55536/256; TL0=55536%256; } void t1(void) interrupt 3 using 0 //T1定时1ms用数码管的动态刷新 { timecount++; if(timecount==4) //T1定时1ms到 { timecount=0; if (displaycount==5) { P0=(displaycode[displaybuffer[7-displaycount]] | 0x80); //在该位同时还要显示小数点 } else { P0=displaycode[displaybuffer[7-displaycount]]; } P2=displaybit[displaycount]; displaycount++; if(displaycount==8) { displaycount=0; } } } |
|
相关推荐
3 个讨论
|
|
|
太单一了吧
|
|
|
|
|
|
|
|
摄像头模组开发,感光芯片硬触发拍照方案问题 OV系列 和 IMX系列
5733 浏览 2 评论
11895 浏览 2 评论
RK3588 HDMI in 接入设备如何获取HDMI in 传入的音频?
12801 浏览 1 评论
33153 浏览 1 评论
2011 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 02:37 , Processed in 0.715304 second(s), Total 50, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3351