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

📄 ceshi2.lst

📁 单片机单片机单单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机片机单片机单片机单片机
💻 LST
字号:
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 1   


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

stmt level    source

   1          #include<reg52.h>
   2          #include<stdio.h>
   3          #include<intrins.h>
   4          
   5          #define uchar unsigned char 
   6          #define uint unsigned int 
   7          
   8          sbit dula=P2^6;
   9          sbit wela=P2^7;
  10          sbit dq=P2^2;
  11          sbit feng=P2^3;
  12          
  13          uint c1_temper,c2_temper;
  14          uint L_temper;
  15          uint H_temper;
  16          
  17          uchar code1[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  18          uchar code2[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  19          
  20          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
  21          0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};
  22          
  23          void delay_ms(uint z);
  24          void delay_us();
  25          void dq_reset();
  26          void write_cmd(uchar z);
  27          void get_firstid();
  28          void get_seconedid();
  29          void write_bit(uchar dd);
  30          void deal_temper();
  31          void deal_ds1();
  32          
  33          void display_temper(uint wengdu);
  34          void init();
  35          
  36          uchar keyscanf();
  37          uchar read_byte();
  38          uint get_temper();
  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      }
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 2   

  55          
  56          /*****************复位*************************/
  57          
  58          void 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;
  69   1      }
  70          
  71          /******************读位写位**********************/
  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          void write_cmd(uchar z)//写命令
 111          {
 112   1      	uchar i;
 113   1      	uchar temp;
 114   1      	uchar cmd=z;
 115   1      
 116   1      	for(i=0;i<8;i++)
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 3   

 117   1      	{
 118   2      		temp=cmd&0x01;
 119   2      		if(temp)
 120   2      		{
 121   3      			write_bit(1);
 122   3      		}
 123   2      		else
 124   2      		{
 125   3      			write_bit(0);	
 126   3      		}
 127   2      		cmd=_cror_(cmd,1);
 128   2      	}	
 129   1      	
 130   1      }
 131          
 132          /*****************温度******************************/
 133          
 134          uchar read_byte()//读字节
 135          { 
 136   1      	uchar i;
 137   1      	uchar temp; 
 138   1      	uchar dd;
 139   1      
 140   1      	temp=0x00; 
 141   1      	for(i=0;i<8;i++) 
 142   1      	{ 
 143   2      		temp=_cror_(temp,1); 
 144   2      		dd=read_bit();
 145   2      		if(dd==1) 
 146   2      		{ 
 147   3      			temp=temp|0x80; 
 148   3      		} 
 149   2      		else 
 150   2      		{ 
 151   3      			temp=temp|0x00; 
 152   3      		} 
 153   2      	} 
 154   1      	return(temp); 
 155   1      } 
 156          
 157          uint get_temper()//get centigrad for the ram
 158          {
 159   1      
 160   1      	uchar LSB_temper;
 161   1      	uchar MSB_temper;
 162   1      	uint c_temper=0;
 163   1      	float f_temper=0;
 164   1      	
 165   1      	dq_reset();
 166   1      	write_cmd(0xcc);
 167   1      	write_cmd(0xbe);//读存储器内的温度
 168   1      
 169   1      	LSB_temper=read_byte();
 170   1      	MSB_temper=read_byte();
 171   1      	
 172   1      	dq_reset();//复位
 173   1      	
 174   1      	c_temper=MSB_temper;
 175   1      	c_temper=(c_temper<<8);
 176   1      	c_temper=c_temper|LSB_temper;
 177   1      	f_temper=c_temper*0.0625;
 178   1      	c_temper=f_temper*10+0.5;
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 4   

 179   1      	
 180   1      	return (c_temper);
 181   1      }
 182          
 183          /******************获取序列号************************/
 184          
 185          void get_firstid()
 186          {
 187   1      	uchar t;
 188   1      	uchar w=0;
 189   1      	uchar d1,d2;
 190   1      	uchar temp=0x00;
 191   1      	
 192   1      	dq_reset();
 193   1      	write_cmd(0xf0);//搜索序列号命令
 194   1      
 195   1      	for(t=0;t<64;t++)
 196   1      	{
 197   2      		d1=read_bit();
 198   2      		d2=read_bit();
 199   2      		if((t>0)&&(t%8==0))
 200   2      		{	
 201   3      		 	code1[w]=temp;
 202   3      			temp=0x00;
 203   3      			++w;
 204   3      		}	
 205   2      		temp=_cror_(temp,1);
 206   2      		
 207   2      		if( (d1==1) && (d2==0) )
 208   2      		{
 209   3      			temp=temp|0x80;
 210   3      			write_bit(1);
 211   3      		}
 212   2      		else if( (d1==0) && (d2==1))
 213   2      		{
 214   3      			temp=temp|0x00;
 215   3      			write_bit(0);
 216   3      		}
 217   2      		else if( (d1==0) && (d2==0) )
 218   2      		{
 219   3      			temp=temp|0x00;
 220   3      			write_bit(0);
 221   3      		}
 222   2      	}
 223   1      }
 224          
 225          void get_seconedid()
 226          {
 227   1      	uchar t;
 228   1      	uchar w=0;
 229   1      	uchar d1,d2;
 230   1      	uchar temp=0x00;
 231   1      	
 232   1      	dq_reset();
 233   1      	write_cmd(0xf0);//搜索序列号命令
 234   1      	
 235   1      	for(t=0;t<64;t++)
 236   1      	{
 237   2      		d1=read_bit();
 238   2      		d2=read_bit();
 239   2      		if((t>0)&&(t%8==0))
 240   2      		{	
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 5   

 241   3      		 	code2[w]=temp;
 242   3      			temp=0x00;
 243   3      			++w;
 244   3      		}	
 245   2      		temp=_cror_(temp,1);
 246   2      		
 247   2      		if( (d1==1) && (d2==0) )
 248   2      		{
 249   3      			temp=temp|0x80;
 250   3      			write_bit(1);
 251   3      		}
 252   2      		else if( (d1==0) && (d2==1))
 253   2      		{
 254   3      			temp=temp|0x00;
 255   3      			write_bit(0);
 256   3      		}
 257   2      		else if( (d1==0) && (d2==0) )
 258   2      		{
 259   3      			temp=temp|0x80;
 260   3      			write_bit(1);
 261   3      		}
 262   2      	}
 263   1      }
 264          
 265          /*******************温度处理**************************/
 266          void deal_temper()
 267          {
 268   1      	uchar key=0;
 269   1      	while(1)
 270   1      	{
 271   2      		key=keyscanf();
 272   2      		if(key!=0)
 273   2      		{
 274   3      			 deal_ds1();
 275   3      		}
 276   2      	}
 277   1      }
 278          
 279          void deal_ds1()
 280          {
 281   1      	uchar t;
 282   1      	
 283   1      	while(1)
 284   1      	{
 285   2      		dq_reset();
 286   2      		write_cmd(0xcc);
 287   2      		write_cmd(0x44);//温度转换
 288   2      		c1_temper=get_temper();
 289   2      		for(t=20;t>0;t--)
 290   2      		{
 291   3      			display_temper(c1_temper);
 292   3      		}
 293   2      	}
 294   1      }
 295          
 296          /*********************按键选择************************/
 297          
 298          uchar keyscanf()
 299          {	
 300   1      	uchar temp;
 301   1      	uchar ke=0;
 302   1      
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 6   

 303   1      	P3=0xf7;
 304   1      	temp=P3;
 305   1      	temp=temp&0xf0;
 306   1      	while(temp!=0xf0)
 307   1      	{
 308   2      		switch(temp)
 309   2      		{
 310   3      			case 0xe0: ke=1;break;
 311   3      			case 0xd0: ke=2;break;
 312   3      			case 0xb0: ke=3;break;	
 313   3      			case 0x70: ke=4;break;
 314   3      		}
 315   2      		temp=P3;
 316   2      		temp=temp&0xf0;
 317   2      		delay_ms(5);
 318   2      	}
 319   1      	return ke;
 320   1      }
 321          
 322          /******************温度显示***********************/
 323          
 324          void display_temper(uint wengdu)//显示当前温度值
 325          {
 326   1      	uchar xx,yy,zz;
 327   1      	uint temp;
 328   1      	
 329   1      	temp=wengdu;
 330   1      	xx=temp/100;
 331   1      	yy=temp%100/10;
 332   1      	zz=temp%10;
 333   1      	
 334   1      	wela=1;
 335   1      	P0=0xfe;
 336   1      	wela=0;
 337   1      
 338   1      	P0=0x00;
 339   1      	dula=1;
 340   1      	P0=table[xx];
 341   1      	dula=0;
 342   1      	delay_ms(2);
 343   1      	
 344   1      	P0=0xff;
 345   1      	wela=1;
 346   1      	P0=0xfd;
 347   1      	wela=0;
 348   1      
 349   1      	P0=0x00;
 350   1      	dula=1;
 351   1      	P0=(table[yy]+0x80);
 352   1      	dula=0;
 353   1      	delay_ms(2);
 354   1      	
 355   1      	P0=0xff;
 356   1      	wela=1;
 357   1      	P0=0xfb;
 358   1      	wela=0;
 359   1      
 360   1      	P0=0x00;
 361   1      	dula=1;
 362   1      	P0=table[zz];
 363   1      	dula=0;
 364   1      	delay_ms(1);
C51 COMPILER V6.12  CESHI2                                                                 04/29/2009 12:39:00 PAGE 7   

 365   1      }
 366          
 367          /****************初始化与主函数******************/
 368          
 369          void init()//初始化
 370          {
 371   1      	L_temper=100;
 372   1      	H_temper=320;
 373   1      	
 374   1      	dula=0;
 375   1      	wela=0;
 376   1      }
 377          
 378          void main()
 379          {
 380   1      	init();
 381   1      	while(1)
 382   1      	{
 383   2      		get_firstid();
 384   2      		get_seconedid();
 385   2      		delay_us();
 386   2      		deal_temper();
 387   2      	}
 388   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    789    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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