蓝桥杯单片机学习过程记录(七)温度传感器

蓝桥杯单片机学习过程记录(七)温度传感器


温度传感器

温度整数:
在这里插入图片描述

//温度传感器
#include<STC15F2K60S2.H>
#include<intrins.h>
sbit DS =P1^4;
#define uchar unsigned char ;
#define uint unsigned int ;
uchar wendu;
uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x54,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0xff};
uint yi,er,san,si,wu,liu,qi,ba;
void Delay80us();   
void Delay500us();              
void delayms(int ms); 
void display_12(yi,er); 
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void allinit(void);              
void ds_init(void);
void ds_write(unsigned char dat);
uchar ds_read(void);
unsigned char temper_get(void);
void main(void){
 allinit();
 yi=21;er=21;san=21;si=21;wu=21;liu=21;qi=21;ba=21;
 while(1){
  wendu=temper_get();
  yi=wendu/10;er=wendu%10;
  display_12(yi,er);
  display_34(san,si);
  display_56(wu,liu);
  display_78(qi,ba);
 }
}
void ds_write(unsigned char dat){
 unsigned char i;
 for(i=0;i<8;i++){
  DS=0;
  DS=dat&0x01;
  Delay80us();
  DS=1;
  dat>>=1;
 }
}
uchar ds_read(void){
 unsigned char i;
 unsigned char dat;
 for(i=0;i<8;i++){
  DS=0;
  dat>>=1;
  //Delay80us();
  DS=1;
  if(DS==1)
   dat=dat|0x80;
  Delay80us();
 }
 return dat;
}
unsigned char temper_get(void){
 unsigned char low,high,temp;
 //初始化ds18b20
 ds_init();
 ds_write(0XCC);
 ds_write(0x44);
 Delay500us();
 ds_init();
 ds_write(0xcc);
 ds_write(0xbe);
 low=ds_read();
 high=ds_read();
 //取中间八位
 temp=high<<4;
 temp=temp|(low>4);
 return temp;
}
//数码管12
void display_12(yi,er){
 P2=0XC0;P0=0X01;
 P2=0XE0;P0=seg[yi];
 delayms(1);
 P2=0XC0;P0=0X02;
 P2=0XE0;P0=seg[er];
 delayms(1);
} 
//数码管34
void display_34(san,si){
 P2=0XC0;P0=0X04;
 P2=0XE0;P0=seg[san];
 delayms(1);
 P2=0XC0;P0=0X08;
 P2=0XE0;P0=seg[si];
 delayms(1);
} 
//数码管56
void display_56(wu,liu){
 P2=0XC0;P0=0X10;
 P2=0XE0;P0=seg[wu];
 delayms(1);
 P2=0XC0;P0=0X20;
 P2=0XE0;P0=seg[liu];
 delayms(1);
} 
//数码管78
void display_78(qi,ba){
 P2=0XC0;P0=0X40;
 P2=0XE0;P0=seg[qi];
 delayms(1);
 P2=0XC0;P0=0X80;
 P2=0XE0;P0=seg[ba];
 delayms(1);
} 
//温度初始化
void ds_init(void){
 DS=0;
 Delay500us();
 DS=1;
 Delay500us();
}
void allinit(void){
 //初始蜂鸣器
 P2=0XA0;P0=0X00;
 //关闭数码管
 P2=0XC0;P0=0XFF;
 P2=0XE0;P0=0XFF;
 //关闭LED
 P2=0X80;P0=0XFF;
}
void delayms(int ms){
 int q,w;
 for(q=0;q<ms;q++)
  for(w=0;w<845;w++);
}
void Delay500us()  //@11.0592MHz
{
 unsigned char i, j;
 _nop_();
 _nop_();
 i = 6;
 j = 93;
 do
 {
  while (--j);
 } while (--i);
}
void Delay80us()  //@11.0592MHz
{
 unsigned char i, j;
 _nop_();
 i = 1;
 j = 217;
 do
 {
  while (--j);
 } while (--i);
}

温度小数:
在这里插入图片描述

//温度传感器小数
#include<STC15F2K60S2.H>
#include<intrins.h>
//定义
sbit DS =P1^4;
#define uchar unsigned char ;
#define uint unsigned int ;
//温度变量显示
long wendu;
uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0xff};
uint yi,er,san,si,wu,liu,qi,ba;
void Delay80us();   
void Delay500us();              
void delayms(int ms); 
void display_12(yi,er); 
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void allinit(void);              
void ds_init(void);
void ds_write(unsigned char dat);
uchar ds_read(void);
long temper_get(void);
void main(void){
 allinit();
 yi=21;er=21;san=21;si=21;wu=21;liu=21;qi=21;ba=21;
 while(1){
  wendu=temper_get();
  yi=wendu/100000;er=wendu%100000/10000+10;san=wendu%10000/1000;si=wendu%1000/100;
  display_12(yi,er);
  display_34(san,si);
  display_56(wu,liu);
  display_78(qi,ba);
 }
}
//ds写入
void ds_write(unsigned char dat){
 unsigned char i;
 for(i=0;i<8;i++){
  DS=0;
  DS=dat&0x01;
  Delay80us();
  DS=1;
  dat>>=1;
 }
}
//ds读取
uchar ds_read(void){
 unsigned char i;
 unsigned char dat;
 for(i=0;i<8;i++){
  DS=0;
  dat>>=1;
  DS=1;
  if(DS==1)
   dat=dat|0x80;
  Delay80us();
 }
 return dat;
}
long temper_get(void){
 unsigned char low,high;
 long temp;
 //初始化ds18b20
 ds_init();
 //温度转换
 ds_write(0XCC);
 ds_write(0x44);
 Delay500us();
 ds_init();
 ds_write(0XCC);
 ds_write(0XBE);
 //读数
 low=ds_read();
 high=ds_read();
 ds_init();
 temp=high&0x0f;
 temp<<=8;
 temp|=low;
 temp=temp*625;
 return temp;
}
//数码管12
void display_12(yi,er){
  P2=0XC0;P0=0X01;
  P2=0XE0;P0=seg[yi];
  delayms(1);
  P2=0XC0;P0=0X02;
  P2=0XE0;P0=seg[er];
  delayms(1);
} 
//数码管34
void display_34(san,si){
  P2=0XC0;P0=0X04;
  P2=0XE0;P0=seg[san];
  delayms(1);
  P2=0XC0;P0=0X08;
  P2=0XE0;P0=seg[si];
  delayms(1);
} 
//数码管56
void display_56(wu,liu){
  P2=0XC0;P0=0X10;
  P2=0XE0;P0=seg[wu];
  delayms(1);
  P2=0XC0;P0=0X20;
  P2=0XE0;P0=seg[liu];
  delayms(1);
} 
//数码管78
void display_78(qi,ba){
  P2=0XC0;P0=0X40;
  P2=0XE0;P0=seg[qi];
  delayms(1);
  P2=0XC0;P0=0X80;
  P2=0XE0;P0=seg[ba];
  delayms(1);
} 
//温度初始化
void ds_init(void){
  DS=0;
  Delay500us();
  DS=1;
  Delay500us();
}
void allinit(void){
  //初始蜂鸣器
  P2=0XA0;P0=0X00;
  //关闭数码管
  P2=0XC0;P0=0XFF;
  P2=0XE0;P0=0XFF;
  //关闭LED
  P2=0X80;P0=0XFF;
}
//延时
void delayms(int ms){
  int q,w;
  for(q=0;q<ms;q++)
   for(w=0;w<845;w++);
}
//延时
void Delay500us()  //@11.0592MHz
{
  unsigned char i, j;
  _nop_();
  _nop_();
  i = 6;
  j = 93;
  do
  {
   while (--j);
  }  while (--i);
}
//延时
void Delay80us()  //@11.0592MHz
{
  unsigned char i, j;
  _nop_();
  i = 1;
  j = 217;
  do
  {
   while (--j);
  }  while (--i);
}
发布了27 篇原创文章 · 获赞 17 · 访问量 4153

猜你喜欢

转载自blog.csdn.net/weixin_44747240/article/details/104189836