完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
求大神帮忙看看那这个程序错在哪?测试时总是无法修改报警温度
#include #include #include #define uchar unsigned char #define uint unsigned int ***it dula = P2^6; ***it wela = P2^7; ***it beep=P2^3; ***it RS = P3^5; ***it LCDEN = P3^4; ***it s1=P3^0; ***it s2=P3^1; ***it s3=P3^2; ***it rd=P3^7; uchar b,s,g,x1,x2,flag; uchar bai,shi,ge,xiao1,xiao2,fl; unsigned char datas[] = {"0123456789"}; void delayUs() { _nop_(); } void delayMs(uint a) { uint i, j; for(i = a; i > 0; i--) for(j = 100; j > 0; j--); } void writeComm(uchar comm) { RS = 0; P0 = comm; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1); } //写数据:RS=1, RW=0; void writeData(uchar dat) { RS = 1; P0 = dat; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1); } void init() { dula = wela = 0; writeComm(0x38); writeComm(0x0c); writeComm(0x06); writeComm(0x01); } void writeString(uchar * str, uchar length) { uchar i; for(i = 0; i < length; i++) { writeData(str); } } /**//*****************************DS18B20*******************************/ ***it ds = P2^2; void dsInit() { unsigned int i; ds = 0; i = 100; while(i>0) i--; ds = 1; i = 4; while(i>0) i--; } void dsWait() { unsigned int i; while(ds); while(~ds); i = 4; while(i > 0) i--; } uchar read_DS18B20(void) { uchar dat,numr,time; dat=0; for(numr=8;numr>0;numr--) { ds=1; _nop_(); ds=0; _nop_(); ds=1; for(time=0;time<3;time++); dat>>=1; if(ds==1) { dat|=0x80; } else { dat|=0x00; } for(time=0;time<1;time++); } return(dat); } void writeByte(uchar dat) { uint i; uchar j; bit b; for(j = 0; j < 8; j++) { b = dat & 0x01; dat >>= 1; if(b) { ds = 0; i++; i++; ds = 1; i = 8; while(i>0) i--; } else { ds = 0; i = 8; while(i>0) i--; ds = 1; i++; i++; } } } void sendChangeCmd() { dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0x44); } void sendReadCmd() { dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0xbe); } int getTmpValue() { uint value; uchar TL,TH,flag2; sendReadCmd(); TL=read_DS18B20(); TH=read_DS18B20(); value=TH; value<<=8; value=value|TL; if(value<0x0fff) { flag2=0; value=value*(6.25); }else {value=~value+1; value=value*(6.25);//温度值扩大100倍,精确到2位小数 flag2=1; } return(value); } /**//*****************************lcd显示*******************************/ void display(int v) { uchar table[] = "Temper:"; unsigned int tmp = abs(v); bai = tmp / 10000; shi = tmp % 10000 / 1000; ge = tmp % 1000 / 100; xiao1 = tmp % 100 / 10; xiao2 = tmp % 10; if(s1==0) { delayMs(8); if(s1==0) {while(!s1); flag=0; //s1按键标志 } } if(flag==0) { writeComm(0xc3); if(v < 0) writeData('-'); else writeData('+'); if(bai!= 0) writeData(datas[bai]); if(shi!=0) { writeData(datas[shi]); } if(ge!=0) writeData(datas[ge]) ; else writeData('0'); _nop_(); writeData('.'); if(xiao1!=0) writeData(datas[xiao1]); else{writeData('0');} if(xiao2!=0) writeData(datas[xiao2]); writeComm(0x80); writeString(table, 7); } } /**//*****************************键盘修改*******************************/ keyscan() { uint tmp1,vh; tmp1=3145; rd=0; fl=0; if(s3==0) { delayMs(8); if(s3==0) { while(!s3); vh=tmp1; vh++; writeComm(0xc0+8); writeComm(0x0f); flag=1; //s3按键标志 fl=1; //修改标志 } } if(fl==1) { tmp1=vh; } return(tmp1); } /**//*****************************报警值*******************************/ void baojing(uint tmp1) { uchar table1[] ="Danger:"; if(fl==1) { writeComm(0x80); writeString(table1,7); writeComm(0xc3); if(tmp1 < 0) writeData('-'); else writeData('+'); b = tmp1 / 10000; s = tmp1 % 10000 / 1000; g = tmp1 % 1000 / 100; x1 = tmp1 % 100 / 10; x2 = tmp1 % 10; if(b!= 0) writeData(datas); if(s!=0) writeData(datas if(g!=0) writeData(datas[g]) ; else writeData('0'); _nop_(); writeData('.'); if(x1!=0) {writeData(datas[x1]);} else{writeData('0');} writeData(datas[x2]); writeComm(0xc0+8); } } /**//*****************************DS18B20*******************************/ void main() { sendChangeCmd(); init(); while(1) { delayMs(1000); //温度转换时间需要750ms以上 sendChangeCmd(); display(getTmpValue()); baojing(keyscan()); } } |
|
相关推荐
2个回答
|
|
|
|
|
|
|
|
1 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
72 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
509 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
546 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
545 浏览 0 评论
1008 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:47 , Processed in 2.012135 second(s), Total 85, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号