一些51单片机基础模块的程序

源代码在线查看: 温度采集ds18b20.c

软件大小: 600 K
上传用户: hahuhuhuhu
关键词: 51单片机 模块 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				/********************************************************************
				* 文件名  : 温度采集DS18B20.c
				* 描述    :  该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上
							 显示出来。
				* 创建人  : 东流,2009年4月9日
				* 版本号  : 2.0
				* 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
				* 感谢“中国自动化资讯网”对本工作室的大力支持。
				***********************************************************************/
				#include
				#define uchar unsigned char
				#define uint  unsigned int
				
				#define jump_ROM 0xCC
				#define start 0x44
				#define read_EEROM 0xBE
				
				sbit DQ = P3^4;            //DS18B20数据口
				
				unsigned char TMPH,TMPL;
				unsigned char code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
				
				/********************************************************************
				* 名称 : delay()
				* 功能 : 延时函数
				* 输入 : 无
				* 输出 : 无
				***********************************************************************/
				void delay(uint N)
				{
					int i;
					for(i=0; i					;
				}
				
				/********************************************************************
				* 名称 : Reset()
				* 功能 : 复位DS18B20
				* 输入 : 无
				* 输出 : 无
				***********************************************************************/
				uchar Reset(void)
				{
					uchar deceive_ready;
					DQ = 0;
					delay(29);
					DQ = 1;
					delay(3);
					deceive_ready = DQ;
					delay(25);
					return(deceive_ready);
				}
				
				/********************************************************************
				* 名称 : read_bit()
				* 功能 : 从DS18B20读一个位值
				* 输入 : 无
				* 输出 : 从DS18B20读出的一个位值
				***********************************************************************/
				uchar read_bit(void)
				{
					uchar i;
					DQ = 0;
					DQ = 1;
					for(i=0; i					return(DQ);
				}
				
				/********************************************************************
				* 名称 : write_bit()
				* 功能 : 向DS18B20写一位
				* 输入 : bitval(要对DS18B20写入的位值)
				* 输出 : 无
				***********************************************************************/
				void write_bit(uchar bitval)
				{
				DQ=0;if(bitval==1)
				DQ=1;
				delay(5);
				DQ=1;
				}
				
				/********************************************************************
				* 名称 : read_byte()
				* 功能 : 从DS18B20读一个字节
				* 输入 : 无
				* 输出 : 从DS18B20读到的值
				***********************************************************************/
				uchar read_byte(void)
				{
					uchar i,m,receive_data;
					m = 1;
					receive_data = 0;
					for(i=0; i					{
						if(read_bit())
						{
							receive_data = receive_data + (m 						}
						delay(6);
					}
					return(receive_data);
				}
				
				/********************************************************************
				* 名称 : write_byte()
				* 功能 : 向DS18B20写一个字节
				* 输入 : val(要对DS18B20写入的命令值)
				* 输出 : 无
				***********************************************************************/
				void write_byte(uchar val)
				{
					uchar i,temp;
					for(i=0; i					{
						temp = val >> i;
						temp = temp & 0x01;
						write_bit(temp);
						delay(5);
					}
				}
				
				/********************************************************************
				* 名称 : display()
				* 功能 : 数码管显示温度值
				* 输入 : 温度值
				* 输出 : 无
				***********************************************************************/
				void display(uint tem)   
				{
					uchar j;
					for(j=50; j>0; j--)
					{
						P0 = table[tem / 100];
						P2 = 0x04;
						delay(500);
						P0 = table[tem / 10 % 10];
						P2 = 0x02;
						delay(500);
						P0 = table[tem % 10];
						P2 = 0x01;
						delay(500);
					}
				}
				
				/********************************************************************
				* 名称 : Main()
				* 功能 : 主函数
				* 输入 : 无
				* 输出 : 无
				***********************************************************************/
				void main()
				{
					uint temp;
					P2 = 0x00;
					while(1)
					{
						Reset();
						write_byte(jump_ROM);
						write_byte(start);
						Reset();
						write_byte(jump_ROM);
						write_byte(read_EEROM);
						TMPL = read_byte();
						TMPH = read_byte();
						temp = TMPH;
						temp 						temp = temp | TMPL;
						temp = TMPL / 16 + TMPH * 16;
						display(temp);
					}
				}			

相关资源