main.c
#include "STC15F2K60S2.H"
#include "bsp_init.H"
#include "bsp_led.H"
#include "timer.H"
#include "bsp_seg.H"
#include "bsp_key.H"
#include "onewire.h"
#include "STDIO.H"
// led --------专用
unsigned  char  ucled;
//声明函数------专用
void     Key_Pro(void);
void	 Seg_Pro(void);		
void	 Led_Pro(void);	
//减速   ------专用
unsigned  char  Key_Mm;
unsigned  char  Seg_Mm;
unsigned  char  Led_Mm;
//数码管-----专用
unsigned  char  Seg_sss[10];
unsigned  char  Seg_buf[8];
unsigned  char  Pos=0;
//按键-------专用
unsigned  char  Key_k1;
unsigned  char   Key_hig,key_low;
unsigned  char  os=0;
//--------------------------------------------------------------
void  main()
{
    Off_Ws ();  // 关闭外设
	Timer1Init();
	EA = 1;
   
	
	while(1)
	{
	 Key_Pro();
	 Seg_Pro();			
	}
}
void tm1_isr() interrupt 3    //定时器中断  1ms
{
	if(++Key_Mm ==10) Key_Mm= 0;
	if(++Seg_Mm ==100) Seg_Mm= 0;
	if(++Led_Mm ==300) Led_Mm= 0;
	
    Seg_Vip(Seg_buf,Pos);
    if(++Pos==8)  Pos=0;
}
//------------------------------------------------------
void     Key_Pro(void)
{   if(Key_Mm==0) return ;Key_Mm=1;   //用于按键处理-----减速
	Key_k1 = Key_Read();    //这地方是按键处理模式(现在用是矩阵键盘------调用函数)
	key_low = Key_k1 & ( Key_hig  ^ Key_k1);
	Key_hig = Key_k1 ;      //电平检测
	
	
	
}
void	 Seg_Pro(void)
{  if(Seg_Mm==0) return ;Seg_Mm=1;   //用于数码管显示----减速
	sprintf(Seg_sss,"%06.4f",(unsigned int )rd_temperature()/16.0);  //要   /16.0  ,也就是16倍
 
Seg_ring(Seg_sss,Seg_buf);
}
 
子函数:
-  
/* 程序说明: 单总线驱动程序 软件环境: Keil uVision 4.10 硬件环境: CT107单片机综合实训平台(外部晶振12MHz) STC89C52RC单片机 日 期: 2011-8-9 */ #include "onewire.h" sbit DQ = P1^4; //单总线接口 //单总线延时函数 void Delay_OneWire(unsigned int t) //STC89C52RC { t*=12;//-----------------------------------------------这里要自己加 t*=12 ;----------------------------- while(t--); } //通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } //DS18B20设备初始化 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); DQ = 1; Delay_OneWire(10); initflag = DQ; Delay_OneWire(5); return initflag; } //-----------------------------------------------上面官方有给,下面是自己要写的代码----------------------------- unsigned int rd_temperature(void) { unsigned char low; unsigned char hig; init_ds18b20(); //初始化 Write_DS18B20(0xcc);// 跳过rom Write_DS18B20(0x44);//功能指令(转换温度) init_ds18b20(); //初始化 Write_DS18B20(0xcc);// 跳过rom Write_DS18B20(0xbe); //读暂存器 指令 low = Read_DS18B20(); hig = Read_DS18B20(); return (( hig<<8) | low); //高位和低位组合;得到16位;值 ( /16.0 ) } -  
头文件
#include "STC15F2K60S2.H" unsigned int rd_temperature(void);硬件图:
 

-  
芯片资料


 
 
 
简单来说就是三大步骤:
1:初始化
2:Rom指令
3.功能指令










