完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #include ***it DQ=P2^3; //定义DS2431端口 bit DS2431err; //DS2431的错误标志 ma[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70}; ***it lcd_rs= P1^0; ***it lcd_rw= P1^1; ***it lcd_e= P1^2; void delay(unsigned int num) //延时程序 { while( --num ) ; } void Delay() //1us延时 { _nop_(); _nop_(); } Init_DS2431() //初始化DS2431 { bit Presece; DQ=1; //delay(5); _nop_(); DQ=0; //将DQ信号线拉低 delay(120); //保持DQ低电平480us 测得483 DQ=1; //将DQ信号拉高、释放总线 delay(15); //保持DQ高电平70us 测得64 Presece = DQ; //保存当前总线状态 delay(140); //测得时间为563 DQ=1; DQ=1; return Presece; //返回是否有设备将总线拉低 } read_bit() //从单总线上读取一个数据位 { bit i; DQ=1; _nop_(); DQ=0; //启动读时序 Delay(); //1us Delay(); //1us Delay(); //1us Delay(); //1us DQ=1; //释放总线,等待从机返回数据位 Delay(); //1us Delay(); //1us i=DQ; delay(15); DQ=1; return i; //返回总线状态 } void write_bit(unsigned char bitvalue) //向单总线设备写入一个数据位 { DQ=1; _nop_(); DQ=0; //启动写时序 Delay(); //1us Delay(); //1us Delay(); //1us Delay(); //1us Delay(); //1us if(bitvalue) DQ=1; //写1 delay(15); DQ=1; //释放总线 delay(2); //等待写时序结束 10us } read_byte() //从单总线上读一个字节数据 { int i,value=0; for(i=0;i<8;i++) { if(read_bit()) value=value|(0x01< } delay(2); //等待释放总线 return value; //返回读取的数据 } void write_byte(unsigned char bytevalue) //向单总线写一个字节 { unsigned char i,temp; for(i=0;i<8;i++) { temp = bytevalue>>i; //将要写的数据字节右移i位 temp = temp &0x01; //取出数据字节的第i位 write_bit(temp); //向总线写一个数据位 } delay(2); //等待写时序结束 } bit skip_matchRom(void) //发出跳过ROM匹配命令 { bit tmp=1; if(Init_DS2431()) return tmp; //如果没有DS2431,返回0 write_byte(0xcc); //发出跳过ROM匹配的命令 tmp = 0; return tmp; } read_ds2431(unsigned int Readaddr) { int ch[8],i; DS2431err=skip_matchRom(); //发出跳过ROM匹配命令 write_byte(0xF0); //发出读存储器命令 write_byte((unsigned char)Readaddr); write_byte((unsigned char)(Readaddr>>=8)); for(i=0;i<8;i++) { ch[i]=read_byte(); printf("%d",ch[i]);} return ch; } write_ds2431(unsigned int Writeaddr, unsigned char *Writedata) { unsigned char ch,es,i,hight,low; unsigned int tem; hight=(unsigned char)(Writeaddr>>=4); low =(unsigned char)Writeaddr; if(skip_matchRom()) //发出跳过ROM匹配命令 return 1; write_byte(0x0F); //发送写暂存器命令 write_byte(low); write_byte(hight); for(i=0;i<8;i++) { ch=*Writedata; Writedata++; write_byte(ch); } delay(25); DS2431err=skip_matchRom();//发出跳过ROM匹配命令 write_byte(0xAA); //复制暂存器数据到存储器中 tem=read_byte(); tem<<=8; tem+=read_byte(); es=read_byte(); if(es!=0x07) return 1; DS2431err=skip_matchRom();//发出跳过ROM匹配命令 write_byte(0x55);//发出启动转换命令 write_byte((unsigned char)Writeaddr); write_byte((unsigned char)(Writeaddr>>=4)); write_byte(es); for(i=0;i<50;i++) delay(250); //等待写时序结束 510us if(read_byte()!=0xAA) return 1; return 0; } /*********************************************************** * 函数说明:毫秒级延时程序 * * 输入: 需要延时t毫秒 * * 输出: 无 * * 调用函数:无 * ***********************************************************/ void _delay_ms(unsigned int t) { unsigned int i,j; for(i=0;i } /*********************************************************** * 函数说明:写指令到LCD12864 * * 输入: cmd,待输入的指令 * * 输出: 无 * * 调用函数:无 * ***********************************************************/ void LcdWriteCode(unsigned char cmd) { P0=cmd; lcd_rs=0; lcd_rw=0; lcd_e=0; _delay_ms(1); lcd_e=1; } /*********************************************************** * 函数说明:写数据到LCD12864 * * 输入: dat,待输入的数据 * * 输出: 无 * * 调用函数:无 * ***********************************************************/ void LcdWriteData(unsigned char dat) { P0=dat; lcd_rs=1; lcd_rw=0; lcd_e=0; _delay_ms(1); lcd_e=1; } /*********************************************************** * 函数说明:LCD初始化 * * 输入: 无 * * 输出: 无 * * 调用函数:无 * ***********************************************************/ void LcdInit(void) { LcdWriteCode(0x30); //基本指令集 _delay_ms(1); LcdWriteCode(0x0c); //显示;关闭光标;关闭反白 _delay_ms(1); LcdWriteCode(0x01); //清屏 _delay_ms(20); LcdWriteCode(0x06); //显示光标位置 } read_ds2431_str(unsigned int Readaddr) { unsigned char ch[8],i; DS2431err=skip_matchRom();//发出跳过ROM匹配命令 write_byte(0xF0); //发出读存储器命令 write_byte((unsigned char)Readaddr); write_byte((unsigned char)(Readaddr>>=8)); for(i=8;i>0;i--) { ch[8-i]=read_byte(); } return ch; } main() { while(1) { {read_ds2431(0x60); write_ds2431(0x60,0x01); read_ds2431(0x60); } } } |
|
相关推荐
1 条评论
1个回答
|
|
我怎么读出来全是47?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12037 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 03:04 , Processed in 0.758751 second(s), Total 82, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号