基于51单片机的18b20数码管C语言代码

合集下载

基于51单片机的18B20温度计C程序

基于51单片机的18B20温度计C程序

本程序为本人用单片机80c51与18b20做实验时写的,其中有些是汉语拼音,便于咱们中国同胞们理解.仅供参考#include <reg52.h>#define uint unsigned int#define uchar unsigned charuchar tab[]="0123456789WD:C";sbit ds=P2^6;sbit rs=P3^4;sbit rw=P3^5;sbit en=P3^6;uchar s,g,shu;/***延时2tus***/yanshi(uchar t){while(--t){;}}/***延时tms** */delay(uint t){uchar a,b;for(a=t;a>0;a--)for(b=110;b>0;b--);}/***18B20初始化***/chushi(){ds=0;yanshi(250); //延时500usds=1;yanshi(2);}/***等待应答***/yingda(){while(ds);while(~ds);yanshi(2);}/***写一个字节***/w_dat(uchar dat){uchar i;for(i=0;i<8;i++){dat=dat>>1;ds=0;yanshi(8);ds=CY;yanshi(30);ds=1;}}/***读一个字节***/ uchar du_dat(){uchar i,dat;for(i=0;i<8;i++){ dat=dat>>1;ds=0;yanshi(1);ds=1;if(ds==1){dat=dat|0x80;}yanshi(30);}return dat;}/***启动温度转换***/ zhuanhuan(){chushi();yingda();delay(1);w_dat(0xcc);w_dat(0x44);}/***读取温度***/uchar du_wendu(){uchar a,b,dat;chushi();yingda();delay(1);w_dat(0xcc);w_dat(0xbe);a=du_dat(); //低位字节;b=du_dat(); //高位字节;dat=(b<<4)|(a>>4);return dat;}////////////////////////////// 1602液晶/////////////////////////////w_ml(uchar com){rs=0;P0=com;delay(5);en=1;delay(5);en=0;}chushihua(){rw=0;en=0;w_ml(0x38);w_ml(0x0c);w_ml(0x06);w_ml(0x01); }w_1602(uchar date){rs=1;P0=date;delay(5);en=1;delay(5);en=0;}xianshi(){w_ml(0x80);w_1602(tab[10]);w_1602(tab[11]);w_1602(tab[12]);w_1602(tab[s]);w_1602(tab[g]);w_1602(tab[13]);}/***************//** 主函数**//**************/main(){chushihua();while(1){delay(1);zhuanhuan();delay(10);shu=du_wendu();s=shu/10;g=shu%10;xianshi();}}。

温度传感器18B20驱动程序(C语言)

温度传感器18B20驱动程序(C语言)

温度传感器18B20驱动程序(C语言)我精心整理的一个温度传感器18B20的程序包,可直接调用这个程序适用于12MHz晶振的51单片机,默认为89C52系列,如果是89C51的话,把头文件改为#include "reg51.h"就可以了,下面是头文件和C文件,大家在工程里加入C文件,在主程序中加入头文件,直接调用read_temp();函数,就可以返回浮点型的温度值,为10进制,可以处理后直接用LCD或数码管显示,很方便,是我做温控的子程序。

/*************头文件******************/#include "reg52.h"#include "intrins.h" //_nop_();延时函数用#define uchar unsigned char#define uint unsigned intsbit DQ="P3"^4; //温度输入口ow_reset(void);//18B20复位void write_byte(uchar val);//写命令uchar read_byte(void);//读数据/***********读出温度函数**********输入:无输出:zs+xs,格式为123.4即为浮点型数的温度格式===================================*/float read_temp();/***************C文件**********************/#include "reg52.h"#include "18B20.h" //_nop_();延时函数用//*******温度小数部分用查表法**********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; /***********11微秒延时函数**********///void delay(uint t){for(;t>0;t--);}///***********18B20复位函数**********/ow_reset(void){char presence="1";while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0; //delay(50); // 550usDQ=1; //delay(6); // 66uspresence=DQ; // presence="0继续下一步"}delay(45); //延时500uspresence = ~DQ;}DQ=1;}/////**********18B20写命令函数*********///向 1-WIRE 总线上写一个字节void write_byte(uchar val){uchar i;for (i=8; i>0; i--) //{DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; //最低位移出delay(6); //66usval=val/2; //右移一位}DQ = 1;delay(1);}///*********18B20读1个字节函数********///从总线上读取一个字节uchar read_byte(void){uchar i;uchar value = 0;for (i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ = 0; //_nop_();_nop_();_nop_();_nop_(); //4usDQ = 1;_nop_();_nop_();_nop_();_nop_(); //4usif(DQ)value|=0x80;delay(6); //66us}DQ=1;return(value);}///***********读出温度函数**********输入:无输出:zs+xs,格式为123.4即为浮点型数的温度格式===================================*/ //float read_temp(){float zs,xs;//存放整数和小数uchar temp_data[2];//读出温度暂存EA=0;//禁止中断,防止读错ow_reset(); //总线复位write_byte(0xCC); // 发Skip ROM命令write_byte(0xBE); // 发读命令temp_data[0]=read_byte(); //温度低8位temp_data[1]=read_byte(); //温度高8位ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0x44); // 发转换命令xs=ditab[temp_data[0]&0x0f];//小数位xs=xs/10;zs=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//整数位return (zs+xs);EA=1;//开中断}//结束当然,大家做数字温度计的话直接使用这个程序就可以了,但是如果要做多点温控的话,大家还要自己写查找序列号的程序!加油!/************************************************************ *18B20驱动程序,DQ为数据口,接于P2.1*11.0592M晶振,上拉4.7k电阻*Author:fyb*2005-3-25 11:23,OK!*************************************************************/ #i nclude<reg51.h>#i nclude<intrins.h>#define uchar unsigned char#define uint unsigned intsbit dq = P1^7;bit flag;uint Temperature;uchar temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节uchar id_buff[8];uchar *p;uchar crc_data;uchar code CrcTable [256]={0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62 , 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 12 8, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29 , 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210,48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 2 05,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 2 38,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 1 45, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 2 44, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 2 15, 137, 107, 53};///************************************************************ *Function:延时处理*parameter:*Return:*Modify:*************************************************************/ void TempDelay (uchar us){while(us--);}/************************************************************ *Function:18B20初始化*parameter:*Return:*Modify:*************************************************************/ void Init18b20 (void){dq=1;_nop_();dq=0;TempDelay(86); //delay 530 uS//80_nop_();dq=1;TempDelay(14); //delay 100 uS//14_nop_();_nop_();_nop_();if(dq==0)flag = 1; //detect 1820 success!elseflag = 0; //detect 1820 fail!TempDelay(20); //20_nop_();_nop_();dq = 1;}/************************************************************ *Function:向18B20写入一个字节*parameter:*Return:*************************************************************/ void WriteByte (uchar wr) //单字节写入{uchar i;for (i=0;i<8;i++){dq = 0;_nop_();dq=wr&0x01;TempDelay(5); //delay 45 uS //5_nop_();_nop_();dq=1;wr >>= 1;}}/************************************************************ *Function:读18B20的一个字节*parameter:*Return:*Modify:*************************************************************/ uchar ReadByte (void) //读取单字节{uchar i,u=0;for(i=0;i<8;i++){dq = 0;u >>= 1;if(dq==1)u |= 0x80;TempDelay (4);_nop_();}return(u);}/************************************************************ *Function:读18B20*parameter:*Return:*Modify:*************************************************************/ void read_bytes (uchar j){uchar i;for(i=0;i<j;i++){*p = ReadByte();p++;}}/************************************************************ *Function:CRC校验*parameter:*Return:*Modify:*************************************************************/ uchar CRC (uchar j)uchar i,crc_data=0;for(i=0;i<j;i++) //查表校验crc_data = CrcTable[crc_data^temp_buff[i]];return (crc_data);}/************************************************************ *Function:读取温度*parameter:*Return:*Modify:*************************************************************/ void GemTemp (void){read_bytes (9);if (CRC(9)==0) //校验正确{Temperature = temp_buff[1]*0x100 + temp_buff[0];// Temperature *= 0.625;Temperature /= 16;TempDelay(1);}}/************************************************************ *Function:内部配置*parameter:*Return:*Modify:*************************************************************/ void Config18b20 (void) //重新配置报警限定值和分辨率Init18b20();WriteByte(0xcc); //skip romWriteByte(0x4e); //write scratchpadWriteByte(0x19); //上限WriteByte(0x1a); //下限WriteByte(0x7f); //set 11 bit (0.125)Init18b20();WriteByte(0xcc); //skip romWriteByte(0x48); //保存设定值Init18b20();WriteByte(0xcc); //skip romWriteByte(0xb8); //回调设定值}/************************************************************ *Function:读18B20ID*parameter:*Return:*Modify:*************************************************************/ void ReadID (void)//读取器件 id{Init18b20();WriteByte(0x33); //read romread_bytes(8);}/************************************************************ *Function:18B20ID全处理*parameter:*Return:*Modify:*************************************************************/ void TemperatuerResult(void){p = id_buff;ReadID();Config18b20();Init18b20 ();WriteByte(0xcc); //skip romWriteByte(0x44); //Temperature convertInit18b20 ();WriteByte(0xcc); //skip romWriteByte(0xbe); //read Temperaturep = temp_buff;GemTemp();}。

ds18b20c语言程序

ds18b20c语言程序

ds18b20c语言程序DS18B20驱动程序(C语言)//#include"reg51.h"sbit DQ =P1^4; //定义通信端口//延时函数/*void delay(unsigned inti){while(i--);}*///初始化函数Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ 复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20);}//读一个字节ReadOneChar(void){unsigned chari=0;unsigned char dat = 0;for (i=8;i>;0;i--){DQ = 0; // 给脉冲信号dat>;>;=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}//写一个字节WriteOneChar(unsigned chardat){unsigned char i=0;for (i=8; i>;0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ =1;dat>;>;=1;}//delay(4);}//DS18B20程序读取温度ReadTemperature(void){unsigned char a=0;unsignedchar b=0;unsigned int t=0;floattt=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;t t=t*0.0625;//t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用return(t);}//DS18B20主程序main(){unsigned chari=0;while(1){i=ReadTemperature();//读温度}}ds18b20c语言程序完毕。

我的51单片机之 温度传感器18B20 的C语言和汇编编程

我的51单片机之 温度传感器18B20 的C语言和汇编编程

{
TCZ=TCZ%100;//只显示小于 100 的整数温度
}
TC[1]=TCZ/10;
TC[0]=TCZ%10;
}
Hale Waihona Puke }void main() {
LEDCODE=0xFF; LED1=0; while(1) {
ReadTemp(); Disp(); } }
四、汇编程序: ;********************************************************************
温度传感器 18B20 实验
一、功能: 插上 18B20,上电后,数码管显示相应的环境温度。
二、电路图:
三、C 程序: //******************************************************************** //读取 18B20 输出的温度数据(2 位)并在数码管上显示;made by luqichao //********************************************************************
unsigned char Reset(); unsigned char ReadByte(); void WriteByte(unsigned char Data); void ReadTemp(); //延时 void delay(unsigned char n) {
unsigned char i; for(i=0;i<n;i++) { } }
Data>>=1; CLK=0; NOP();NOP();NOP();NOP();NOP();NOP();//6us CLK=1; NOP();NOP();NOP();NOP();NOP();//4us Temp=CLK; if(Temp) {

51单片机18b20程序

51单片机18b20程序
init();
EA=1;
com_init(9600);
init();
for(num=0;num<15;num++)
{
write_data(table[num]);
delay(20);
}
for(num=0;num<16;num++)
{
write_com(0x18);
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar adc;//定义采样值变量
uchar pq,start,bai,shi,ge,shi1;
uchar code table[]=" Temperature is:";
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
PS=1; //串口中断优先
// PX0=0;
SCON = 0x50; /* 0x52;//SCON */
TMOD = 0x20; /*0x20;// TMOD */
TCON = 0x60; /*0x60;// TCON */
case 38400:

51单片机与ds18b20程序

51单片机与ds18b20程序

#include <>#include <>#define uchar unsigned char#define uint unsigned intsbit DQ = P2^2; //数据口define interfacesbit dula = P2^6; //数码管段选sbit wela = P2^7; //数码管位选uint temp; //温度值 variable of temperature//不带小数点unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//带小数点unsigned char code table1[] ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*************精确延时函数*****************/void delay(unsigned char i){while(--i);}/******************************************此延时函数针对的是12Mhz的晶振delay(0):延时518us 误差:518-2*256=6delay(1):延时7us (原帖写"5us"是错的)delay(10):延时25us 误差:25-20=5delay(20):延时45us 误差:45-40=5delay(100):延时205us 误差:205-200=5delay(200):延时405us 误差:405-400=5*******************************************//*****************DS18B20******************/void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command{DQ = 1; //DQ复位,不要也可行。

51单片机采集18B20温度

51单片机采集18B20温度

51单片机采集18B20温度-----并用7段数码管动态显示#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar table[]={0xc0,0xf9,0xa4,0xb0, //"0","1","2","3"共阳0x99,0x92,0x82,0xf8, //"4","5","6","7"0x80,0x90,0xbf,0xff}; //"8","9",负温度/错误,正温度/消隐uchar shu[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};sbit DQ=P3^7; //定义18B20数据线bit sflag; //正负标志位uchar readdata[2]; //保存温度数值数组uchar test; //保存温度数值中间变量uchar LED[8]; //数码管显示数变量,LED[0]正负标记位,之后依次为百十个十分百分uchar live=0; //18b20存在标记位uchar cnt=0; //中断标记位//************18B20程序***********************************************************//void delayus(uint t) //微秒级延时{while(t--);}void reset(void)//复位18B20{DQ=1; delayus(8);DQ=0; delayus(80);DQ=1; delayus(10);live=DQ; delayus(20);DQ=1; delayus(100);}void writebyte(uchar command)//写字节到18B20{uchar i=0;for(i=8;i>0;i--){DQ=0;DQ=command&0x01;delayus(5);command>>=1;DQ=1;}}uchar readbyte()//从18b20读出字节{uchar i=0;uchar temp=0;for(i=8;i>0;i--){DQ=0; //采样开始DQ=1; //释放总线temp>>=1;if(DQ)temp|=0x80;delayus(5);DQ=1; //总线复位}return(temp);}//************数码管扫描程序***********************************************************//void display(uchar LED[]){uint i;for(i=0;i<8;i++){P0=0X00;if(i==3)P2=table[LED[i]]&0x7f;elseP2=table[LED[i]];P0=shu[i];delayus(250);}}//****************************************************************************/// /void main(){uint i=0;TMOD=0X01;TR0=1;ET0=1;EA=1;while(1){while(cnt){cnt=0;reset();if(live==0) //18B20存在{writebyte(0xcc);writebyte(0x44); //转化温度reset();writebyte(0xcc);writebyte(0xbe); //读取温度readdata[0]=readbyte(); //读取低位温度readdata[1]=readbyte(); //读取高位温度sflag=1; //温度标记位,1为正,0为负if((readdata[1]&0xf8)!=0x00) //如果是负温,将补码转为原码{sflag=0;readdata[1]=~readdata[1]; //负数的补码等于真值按位取反后末位加1readdata[0]=~readdata[0]+1;if(readdata[0]>255) //如果低八位的值转为原码后大于11111111(255),向高八位进1readdata[1]++;}test=((readdata[1]*256)+readdata[0])/16;//把高位与低位的值转成10进制)LED[1]= test/100; //百位LED[2]= test%100/10; //十位LED[3]= test%10; //个位LED[4]= (readdata[0]&0x0f)*6/10; //十分位的值,精确度为0.0625度LED[5]= (readdata[0]&0x0f)*6%10; //百分位的值,精确度为0.0625度}else //18B20不存在for(i=0;i<8;i++)LED[i]=10;LED[6]=11;LED[7]=11;if(sflag==0){LED[0]=10;}else LED[0]=11;display(&LED[0]); //动态显示数码}}}//****************************************************************************// void timer0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;cnt++;}。

C51单片机DS18B20-数码管显示-温度传感器

C51单片机DS18B20-数码管显示-温度传感器
_nop_();
DQ = 0; //MCU拉低
nops(); //调用_nop_()延时函数要多一些时间,延时1.085+0.235 = 1.32us,数据手册规定大于1us
DQ = dat&0x01;//从低位到高位发送 ,要在15us之前将数据送到总线上
#include <reg52.h>
#include <intrins.h>
#include "def.h"
#define nops(); {_nop_(),_nop_();}
code uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
void WriteByte(uchar dat)//写0或写1共用此函数
{
uchar i;
for(i=0;i<8;i++)// 00000 001,分别写1位的时序
{ // 0000 0000
DQ = 1; //起始状态总线为高
}
/*****************************读一个字节*******************************/
uchar ReadByet()
{
uchar i;
uchar dat = 0;
for(i=0;i<8;i++) //分别读1位的时序
{
DQ = 1; //起始
dat |= 0x01<<i;//最先发送过来的是低位数据
}
delay10us(6); //延时60us,其中包括发送两个时间之间所需的时间间隔

基于51单片机的18b20数码管C语言代码

基于51单片机的18b20数码管C语言代码

基于51单片机的18b20数码管C语言代码#include#include#define uchar unsigned char#define uint unsigned intsbit DQ=P1^4;sbit bell=P0^6;uchar code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code led_t[]={25,30};uchar led_quan[],led_n=0,t_n=0;bit mim;bit flag;void delay1(uint t){while(t--);}void delay(uchar del){uchar x,y;for(x=0;x<del;x++)< p="">{for(y=0;y<=148;y++);}}//DS18B20初始化函数bit init_ds18b20(void){bit initflag = 0;DQ = 1;delay1(12);DQ = 0;delay1(80); // 延时大于480usDQ = 1;delay1(10); // 14initflag = DQ; // initflag等于1初始化失败delay1(5);return initflag;}//通过单总线向从器件写一个字节void wr_ds18b20(unsigned char byt){unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = byt&0x01;delay1(5);DQ = 1;byt >>= 1;}delay1(5);}//通过单总线从从器件读一个字节unsigned char rd_ds18b20(void){unsigned char i;unsigned char byt;for(i=0;i<8;i++){DQ = 0;byt >>= 1;DQ = 1;if(DQ){byt |= 0x80;}delay1(5);}return byt;}//温度转换、读取及数据处理器函数unsigned char rd_temperature(void) {unsigned char low,high;char temp;init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0x44); //启动温度转换delay1(200);init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0xBE); //读取寄存器low = rd_ds18b20(); //低字节high = rd_ds18b20(); //高字节temp = high<<4;temp |= (low>>4);return temp;}void dingwen(){if(rd_temperature()>=30) { bell=1;P2|=0xa0;P2&=0x5f;}if(rd_temperature()<=25) { bell=1;P2|=0xa0;P2&=0x5f;}}void tine0(){TMOD=0X01;TH0 = 0xDC; // 定时10ms TL0 = 0x00;EA=1;ET0=1;TR0=1;}void time1_isr() interrupt 1 {TH0 = 0xDC; // 定时10ms TL0 = 0x00;t_n++;if (t_n == 100) // 1s{t_n = 0;flag=~flag;}void led_shuju(){led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}void flash1(mim){ switch(mim){case 0:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];case 1:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=0xff;led_quan[3]=0xff;led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}void flash2(mim){ switch(mim){case 0:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]= 0xbf;led_quan[5]= 0xff;led_quan[6]= 0xbf;case 1:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10]; led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xff;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}}void display( uchar *del){switch(led_n){case 0:P0=del[0];P2=0xe0;P2&=0x1f;P0=0x80;P2=0xc0; P2&=0x3f; delay(3); break; case 1:P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 2:P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3); break; case 3:P0=del[1]; P2=0xe0; P2&=0x1f; P0=0x40; P2=0xc0; P2&=0x3f; delay(3);break; case 4:P0=del[1]; P2=0xe0;P2&=0x1f; P0=0x40;P2=0xc0;P2&=0x3f; delay(3); break; case 5:P0=del[1]; P2=0xe0;P2&=0x1f; P0=0x40;P2=0xc0;P2&=0x3f; delay(3); break; case 6:P0=del[1]; P2=0xe0;P2&=0x1f; P0=0x40;P2=0xc0;P2&=0x3f; delay(3); break;}if(led_n==7)led_n=0;elseled_n++;}void main() {init_ds18b20(); while(1){display(); dingwen();}}</del;x++)<>。

18B20温度显示 c语言程序

18B20温度显示  c语言程序
while(1)
{
tempchange();//温度转换函数
for(i=10;i>0;i--)
{
dis_temp(get_temp());//获取温度并显示
}
deal(temp);//进行温度处理
sprintf(buff,"%f",f_temp);//将浮点温度格式转化为字符型
for(i=10;i>0;i--)
uint temp;//定义整型温度数据
float f_temp ; //定义温度型温度数据
uint warn_l1=270;
uint warn_l2=250;
uint warn_h1=300;
uint warn_h2=320;
sbit led1=P1^0;//发光二极管控制
sbit led2=P1^1;
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);//读出数据最低位在最前面,这样刚好在一个字节的dat里
}
return(dat);
}
void tempwritebyte(uchar dat)//向DS18B20里写一个字节的数据函数
{
warn(10,0x0c);//第三个和第四个灯亮,蜂鸣器发出“嘀”声
}
else//在27到30度之间只调用显示函数延时
{
i=40;
while(i--)
{
dis_temp(get_temp());
}
}
}
void init_com(void)

基于51单片机的DS18B20数码管显示程序

基于51单片机的DS18B20数码管显示程序
定的 《 股 权 出 资登 记 管 理 办法 》 明 确 规
定 。除股 权 公 司资 本 未 缴 足 、被 设 立 质 权、 冻结 , 以及 被 限 制 转 让 等 情 形 外 , 投 资人 可 以 以其 持 有 的境 内公 司股 权 出资
的 主 要 案 例
近几 年涉 及 A股 上 市公 司 国有 股 权 出 资 的案 例 主要 有 :武商 百 联 集 团 的组
股权 出资税 收 规定 、 国资监 管 规 范等 多 个方 面 。在我 国资本 市 场上 , 上 市公 司股
东 以其 所 持上 市 公 司股 份 直接 出资 的案 例 较 为少 见 , 但 是 随着 以混合 所 有 制 、 国 有 资 本经 营 公 司等 为 特征 的 国企 深 化 改
革 步 伐 的加 大 ,以上市 公 司 国有 股 权 出 资 的行为 会越 来越 多 。为厘清 规范 , 控 制 操作 风 险 , 本 文 结合 相 关制 度 , 对 上市 公
资监 管 和证 券监 管等 方 面的 法律
法规进 行 了梳理 、 归 纳和分 析 , 力 求厘 清规 范 、 控 制 操作 风 险 : 并 结
合 分 析 从 政 策 制 定 和 企 业 操 作 两
东 以其 持 有 的全部 或 部 分上 市 公 司 国有 股 权 出 资组建 新 公 司或 对 其他 公 司增 资 扩 股 的行为 。该行 为操 作程 序较 多 , 涉及 证券 、 税 收、 国 资 等 多个 监 管 部 门 ; 操 作 规范庞杂 , 涉 及上 市 公 司并 购 重组 规 范 、
性 财产 。同 时 , 国家 工商 总 局 根 据 《 公 司
司 国有 股 权 出资 涉及 的法律 依 据 、 定价 、 税 收 、国 资监 管 和证 券 监管 等 方 面进 行

基于51单片机DS18B20温度传感器的C语言程序和电路

基于51单片机DS18B20温度传感器的C语言程序和电路

基于51单片机DS18B20温度传感器的C 语言程序和电路DS18B2C 在外形上和三极管很像,有三只脚。

电压范围为 3.0 V 至5.5 V 无需备用电源 测量温度 位 温度转换为 12 位数字格式最大值为 750 毫秒 用户可定义的非易失性温度报警设置 应用范围包 敏感系统。

F 面是DS18B20勺子程序,本人用过完全可行的: #include<reg51.h> #include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit DQ=P2A 0;void reset(); void write_byte(uchar val); uchar read_byte(void); void read_temp(); void work_temp(); uchar data temp_data[2]={0x00,0x00};uchar datadisplay[5]={0x00,0x00,0x00,0x00,0x00}; // 对于温度显示值值 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x0 数部分查表 main() {while(1) {自己添加 ;void delay1(uint t) {for(;t>0;t--); }/////// 温度控制子函数 void reset(){uchar presence=1; while(presence){ while(presence){DQ=1;_nop_();_nop_(); DQ=0;delay1(50); DQ=1; delay1(6);presence=DQ;}delay1(45); presence=~DQ; }//DS18B20//DS18B20 写命令函数 //DS18B20 读 1 字节函数// 温度读取函数 // 温度数据处理函数DQ=1;}void write_byte(uchar val){uchar i;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();DQ=val&0x01;delay1(6);val=val/2;}DQ=1;_nop_();}uchar read_byte(void){uchar i;uchar value=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0; _nop_();_nop_();_nop_();_nop_(); DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ)value|=0x80;delay1(6);}DQ=1;return(value);void read_temp(){reset();write_byte(0xcc);write_byte(0xbe);temp_data[0]=read_byte();temp_data[1]=read_byte();reset();write_byte(0xcc);write_byte(0x44);}void work_temp(){if(temp_data[1]>127){ temp_data[1]=(256-temp_data[1]); temp_data[0]=(256-temp_data[0]); n=1; // 需要前面宏定义}display[4]=temp_data[0]&0x0f; // 低位的低4 位display[0]=ditab[display[4]]; // 小数点后的数值display[4]=((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f)<<4); // 小数display[3]=display[4] / 100; display[1]=display[4] % 100;display[2]=display[1] / 10;display[1]=display[1] % 10;}电路:Bi -ij-F16欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求。

基于51单片机读取18B20序列号代码

基于51单片机读取18B20序列号代码

//主函数#include"ds18b20.h"#include"lcd12864.h"#include"delay.h"void main(){init_lcd();dis_readnumber(); //显示序列号delay(1000);while(1){change_ds18b20();display_lcd12864(value);}}//读取序列号// 温度传感器设置模块#include"ds18b20.h"#include"delay.h"uint value;//sbit DQ=P2^0;void delay_us(uchar t)//微妙延时{while(t--);}void init_ds18b20() //数据初始化DQ=1;delay_us(4);DQ=0;delay_us(80);DQ=1;delay_us(200);}void write_ds18b20(uchar dat) //写数据{uchar i;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;delay_us(15);DQ=1;dat=dat>>1;}delay_us(10);}uchar read_ds18b20() //读数据{uchar i=0,readat=0;for(i=0;i<8;i++){DQ=0;readat=readat>>1;//八位全部都是0,向右移一位后,仍然全是0DQ=1;if(DQ) //如果DQ为1,readat进行或运算,如果为0,则子语句不执行,直接for 循环此时采集的数据是0readat=readat|0x80;//此时最高位为1 ,然后再进行for循环最高位成为第七位,依次往复delay_us(10);}return readat;}/***************************************************************************//****************************************************************************** ***/uchar change_ds18b20()uchar tl,th;init_ds18b20(); //初始化write_ds18b20(0xcc); //跳过romwrite_ds18b20(0x44); //启动ds18b20进行温度转换,结果存入9字节ram中init_ds18b20(); //?缺少不可执行write_ds18b20(0xcc);write_ds18b20(0xbe); //启动读暂存器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P1^4;sbit bell=P0^6;uchar code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code led_t[]={25,30};uchar led_quan[],led_n=0,t_n=0;bit mim;bit flag;void delay1(uint t){while(t--);}void delay(uchar del){uchar x,y;for(x=0;x<del;x++){for(y=0;y<=148;y++);}}//DS18B20初始化函数bit init_ds18b20(void){bit initflag = 0;DQ = 1;delay1(12);DQ = 0;delay1(80); // 延时大于480usDQ = 1;delay1(10); // 14initflag = DQ; // initflag等于1初始化失败delay1(5);return initflag;}//通过单总线向从器件写一个字节void wr_ds18b20(unsigned char byt){unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = byt&0x01;delay1(5);DQ = 1;byt >>= 1;}delay1(5);}//通过单总线从从器件读一个字节unsigned char rd_ds18b20(void){unsigned char i;unsigned char byt;for(i=0;i<8;i++){DQ = 0;byt >>= 1;DQ = 1;if(DQ){byt |= 0x80;}delay1(5);}return byt;}//温度转换、读取及数据处理器函数unsigned char rd_temperature(void) {unsigned char low,high;char temp;init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0x44); //启动温度转换delay1(200);init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0xBE); //读取寄存器low = rd_ds18b20(); //低字节high = rd_ds18b20(); //高字节temp = high<<4;temp |= (low>>4);return temp;}void dingwen(){if(rd_temperature()>=30){ bell=1;P2|=0xa0;P2&=0x5f;}if(rd_temperature()<=25){ bell=1;P2|=0xa0;P2&=0x5f;}}void tine0(){TMOD=0X01;TH0 = 0xDC; // 定时10msTL0 = 0x00;EA=1;ET0=1;TR0=1;}void time1_isr() interrupt 1{TH0 = 0xDC; // 定时10msTL0 = 0x00;t_n++;if (t_n == 100) // 1s{t_n = 0;flag=~flag;}}void led_shuju(){led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}void flash1(mim){ switch(mim){case 0:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];case 1:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=0xff;led_quan[3]=0xff;led_quan[4]=0xbf;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}}void flash2(mim){ switch(mim){case 0:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]= 0xbf;led_quan[5]= 0xff;led_quan[6]= 0xbf;case 1:led_quan[0]=table[rd_temperature()%10];led_quan[1]=table[rd_temperature()%100/10];led_quan[2]=table[led_t[1]%10];led_quan[3]=table[led_t[1]/10];led_quan[4]=0xff;led_quan[5]=table[led_t[0]%10];led_quan[6]=table[led_t[0]/10];}}void display( uchar *del){switch(led_n){case 0:P0=del[0];P2=0xe0;P2&=0x1f;P0=0x80;P2=0xc0;P2&=0x3f;delay(3);break;case 1:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 2:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 3:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 4:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 5:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;case 6:P0=del[1];P2=0xe0;P2&=0x1f;P0=0x40;P2=0xc0;P2&=0x3f;delay(3);break;}if(led_n==7)led_n=0;elseled_n++;}void main(){init_ds18b20();while(1){display();dingwen();}}。

相关文档
最新文档