• windless
    了解作者
  • C/C++
    开发工具
  • 42KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 42
    下载次数
  • 2012-06-09 12:56
    上传日期
1602液晶+DS18B20,MCU是STC12C5A60S2,平台是Keil C,因为开发环境没有这个选项,所以就选了C-C++,还有里面的STC头文件和另外一个头文件是我自己写的,大家可以根据需要自己改动下,第一次上传,请轻拍
1602_DS18B20.zip
  • 金沙滩温度测试程序
  • inc
  • src
  • 1602_ds18b20.c
    10.9KB
  • output
  • 1602_DS18B20.lnp
    109B
  • 1602_DS18B20
    20.3KB
  • 1602_DS18B20.plg
    939B
  • 1602_ds18b20.lst
    20.3KB
  • 1602_DS18B20.m51
    15.5KB
  • 1602_DS18B20.hex
    3.4KB
  • 1602_ds18b20.obj
    21.6KB
  • 1602_DS18B20_uvopt.bak
    53.6KB
  • 1602_DS18B20.uvproj
    13KB
  • 1602_DS18B20.plg
    8.2KB
  • 1602_DS18B20_uvproj.bak
    13KB
  • 1602_DS18B20.uvopt
    53.6KB
内容介绍
/////////////////////////////////////////////////////////////////////////////////////// // // FileModel //File Name : DS18B20.c //Copyright : XXXX Corporation, All Rights Reserved //Module : test LCD display // //CPU : STC12C5A08S2 //RTOS : // //Create Date : 2012年4月23日 //Author/Corporation : LODA //Update Date : 2012/5/9 //Update Content : 终于又开始写了一个源文件了,唉,最近编程真心不给力,硬 // 件也不做,不知轻重,必定挨落后,功课又烂,想赢就老老实实 // 地码程序,决定搞软件方面的了就要有所成就,献给以后的自己 // 想想美国的军工,美国和中国真正的高手 //Update Date : 2012/5/20 //Update Content :/************************************** // ;WWW.STCMCU.COM // ;Mobile:13922805190 // ;0755-82948412 // 温度传感器DS18B20测试程序 // 主芯片 : STC12C5A60S2 (1T) // 工作频率: 12.000MHz // /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // Debug switch Section // /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // Include File Section // /////////////////////////////////////////////////////////////////////////////////////// //#include "REG51.H" #include <STC12C5A.H> #include <MarcoAndConst.h> #include <INTRINS.H> /////////////////////////////////////////////////////////////////////////////////////// // // Register Define Section // /////////////////////////////////////////////////////////////////////////////////////// //温度传感器定义 sbit DQ = P3^2; //数据串口 //1602管脚定义 sbit RS = P1^0 ; sbit RW = P1^1 ; sbit EN = P1^5 ; sbit BUSY = P0^7; //typedef unsigned char BYTE; //sbit DQ = P3^3; //DS18B20的数据口位P3.3 /////////////////////////////////////////////////////////////////////////////////////// // // Macro Define Section // /////////////////////////////////////////////////////////////////////////////////////// BYTE TPH; //存放温度值的高字节 BYTE TPL; //存放温度值的低字节 WORD TP; //存放温度值的16位字节 BYTE Tflag; //存放温度正负符号 uint16 TempDat; float Temp; BYTE Temperature[4]; BYTE SerialNum[8]; BYTE code table[] = { "0123456789ABCDEF" }; //用于12864显示16制代码 BYTE Temperature[4]; /////////////////////////////////////////////////////////////////////////////////////// // // Struct Define Section // /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // Pototype Declare Section // /////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 毫秒级CPU延时函数 //Description : DELAY_MS (?); 应用于1T单片机时i<600,应用于12T单片机时i<125 //Input Parameter : 1~65535(参数不可为0) //Output Parameter : //Return Value : void ////////////////////////////////////////////////////////////////////////////////////////////////////////// void DELAY_MS (uint16 a) { uint16 i; while( --a != 0) { for(i = 0; i < 600; i++); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 延时X微秒(STC12C5A60S2@12M) //Description : 不同的工作环境,需要调整此函数,此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同 //Input Parameter : 1~65535(参数不可为0) //Output Parameter : //Return Value : void ////////////////////////////////////////////////////////////////////////////////////////////////////////// void DelayXus(BYTE n) { while (n--) { _nop_(); _nop_(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 复位DS18B20,并检测设备是否存在 //Input Parameter : //Output Parameter : //Return Value : ////////////////////////////////////////////////////////////////////////////////////////////////////////// void DS18B20_Reset() { #if 0 CY = 1; while (CY) { DQ = 0; //送出低电平复位信号 DelayXus(240); //延时至少480us DelayXus(240); DelayXus(100); DQ = 1; //释放数据线 DelayXus(100); //等待60us CY = DQ; //检测存在脉冲 DelayXus(240); //等待设备释放数据线 DelayXus(180); } #endif #if 1 DQ = 1; //DQ复位,不要也可行。 DelayXus(10); //稍做延时 DQ = 0; //单片机拉低总线 DelayXus(500); //精确延时,维持至少480us DQ = 1; //释放总线,即拉高了总线 DelayXus(100); //此处延时有足够,确保能让DS18B20发出存在脉冲。 DelayXus(60); #endif } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 从DS18B20读1字节数据 //Input Parameter : //Output Parameter : //Return Value : ////////////////////////////////////////////////////////////////////////////////////////////////////////// BYTE DS18B20_ReadByte() { BYTE i; BYTE dat = 0; for (i=0; i<8; i++) //8位计数器 { dat >>= 1; DQ = 0; //开始时间片 DelayXus(1); //延时等待 DQ = 1; //准备接收 DelayXus(1); //接收延时 if (DQ) dat |= 0x80; //读取数据 DelayXus(60); //等待时间片结束 } return dat; } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 向DS18B20写1字节数据 //Input Parameter : //Output Parameter : //Return Value : ////////////////////////////////////////////////////////////////////////////////////////////////////////// void DS18B20_WriteByte(BYTE dat) { char i; for (i=0; i<8; i++) //8位计数器 { DQ = 0; //开始时间片 DelayXus(1); //延时等待 dat >>= 1; //送出数据 DQ = CY; DelayXus(60); //等待时间片结束 DQ = 1; //恢复数据线 DelayXus(1); //恢复延时 } } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 复位DS18B20,并检测设备是否存在 //Input Parameter : //Output Parameter : //Return Value : ////////////////////////////////////////////////////////////////////////////////////////////////////////// void DS18B20_ROM(void) { uint8 i; DS18B20_Reset(); DS18B20_WriteByte( 0x33 ); //读取序列号 for ( i=0; i < 8; i++ ) //读取的是64位的ROM,8个字节 { SerialNum[i] = DS18B20_ReadByte(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 等待繁忙标志 //Input Parameter : //Output Parameter : //Return Value : ////////////////////////////////////////////////////////////////////////////////////////////////////////// void wait(void) { P0 = 0xFF; do { RS = 0; RW = 1; EN = 0; EN = 1; }while (BUSY == 1); EN = 0; } ////////////////////////////////////////////////////////////////////////////////////////////////////////// //Function : 写数据 //Input Parameter : //Output Parameter : //Return Value : ////////////////////////////////////////////////////////////////////////////////////////////////////////// void
评论
    相关推荐
    • ds18b20_2007C.rar
      数字温度传感器DS18B20,keil C 环境,使用宏晶的高速51单片机
    • ds18b20.rar
      ds18b20keil c 编程 实现了温度的采集 并用数码管显示 有温度报警功能
    • STC12C5A60S2_GPS201515.rar
      基于STC12C5A60S 单片机的keil工程,功能为通过手机控制GSM模块发送GPS模块定位的位置信息短信
    • STC12C5204AD-Development-Board.rar
      STC12C5204AD单片机开发学习系统用户手册,描述了开发办的构成以及部分源码对应的硬件结构图等
    • Keil_DS18B20.rar
      STC12C54XX 下 DS18B20 温度传感器控制程序
    • 18B20.rar
      单片机驱动18B20 18B20为单总线设计,此程序支持两路18B20设备 更多的可以自行扩展
    • 基于STC12C5A60S2的MLX90614和DB18B20的多功能测温装置(KEIL C51代码)
      这是关于红外温度测温仪(MLX90614)和数字温度传感器(DB18B20)的代码,其基于BlueSky开发板(MCU采用STC12C5A60S2), 有LCD1602显示、蜂鸣器报警、串口输出结果的功能。直接编译后可以使用。
    • STC12C5A60S2开发例程
      该压缩文件为STC12C5A60S2开发例程,内容详细,便于自学。
    • 22、温度计1602+18B20.rar
      c51单片机实现液晶屏1602显示实时温度源代码
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路