//===================================================== // DS18D20写数据/命令
//===================================================== void writebyte(uchar dat) {
unsigned char m;
for(m=0;m<8;m++) {
CLR_OP;
if(dat&0X01) {
SET_OP;
delayus(70); } else {
CLR_OP;
delayus(70); SET_OP; }
dat>>=1; } }
//===================================================== // DS18D20读数据
//===================================================== uchar readbyte() { uchar i,dat; for(i=0;i<8;i++) {
dat>>=1; SET_DIR; CLR_OP; SET_OP; CLR_DIR;
if(CHECK_IP==1) dat|=0X80; delayus(50); }
return (dat);
}
//===================================================== // DS18D20初始化
//===================================================== config() {
reset();
writebyte(0xCC); writebyte(0x4E); writebyte(0xFF); writebyte(0xFF);
writebyte(0x7F);//设置精度为1/16摄氏度 }
//===================================================== // 读取温度,并转换成BCD码,显示在tempre数组中
//===================================================== void read_temper() {
uchar lsb=0,msb=0,temper=0;//定义变量的时候记得赋初值 float backbit=0;//小数点后的数值×1000 unsigned int temper1;
reset();//复位
writebyte(0xCC);//跳过序列号 writebyte(0x44);//开启温度转换
reset();//复位
writebyte(0xCC);//跳过序列号
writebyte(0xBE);//开始ds18b20的寄存器
lsb=readbyte();//读温度寄存器的低8位 msb=readbyte();//读温度寄存器的高8位
backbit=(lsb&0x0F)*625;//获取温度的小数部分 temper1=backbit;//将浮点型数据转化为int型
lsb=(lsb>>4)&0x0F;//获取温度的整数部分 msb=(msb<<4)&0xF0;
temper=(msb|lsb)%0x7f;
//温度缓存区
temperature[0]=(temper0)/10+'0';
temperature[1]=temper+'0'; temperature[2]='.',
temperature[3]=temper1/1000+'0';
temperature[4]=(temper100)/100+'0'; temperature[5]=(temper10)/10+'0'; temperature[6]=temper1+'0'; }
/*================================================= 头文件名:2402.h
功能:LCM2402液晶的驱动程序
==================================================*/ #include
#define uchar unsigned char #define uint unsigned int //BGHSDGHDSGH #define LCM_rs 0 #define LCM_wr 1 #define LCM_en 2
#define DDR_LCM_CONTROL DDRA #define DDR_LCM_DATA DDRB
#define PORT_LCM_CONTROL PORTA #define PORT_LCM_DATA PORTB
void LCM_delay(uint ms) {
uint i,j;
for(i=0;i for(j=0;j<1141;j++); } } void LCM_delay1(uint time) //delay about 1.25us { uint i,j; for(i=0;i