完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 星宿老仙 于 2013-1-17 15:58 编辑
#include #include #define N0_DISPLAY 17 #define DISP_SIGN 16 ***it ONE_WIRE_DQ=P1^0; void delay_ms(unsigned int); void delay_ms(register unsigned int); void temp2str(signed int tmep,unsigned char *); void display(unsigned char *); void start_convert(void); signed int read_temperature(void); unsigned char OW_reset(void); unsigned char OW_read_byte(void); void OW_write_byte(unsigned char val); void main() { unsigned char i; unsigned char dispram[8]; for(i=0;i<8;i++) dispram=N0_DISPLAY; //第21行 while (1) { start_convert(); for(i=0;i<120;i++) display(dispram); temp2str(read_temperature(),dispram); } } /**************************************************************/ //Start DS18B20 Temperature Convert /**************************************************************/ void start_convert(void) //第32行 { OW_reset(); OW_write_byte(0xCC);//Skip ROM OW_write_byte(0x44);//Start Conversion } /**************************************************************/ //Read Temperature //returns the Temperature /**************************************************************/ signed int read_temperature(void) //42页 { unsigned char get[9]; signed int temp; unsigned char i; OW_reset(); OW_write_byte(0xCC); OW_write_byte(0xBE); for(i=0;i<9;i++) get=_OW_write_byte(); //第50行 temp=(temp<<8)|get[0]; return temp; } /**************************************************************/ // OW_reset-per forms a reset on the one-write bus and //returns the presence detect /**************************************************************/ unsigned char OW_reset(void) { unsigned char presence; ONE_WIRE_DQ=0; delay_us(240); ONE_WIRE_DQ=1; delay_us(33); presence=! ONE_WIRE_DQ; delay_us(205); return (presence ); } /**************************************************************/ //READ_BYTE-reads a byte from the one-wire bus. /**************************************************************/ Unsigned char OW_read_byte(void) { unsigned char I; unsigned char value; for(i=0;i<8;i++) { ONE_WIRE_DQ=0; start timeslot value>>=1; ONE_WIRE_DQ=1; delay_us(1); timeslot if(ONE_WIRE_DQ) value|=0x80; delay_us(25); } return(value); } /**************************************************************/ //WRITE_BYTE-writes a byte from the one-wire bus. /**************************************************************/ void OW_write_byte(char val) { unsigned char i; for(i=0;i<8;i++) { ONE_WIRE_DQ=0; delay_us(1); ONE_WIRE_DQ=val&0x01; if write 1 delay_us(30); ONE_WIRE_DQ=1; val>>=1; } } /**************************************************************/ Temperature data to display string function Parameter: int tem,pointer of string /**************************************************************/ void temp2str(signed int temp,unsigned char * ch) { Unsigned char sign; if(temp<0) { sign=1; temp=(~temp )+1; } else sign=0; ch[7]=((temp&0x0f)*10+8)/16; temp>>=4; ch[6]=(temp%10)|0x40; temp/=10; ch[5]=temp%10; temp/=10; ch[4]=temp%10; ch[3]=NO_DISPLAY; if (ch[4]==0) { ch[4]=NO_DISPLAY; if(ch[5]==0) ch[5]= NO_DISPLAY; } If(sign) { If(ch[5]== NO_DISPLAY) ch[5]=DISP_GIGN; else if(ch[4]== NO_DISPLAY) ch[4]=DISP_GIGN; else ch[3]=DISP_GIGN; } } /**************************************************************/ 8 LED digital tubes display function Parameter:string pointer to display /**************************************************************/ void display(unsigned char * disp_ram) { static unsigned char disp_count; unsigned char i; unsigned char code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff}; disp_count=( disp_count+1)$0x7f; for(i=0;i<8;i++) { if(disp_ram&0x80) P0=(disp_count>32)?table[disp_ram&0x3f]:0xff; else P0=table[disp_ram&0x3f]; if (disp_ram&0x40) P0&0x7f; P2=0x01< delay_ms(1); P0=0xff; P2=0; } } /**************************************************************/ Delay function Parameter:unsigned char dt Delay time=dt*2+5(us) /**************************************************************/ void delay_us(register unsigned char dt) { while(--dt); } /**************************************************************/ Delay function Parameter:unsigned int dt Delay time=dt(ms) /**************************************************************/ Void delay_ms(unsigned int dt) { register unsigned char bt,ct; for(;dt;dt--) for(ct=2;ct;ct--) for(bt=250;--bt;) }
|
|
相关推荐
2 个讨论
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-21 02:50 , Processed in 0.425340 second(s), Total 44, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号