51单片机测室温
来源:互联网 发布:sqlserver 字段注释 编辑:程序博客网 时间:2024/04/27 13:21
#include <reg52.h> #include <intrins.h> #include "./delay/delay.h" #include <stdio.h> #include "1602.h" #define ok 1 #define err 0 sbit LED = P2^4; sbit ds = P2^3; bit ack = 0; void ds18b20_init() { ds = 0;//先复位,将高电平拉低delay_us(200);//经过880usdelay_us(200);ds = 1;//再拉高delay_us(30);//从机等待时间/*if(ds == 0)ack = ok;elseack = err;*/delay_us(200); } void dsl8b20_write_byte(unsigned char byte) { unsigned char i;for(i = 0; i < 8; i++ ){ds = 0;_nop_();_nop_();ds = byte & 0x01;byte >>= 1;delay_us(30); ds = 1;}delay_us(30); } bit ds_read_bit() { bit tmp;ds = 1; //下降沿ds = 0; //下降沿_nop_();_nop_();ds = 1;tmp = ds;//tmp读的越快越好delay_us(30);return tmp; } unsigned char ds_read_byte() { unsigned char i,j,k;for(i = 0; i < 8 ; i++){j = ds_read_bit();k = (j << 7) | (k >> 1); //j = j << 7; k = k >> 1; k = k + j;}return k; } void main() { //ds18b20_init();//dsl8b20_write_byte(0xcc);unsigned int temp,b;unsigned char a;unsigned char buff[20];float temp_t;LCD_Init();LCD_Clear(); while(1){/*if(ack){LED = 0;}else{LED = 1;}*/ds18b20_init();dsl8b20_write_byte(0xcc);//跳过读ROM命令dsl8b20_write_byte(0x44);//启动温度转换delay_ms(20);ds18b20_init();dsl8b20_write_byte(0xcc);dsl8b20_write_byte(0xbe); //读暂存器a = ds_read_byte(); //先读低八位b = ds_read_byte(); //再读高八位temp = (b << 8) + a;temp_t = (float)temp * (0.0625);sprintf(buff,"Temp is %7.3f",temp_t);LCD_Write_String(0,0,buff);} }
#include "1602.h"#include "./delay/delay.h"#define CHECK_BUSY//是否使用判断忙语句条件,后面使用条件编译sbit RS = P2^4; //定义端口 sbit RW = P2^5;sbit EN = P2^6;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0/*------------------------------------------------ 判忙函数------------------------------------------------*/ bit LCD_Check_Busy(void) { #ifdef CHECK_BUSY DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80);#else return 0;#endif }/*------------------------------------------------ 写入命令函数------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; }/*------------------------------------------------ 写入数据函数------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; }/*------------------------------------------------ 清屏函数------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); delay_ms(5); }/*------------------------------------------------ 写入字符串函数------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { while (*s) { LCD_Write_Char(x,y,*s); s ++; x++; } }/*------------------------------------------------ 写入字符函数------------------------------------------------*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); }/*------------------------------------------------ 初始化函数------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*显示模式设置*/ delay_ms(5); LCD_Write_Com(0x38); delay_ms(5); LCD_Write_Com(0x38); delay_ms(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ delay_ms(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/}
0 0
- 51单片机测室温
- 51单片机测频
- 温度传感器室温监控仪
- uC/OS室温计
- AB液体室温发泡硅胶(双组份室温发泡硅胶)
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 单片机学习笔记--51单片机
- 【单片机】51单片机最小系统
- 系统动力学Vensim模拟之室温调节
- NodeMCU上通过DS18b20采集室温
- Lab 5:uC/OS室温计
- 嵌入式LAB 5:uC/OS室温计
- 蓝桥 金钗十三陵
- Apache服务器配置及部署
- 蓝桥 2的次幂表示
- Ubuntu15安装Git
- 动态切换IP
- 51单片机测室温
- Object.key()与for...in...
- 关于MUI如何处理Android和iOS集成5+SDK的基座不显示页面的问题
- java实现ping的功能
- 构建Maven项目自动下载jar包
- brew install glfw3
- Bootstrap -1(认识Bootstrap)
- 机器学习:降维方法
- ArrayList集合