热转印机完整程序

#include
typedef unsigned char unit8;
typedef unsigned int unit16;
//******************************符号常量及口线分配声明*********
#define DISP_SEG P0
sbit DISP_D1=P2^2;
sbit DISP_D2=P2^1;
sbit DISP_D3=P2^0;
sbit BUZZ=P1^7;
sbit DS18B20_DATA=P1^0;
/***********************函数原型声明********************************************/
void DS18B20Init();
void DS18B20bitWrite(bit Bit);
bit DS18B20bitRead();
void DS18B20ByteWrite(uint8 Byte);
unit8 DS18B20ByteRead();
void Gettemperature();
void Disptemperature();
void checkTemperature();
void Delay(uint16 ms);
void Delay1ms();

uint8 code Segcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

int Temperature;

void main()
{
while(1)
{
GetTemperature(); //获取当前温度
DisTemperature(); //显示当前温度
CheckTemperature(); //超温度报警处理
}}
/******************DS18B20初始化函数*****************/
void DS18B20Init()
{
uint8 i;
while(1)
{
DS18B20_DATA=0;
i=200;
while(--1!=0); //延时800us(注:程序代码优化级别为5)
DS18B20_DATA=1;
i=15;
while(--i!=0); //延时60us
if(DS18B20_DATA==1) continue; //重发复位脉冲
i=30;
while(--i!=0); //复位成功
if(DS18B20_DATA==1) break;
}
i=75;
while(--i!=0); //延时300us

}
/**********************DS18B20位写操作函数************************/
void DS18B20bitWrite(bit bit)
{
uint8 i;
DS18B20_DATA=0;
i=1;
while(--i!=0); //延时4us
ds18b20_DATA=Bit; //发送1位数到DS18B20
i=14;
while(--i!=0) ; //延时56us
DS18B20_DATA=1;
}
/***********************DB18B20位读操作函数****************************/
bit DS18B20bitRead()
{
bit temp;
uint8 i;
DS18B20_DATA=0;
i=3;
while(--i!=0) ; //延时12us
DS18B20_DATA=1;
temp=DS18B20_DATA; //读来自DS18B20的1位数
i=12;
while(--i!=0); //延时48us
return temp;
}
/******************DS18B20字节操作函数*****************/
void DS18B20 ByteWrite(uint8 Byte)
{
uint8 count;
for(count=0;count<8;count++) //一共发送8位
{
if((Byte&0x01)==0x01) //先发最低位
DS18B20bitWrite(1); //发送1
else
DS18B20bitWrite(0); //发送0

Byte>>=1;
}
}
/*********************DS18B20字节读操作函数******************/
uint8 DS18B20ByteRead()
{
uint8 count,temp;
temp=0;
for(count=0;count<8;count++) //一共读8位
{
temp>>=1; //字节变量右移
if(DS18B20bitRead()==1) //读取1位数据并存入临时变量temp中
temp丨=0x80; //temp最高位
}
return temp; //返回读到的8位数
}
/***************************温度获取函数***********************/
void GetTemperature()
{
Uint8 ADResult[2];
DS18B20Init();
DS18B20ByteWrite(0xcc); //跳过ROM(只有一个DS18B20)
DS18B20ByteWrite(0x44); //启动温度采集(转换)
while(DS18B20bitRead()==0)
DispTemperature(); //等待转换结束,期间不断刷新显示
DS18B20Init(); //温度转换结束,再次初始化
DS18B20ByteWrite(0xcc); //跳过ROM
DS18B20ByteWrite(0xbe); //读取转换结果
ADResult[0]=DS18B20ByteRead(); //读取低8位
ADResult[1]=DS18B20ByteRead(); //读高8位
Temperature=(ADResult[1]<<8)+ADReture[0]; //组合为16位
}
/*********************温度显示函数***********************/
void DispTemperature()
{
uint8 temp=(Temperature>>4)/10;
if(temp==0)
DISP_SEG=0xff; //温度值十位的0不显示
else
DISP_SEG=Segcode[temp];
DISP_D1=0;
Delay1ms();
DISP_D1=1;
DISP_SEG=Segcode[(Temperature>>4)%10]&0x7f; //显示个位的小数点符号
DISP_D2=0;
Delay1ms();
DISP_D2=1;
DISP_SEG=Segcode[(Temperature&0X0F)*10/16]; //显示小数点后面的十分位
DISP_D3=0;
Delay1ms();
DISP_D3=1;
}
/******************************超温报警函数********************/
void CheckTemperature()
{
if(Temperature>0x158)//温度超过37.5℃,蜂鸣器报警
{
BUZZ=0;
Delay(50);
BUZZ=1;
Delay(100);
}
}
/********************延时函数*******************/
void Delay(uint16 ms)
{
do{
Delay1ms();
}while(--ms);
}
/************************8延时1ms函数************/
void Delay1ms()
{
uint8 i;
for(i=0;i<125;i++) //注:程序代码的优化级别应该为5
}
/*****************程序结束***************/






























相关文档
最新文档