完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
之前做了一个数码管显示的,想放液晶上看看,结果就悲剧了。
STC89C52+DS18B20+1602难道就坑死我了? 请大家帮忙检查一下那里有错误,为什么显示一直是0000 #include #include typedef unsigned char uchar; typedef unsigned int uint; uchar a,b,c,d; //定义变量 uchar k; ***it lcden=P3^4; ***it lcdrs=P3^5; ***it dula=P2^6; ***it wela=P2^7; ***it DATA=P2^2; //DS18B20接入口 //uchar table2[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; uint disdata[4]={0,0,0,0}; // 毫秒延时 void delay(uint tt) { uchar i; while(tt--) for(i=110;i>0;i--); } //短延时 //系统初始化 //按键扫描 //温度检测 void Init_DS18B20() //传感器初始化 { uchar x=0; DATA = 1; //DQ复位 delay(10); //稍做延时 DATA = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us //450 DATA = 1; //拉高总线 delay(20); x=DATA; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(30); } //读一个字节 ReadOneChar(void) { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DATA = 0; // 给脉冲信号 dat>>=1; DATA = 1; // 给脉冲信号 if(DATA) dat|=0x80; delay(8); } return(dat); } //写一个字节 void WriteOneChar(unsigned char dat) { uchar i=0; for (i=8; i>0; i--) { DATA = 0; DATA = dat&0x01; delay(10); DATA = 1; dat>>=1; } delay(8); } //读取温度 int ReadTemperature(void) { uchar a=0; uchar b=0; int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar();//低位 b=ReadOneChar();//高位 t=b; t<<=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; return(t); } void init_com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; } void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar dat) { lcdrs=1; P0=dat; delay(5); lcden=1; delay(5); lcden=0; } void init() { dula=0; wela=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void display(int x) { disdata[0]=x/1000+0x30; disdata[1]=x%1000/100+0x30; disdata[2]=x%100/10+0x30; disdata[3]=x%10+0x30; write_com(0x80); write_data(disdata[0]); delay(200); write_data(disdata[1]); delay(200); write_data(disdata[2]); delay(200); write_data(disdata[3]); delay(200); } /*-------------------------------------------------------------------*/ //主函数 void main() { init(); init_com(); while(1) { int temp; temp = ReadTemperature();//读温度 display(temp); } } |
|
相关推荐
5个回答
|
|
|
|
|
|
不好意思,挣E币下载用!
|
|
|
|
|
|
学习了谢谢
|
|
|
|
不错的文件,值得收藏
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
515 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
515 浏览 0 评论
780 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1360 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
572 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11757 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:46 , Processed in 0.562799 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号