完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define uchar unsigned char #define uint unsigned int ***it lcdrs=P3^2;//定义1602液晶RS端 ***it lcden=P3^3;//定义1602液晶LCDEN端 ***it ds=P3^7; uchar code table[]={'0','1','2','3','4','5','6','7','8','9'}; void delay1us() //@11.0592MHz { _nop_(); _nop_(); _nop_(); } void delayms(uint t) //@11.0592MHz { unsigned char i, j; while(t--) { _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } } /********************** *复位,初始化函数*****/ void ds_reset() { uchar j; P3M0|=0x80; ds=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ds=0; j=3000; while(--j);//延时600us ds=1; j=3000; while(--j);//延时500us ds=1; } bit ds_read_bit()//读一位数据函数 { bit dat; uchar j; P3M0|=0x80; ds=1; j=10;//延时2us while(--j); ds=0; j=30;//延时6us while(--j); ds=1; j=20;//延时4us while(--j); P3M0&=~0x80; dat=ds; j=150;//延时30us while(--j); return(dat); } uchar ds_read_byte()//读一个字节数据函数 { uchar i,j,k; for(i=0;i<8;i++) { j=ds_read_bit(); k=(j<<7)|(k>>1); } return(k); } void ds_write_byte(uchar dat)//写一个字节数据函数 { uchar i,j; P3M0|=0x80; for(i=0;i<8;i++) { ds=0; j=75;//延时15us while(--j); ds=dat&0x01; j=225;//延时45 us while(--j); ds=1; dat=dat>>1; } } uint read_temperature()//18b20 开始获取温度并转换 { uint a,b,temp1; ds_reset(); ds_write_byte(0xcc);//写跳过读ROM指令 ds_write_byte(0x44);//写温度转换指令 ds_reset(); ds_write_byte(0xcc); ds_write_byte(0xbe);//读温度暂存器命令 a=ds_read_byte();//读低八位 b=ds_read_byte();//读高八位 temp1=b; temp1=temp1<<8; temp1=temp1|a; temp1=temp1*0.0625*10+0.5; return (temp1); } void write_com(uchar com) //些命令,RS=0 { P2=com; lcdrs=0; lcden=0; delay1us(); lcden=1; delay1us(); lcden=0; } void write_data(uchar dat) //写数据,RS=1 { P2=dat; lcdrs=1; lcden=0; delay1us(); lcden=1; delay1us(); lcden=0; } void init() { write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口 delayms(20); write_com(0x0f); //显示模式设置 delayms(20); write_com(0x06); //显示模式设置:光标右移,字符不移 delayms(20); write_com(0x01); //清屏幕指令,将以前的显示内容清除 delayms(20); } void display() { uint temp; uchar bai1,shi1,ge1; temp=read_temperature(); bai1=temp/100; shi1=temp%100/10; ge1=temp%100%10; write_data(table[bai1]); delayms(10); write_data(table[shi1]); delayms(10); write_data('.'); delayms(10); write_data(table[ge1]); delayms(10); write_data(' '); delayms(10); } void main() { init(); while(1) { write_com(0x80); delayms(20); display(); delayms(20); } } |
|
相关推荐
4个回答
|
|
软件延时不对,STC15系列是接近1T的单片机
|
|
|
|
18B20的重点就是延时啊,用示波器看看,还有IO口方向要变化的哈
|
|
|
|
单片机晶振不一样,内部周期不一致。
|
|
|
|
来学习的呵呵!!嵌入式培训 www.arm8.net
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
479 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
229 浏览 0 评论
334 浏览 0 评论
165 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
496 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 08:35 , Processed in 0.760434 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号