完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这是仿真和程序,查看了半天不知道哪里出了问题请大神们指正 #include #include #define uint unsigned int #define uchar unsigned char ***it rs=P2^0; ***it rw=P2^1; ***it en=P2^2; ***it DQ=P3^4; // 18b20总线 /*****/ ***it ST=P0^1; ***it SH=P0^2; ***it Sjia=P3^2; ***it Sjian=P3^3; ***it BJ=P0^5; uint tvalue;//温度值 uchar tflag;//温度正负标志 uint tem0,tem1; uint temp0,temp1; uint f=0; int hhhh=0; int tsheding=20;//设置温度值 int hsheding=40;//设置湿度值 /******/ unsigned char dat[9]={0}; //温度 unsigned char shuju1[9]={0}; //湿度 uchar code table1[17]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x54,0x45,0x4d,0x50,0x2d,0x2e,0x20}; //温度调用 uchar code table2[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x53,0x48,0x49,0x25,0x2e,0x20}; //湿度调用 /**************1602d调用函数*******************/ void write_com(uchar com); void write_shuju(uchar shuju); void init(); void delay(uchar z); /**************18b20调用函数**************/ unsigned char reset(void); //18b20初始化// void write(uchar dat); //18b20写时序 unsigned char read(void); //18b20读时序 void readtemperature(void); //18b20读二进制16位温度 void yanshi(unsigned int us); /****************hs1101调用函数*************************/ void readfrequency(void); // 读频率函数// bit minrange=0; //湿度下限标志位// bit maxrange=0; //湿度上限标志位// bit T0Over=0; //定时器结束标记 unsigned char w,x,y; /*********************************************/ void zhongd0() interrupt 0//外部中断0:加设置 { if(ST==1) { tsheding++;//温度值加1 } if(SH==1) { hsheding++;//湿度值加1 } } void zhongd1() interrupt 2//外部中断1:减设置 { if(ST==1) { tsheding--;//温度值减1 } if(SH==1) { hsheding--;//湿度值减1 } } /****************************************/ /******************主函数******************/ void main() { init(); while(1) { readtemperature(); write_com(0x80); write_shuju(table1[dat[0]]); write_com(0x81); write_shuju(table1[dat[1]]); write_com(0x82); write_shuju(table1[dat[2]]); write_com(0x83); write_shuju(table1[dat[3]]); write_com(0x84); write_shuju(table1[dat[4]]); write_com(0x85); write_shuju(table1[dat[5]]); write_com(0x86); write_shuju(table1[dat[6]]); write_com(0x87); write_shuju(table1[dat[7]]); write_com(0x88); write_shuju(table1[dat[8]]); readfrequency(); } } /*****************1602延时程序*****************/ void delay(uchar z) { uint a,b; for(a=0;a } /*******************1602初始化**************/ void init() { en=0; write_com(0x38); //设置为8位并行,显示2行,5*7点阵显示 write_com(0x0c); //设置显示开 无光标 光标不闪烁 write_com(0x01); //清屏指令 write_com(0x80); } /***************1602写指令*********************/ void write_com(uchar com) { rs=0; rw=0; P1=com; delay(5); en=1; en=0; } /**************1602写数据**********************/ void write_shuju(uchar shuju) { rs=1; rw=0; P1=shuju; delay(5); en=1; en=0; } /*************18b20微秒延时********************/ void yanshi(unsigned int us) { int s; for(s=0;s /************************18b20初始化********/ unsigned char reset(void) { unsigned char presence; DQ=0; yanshi(60); //大概480微秒 DQ=1; yanshi(8); //延时大概50微秒 presence=DQ; yanshi(14); return(presence); } /*************18b20写时序*************************/ void write(unsigned char dat) { unsigned char i; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; yanshi(16); DQ=1; dat>>=1; } } /***************18b20读时序*********************/ unsigned char read(void) { unsigned char i,dat=0; for(i=8;i>0;i--) { DQ=0; dat>>=1; DQ=1; if(DQ) dat|=0x80; yanshi(7); } return (dat); } /**************18b20读温度**********************/ void readtemperature(void) { unsigned char temp; int temperature; reset(); write(0xcc); write(0x44); reset(); write(0xcc); write(0xbe); temperature=read(); temp=read(); temperature=temperature|(temp<<8); dat[0]=10; dat[1]=11; dat[2]=12; dat[3]=13; dat[4]=16; if(temperature<0) { dat[4]=14; temperature=~temperature+1; } dat[5]=(temperature*10/16)/100; dat[6]=((temperature*10/16)%100)/10; dat[7]=15; dat[8]=((temperature*10/16)%100)%10; } /****************中断******** void timer0() interrupt 1 { TR1=0; TR0=0; TF0=0; ET0=0; T0Over=1; } *********************/ /**********************/ void timer0() interrupt 1 //T0定时中断 { TR0=0; TR1=0; TL0=0xB0; TH0=0x3C; tem0=TL1; tem1=TH1; TL1=0x00; TH1=0x00; TR0=1; TR1=1; } void timer1() interrupt 3 //T1定时中断 { TR0=0; TR1=0; TL0=0xB0; TH0=0x3C; TL1=0x00; TH1=0x00; TR0=1; TR1=1; } void init_timer() { TMOD=0x51; TL0=0xB0; TH0=0x3C; TL1=0x00; TH1=0x00; TR0=1; TR1=1; } /*******************/ /*************湿度传感器频率采集及转换模块***************/ void readfrequency() { unsigned int ftequency,RH; TMOD=0x51; TH0=0x4C; TL0=0X00; TH1=0; TL1=0; TR1=1; TR0=1; ET0=1; ET1=0; EA=1; T0Over=0; while(!T0Over) write_com(0x80+0x40); write_shuju(table2[shuju1[0]]); write_com(0x80+0x41); write_shuju(table2[shuju1[1]]); write_com(0x80+0x42); write_shuju(table2[shuju1[2]]); write_com(0x80+0x43); write_shuju(table2[shuju1[3]]); write_com(0x80+0x44); write_shuju(table2[shuju1[4]]); write_com(0x80+0x45); write_shuju(table2[shuju1[5]]); write_com(0x80+0x46); write_shuju(table2[shuju1[6]]); write_shuju(table2[shuju1[7]]); write_shuju(table2[shuju1[8]]); ftequency=(TH1*256+TL1)*20; minrange=0; maxrange=0; if(ftequency) { if(ftequency<6033) maxrange=1; if(ftequency>7351) minrange=1; if(6330 if(6033<=ftequency<=6330) RH=5860-0.8*ftequency; shuju1[0]=10; shuju1[1]=11; shuju1[2]=12; shuju1[3]=15; shuju1[4]=RH/100; shuju1[5]=(RH%100)/10; shuju1[6]=14; shuju1[7]=(RH%10); shuju1[8]=13; } } |
|
相关推荐
12个回答
|
|
奖励2积分,真不少啊!下载你的仿真文件就要扣1分啊!
~~左上角按键设置电路所用的 +5V电源端子,在圆点处并未实现连接,悬空着。 ~~A0和A1在仿真电路中连接的是P0.0和P0.1口,而你楼主位程序中,貌似使用的是P0.1和P0.2口。 ~~A2(P3.2)和A3(P3.3)作为两个外部中断输入端使用,却处于固定的高电平的输出状态,故不能进行加1和减1的设置。 ~~RST端始终为高电平,单片机手动复位无效。 ~~左下角报警电路的接地端子,在圆点处并未实现连接,悬空着。 ~~报警电路的设计严重不妥。蜂鸣器和发光管也不要共用限流电阻。 ~~更重要的是,P0口是一组漏极开路型双向 I/O口。A5(P0.5)作为输出时,适用于低电平(导通灌电流)驱动负载。 ~~S0和S1作何用? 余下的问题一定还很多,自己好好梳理吧。
最佳答案
|
|
|
|
问题是按键调节不起作用,只能显示温度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这个是仿真文件
|
|
|
|
不要贴代码,发工程。好累
|
|
|
|
|
|
|
|
|
|
|
|
我上传了文件,麻烦您帮我看一下哪里除了了问题 |
|
|
|
请大神帮我看一下,小菜鸟一个
|
|
|
|
求大神啊求大神
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4674 浏览 3 评论
5959 浏览 1 评论
6231 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
7970 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1227 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 00:29 , Processed in 0.904767 second(s), Total 98, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号