⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 good2.lst

📁 单片机单片机单单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机片机单片机单片机单片机
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  GOOD2                                                                  05/02/2009 15:44:23 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE GOOD2
OBJECT MODULE PLACED IN good2.obj
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE .\sucess\good2.c DEBUG OBJECTEXTEND PRINT(.\good2.lst) OBJECT(good2.obj) 

stmt level    source

   1          /*该驱动程序是基于------ATMEL89C52-----单片机实现*/
   2          #include<reg52.h>
   3          #include<stdio.h>
   4          #include<intrins.h>
   5          
   6          #define uchar unsigned char 
   7          #define uint unsigned int 
   8          
   9          sbit dula=P2^6; //段选端口
  10          sbit wela=P2^7; //位选端口
  11          sbit dq=P2^2;  //DS18B20数据端口
  12          sbit feng=P2^3;  //蜂鸣器
  13          
  14          uint c1_temper,c2_temper;  //记录两个温度传感器的温度
  15          uint L_temper;  //温度下限值
  16          uint H_temper;  //温度上限值
  17          
  18          unsigned char aa[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //记录传感器A的序列号
  19          unsigned char bb[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //记录传感器B的序列号
  20          
  21          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
  22          
  23          void delay_ms(uint z);
  24          void delay_us();
  25          void write_cmd(uchar z);
  26          void get_firstid();
  27          void get_seconedid();
  28          void write_bit(uchar dd);
  29          void deal_temper();
  30          void deal_ds1();
  31          void deal_ds2();
  32          void display_temper(uint wengdu,uchar fc);
  33          void init();
  34          void warn_temper(uchar z);
  35          uchar dq_reset();
  36          uchar keyscanf();
  37          uchar read_byte();
  38          uint get_temper(uchar z);
  39          uchar read_bit();
  40          uchar read_date();
  41          
  42          /******************延迟****************/
  43          
  44          void delay_ms(uint z)//毫秒级的延迟
  45          {	
  46   1      	uint x,y;
  47   1      	for(x=z;x>0;x--)
  48   1      		for(y=110;y>0;y--);	
  49   1      }
  50          
  51          void delay_us()//延时微秒
  52          {
  53   1      	_nop_();
  54   1      }
  55          
C51 COMPILER V6.12  GOOD2                                                                  05/02/2009 15:44:23 PAGE 2   

  56          /*****************复位*************************/
  57          
  58          uchar dq_reset()
  59          {
  60   1      	uchar t;
  61   1      	uchar dd;
  62   1      	dq=0;
  63   1      	for(t=250;t>0;t--);
  64   1      	dq=1;
  65   1      	for(t=5;t>0;t--);
  66   1      	dd=dq;
  67   1      	for(t=150;t>0;t--);
  68   1      	return dd;
  69   1      }
  70          
  71          /******************(bit)位操作**********************/
  72          
  73          uchar read_bit()//读一个位
  74          {
  75   1      	uchar t;
  76   1      	uchar dd;
  77   1      
  78   1      	dq=0;
  79   1      	delay_us();delay_us();
  80   1      	dq=1;
  81   1      	for(t=3;t>0;t--);
  82   1      	dd=dq;//get the signal
  83   1      	for(t=20;t>0;t--);
  84   1      	return dd;
  85   1      }
  86          
  87          void write_bit(uchar dd)//写一个位
  88          {
  89   1      	uchar t;
  90   1      
  91   1      	if(dd==1)
  92   1      	{
  93   2      		dq=0;
  94   2      		delay_us();
  95   2      		dq=1;
  96   2      		for(t=30;t>0;t--);	
  97   2      	}	
  98   1      	else
  99   1      	{
 100   2      		dq=0;
 101   2      		for(t=30;t>0;t--);
 102   2      		dq=1;
 103   2      		delay_us();
 104   2      		delay_us();
 105   2      	}
 106   1      }
 107          
 108          /********************字节操作**************************/
 109          
 110          uchar read_byte()//读字节
 111          { 
 112   1      	uchar i;
 113   1      	uchar temp; 
 114   1      	uchar dd;
 115   1      
 116   1      	temp=0x00; 
 117   1      	for(i=0;i<8;i++) 
C51 COMPILER V6.12  GOOD2                                                                  05/02/2009 15:44:23 PAGE 3   

 118   1      	{ 
 119   2      		temp=_cror_(temp,1); 
 120   2      		dd=read_bit();
 121   2      		if(dd==1) 
 122   2      		{ 
 123   3      			temp=temp|0x80; 
 124   3      		} 
 125   2      		else 
 126   2      		{ 
 127   3      			temp=temp|0x00; 
 128   3      		} 
 129   2      	} 
 130   1      	return(temp); 
 131   1      } 
 132          
 133          /******************命令与数据***********************/
 134          
 135          void write_cmd(uchar z)//发送命令或数据
 136          {
 137   1      	uchar i,t;
 138   1      	uchar temp;
 139   1      	uchar cd=z;
 140   1      
 141   1      	for(i=0;i<8;i++)
 142   1      	{
 143   2      		temp=cd&0x01;
 144   2      		if(temp)
 145   2      		{
 146   3      			dq=0;
 147   3      			delay_us();delay_us();//
 148   3      			dq=1;
 149   3      			for(t=40;t>0;t--);	
 150   3      		}
 151   2      		else
 152   2      		{
 153   3      			dq=0;
 154   3      			for(t=40;t>0;t--);
 155   3      			dq=1;
 156   3      			delay_us();	delay_us();		
 157   3      		}
 158   2      		cd=_cror_(cd,1);
 159   2      	}	
 160   1      	
 161   1      }
 162          
 163          /*****************温度******************************/
 164          
 165          uint get_temper(uchar z)//从暂存器中获取温度值
 166          {
 167   1      
 168   1      	uchar LSB_temper=0x00;
 169   1      	uchar MSB_temper=0x00;
 170   1      	uchar i;
 171   1      	uint c_temp=0;
 172   1      	float f_temp=0;
 173   1      	
 174   1      	dq_reset();
 175   1      	
 176   1      	write_cmd(0x55);
 177   1      	if(z==1)//发送传感A的序列号
 178   1      	{
 179   2      		for(i=1;i<=8;i++)
C51 COMPILER V6.12  GOOD2                                                                  05/02/2009 15:44:23 PAGE 4   

 180   2      		{
 181   3      			write_cmd(aa[i]);
 182   3      		}
 183   2      	}
 184   1      	else //发送传感器B的序列号
 185   1      	{
 186   2      		for(i=1;i<=8;i++)
 187   2      		{
 188   3      			write_cmd(bb[i]);
 189   3      		}
 190   2      	}
 191   1      	delay_ms(1);
 192   1      	write_cmd(0xbe);//读存储器内的温度
 193   1      
 194   1      	LSB_temper=read_byte();//读低温度字节
 195   1      	MSB_temper=read_byte();//读高温度字节
 196   1      	dq_reset();	
 197   1      	c_temp=MSB_temper;
 198   1      	c_temp=(c_temp<<8);
 199   1      	c_temp=c_temp|LSB_temper;
 200   1      	f_temp=c_temp*0.0625;
 201   1      	c_temp=f_temp*10+0.5;
 202   1      	
 203   1      	return (c_temp);
 204   1      }
 205          
 206          /******************获取序列号************************/
 207          /*这里采用简单的“消除”算法*/
 208          
 209          void get_firstid()//获取传感器A的序列号
 210          {
 211   1      	uchar t;
 212   1      	uchar w=1;
 213   1      	uchar d1,d2;
 214   1      	uchar temp=0x00;
 215   1      	
 216   1      	dq_reset();
 217   1      	write_cmd(0xf0);//搜索序列号命令
 218   1      
 219   1      	for(t=1;t<=64;t++)
 220   1      	{
 221   2      		d1=read_bit();
 222   2      		d2=read_bit();
 223   2      		temp=_cror_(temp,1);
 224   2      		
 225   2      		if( (d1==1) && (d2==0) )
 226   2      		{
 227   3      			temp=temp|0x80;
 228   3      			write_bit(1);
 229   3      		}
 230   2      		else if( (d1==0) && (d2==1))
 231   2      		{
 232   3      			temp=temp|0x00;
 233   3      			write_bit(0);
 234   3      		}
 235   2      		else if( (d1==0) && (d2==0) )
 236   2      		{
 237   3      			temp=temp|0x00;
 238   3      			write_bit(0);
 239   3      		}
 240   2      		if(t%8==0)
 241   2      		{
C51 COMPILER V6.12  GOOD2                                                                  05/02/2009 15:44:23 PAGE 5   

 242   3      			aa[w]=temp;
 243   3      			w=w+1;
 244   3      			temp=0x00;
 245   3      		}	
 246   2      	}
 247   1      	
 248   1      }
 249          
 250          void get_seconedid() //获取传感器B的序列号
 251          {
 252   1      	uchar t;
 253   1      	uchar w=1;
 254   1      	uchar d1,d2;
 255   1      	uchar temp=0x00;
 256   1      	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -