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

📄 ds18b20.lst

📁 ds18b20和1602结合
💻 LST
字号:
C51 COMPILER V6.12  DS18B20                                                                02/06/2007 20:26:34 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN .\ds18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\ds18b20.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <absacc.h>
   3          #include <intrins.h>
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          
   7          sbit DQ=P3^4;
   8          bit sflag;
   9          uchar readdata[2]={0,0};
  10          uchar code decimal[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  11          uchar code asccode[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  12          uchar textreal[2][16];
  13          void LCDdisplay(uchar textvar[2][16]);
  14          sbit rs=P3^7;   
  15          sbit rw=P3^6;
  16          sbit e=P3^5;
  17          sbit busy=P1^7;
  18          void enable(void);
  19          void delay(void);
  20          
  21          
  22          bit resetpulse(void)
  23          {
  24   1      	uchar i;
  25   1      	DQ=0; 
  26   1          for(i=255;i>0;i--){;}
  27   1          DQ=1; 
  28   1          for(i=60;i>0;i--){;}
  29   1          return(DQ); 
  30   1          for(i=200;i>0;i--){;} 
  31   1      }
  32          
  33          
  34          void writecommandtods18b20(uchar command) 
  35          { 
  36   1      	uchar i,j; 
  37   1        
  38   1        	for(i=0;i<8;i++) 
  39   1          { 
  40   2            	if((command & 0x01)==0) 
  41   2              { 
  42   3                	DQ=0; 
  43   3                	for(j=35;j>0;j--); 
  44   3                	DQ=1; 
  45   3              } 
  46   2              else 
  47   2           	{ 
  48   3                  DQ=0; 
  49   3                  for(j=2;j>0;j--); 
  50   3                  DQ=1; 
  51   3                  for(j=33;j>0;j--); 
  52   3            	} 
  53   2            	command=_cror_(command,1);  //循环右移库函数,在intrins.h中定义    
  54   2          } 
  55   1      } 
C51 COMPILER V6.12  DS18B20                                                                02/06/2007 20:26:34 PAGE 2   

  56          
  57          
  58          uchar readdatafromds18b20(void) 
  59          { 
  60   1        	uchar i,j,temp; 
  61   1        	  
  62   1        	temp=0; 
  63   1        	for(i=0;i<8;i++) 
  64   1          { 
  65   2            	temp=_cror_(temp,1); 
  66   2            	DQ=0; 
  67   2            	_nop_();                  // nop指令
  68   2            	_nop_(); 
  69   2            	DQ=1; 
  70   2            	for(j=10;j>0;j--); 
  71   2            	if(DQ==1) 
  72   2              { 
  73   3                	temp=temp | 0x80; 
  74   3              } 
  75   2              else 
  76   2              { 
  77   3                  temp=temp | 0x00; 
  78   3              } 
  79   2            	for(j=200;j>0;j--); 
  80   2          } 
  81   1        	return(temp); 
  82   1      } 
  83          
  84          
  85          void main(void)
  86          {
  87   1      	TMOD=0x01; 
  88   1        	TH0=(65536-60000)/256; 
  89   1        	TL0=(65536-60000)%256; 
  90   1        	ET0=1; 
  91   1        	EA=1; 
  92   1        
  93   1        	while(resetpulse()); 
  94   1        	writecommandtods18b20(0xcc); 
  95   1        	writecommandtods18b20(0x44); 
  96   1        	TR0=1;  
  97   1      	while(1){;}
  98   1      }
  99          
 100          
 101          void t0(void) interrupt 1 using 0 
 102          { 
 103   1      	uchar i,j,convert0,convert1,decimaldata,a,b,c; 
 104   1        	uint result; 
 105   1        
 106   1        	TH0=(65536-60000)/256; 
 107   1       	TL0=(65536-60000)%256; 
 108   1      
 109   1          while(resetpulse()); 
 110   1          writecommandtods18b20(0xcc); 
 111   1          writecommandtods18b20(0xbe); 
 112   1          readdata[0]=readdatafromds18b20(); 
 113   1          readdata[1]=readdatafromds18b20(); 
 114   1          if((readdata[1] & 0xf8)!=0x00) 
 115   1          { 
 116   2            	sflag=1; 
 117   2              readdata[1]=~readdata[1]; 
C51 COMPILER V6.12  DS18B20                                                                02/06/2007 20:26:34 PAGE 3   

 118   2              readdata[0]=~readdata[0]; 
 119   2              result=readdata[0]+1; 
 120   2              readdata[0]=result; 
 121   2           } 
 122   1          readdata[1]=readdata[1]<<4; 
 123   1          readdata[1]=readdata[1] & 0x70; 
 124   1      	readdata[0]=readdata[0]>>4; 
 125   1          readdata[0]=readdata[0]&0x0f; 
 126   1        	readdata[1]=readdata[1]|readdata[0]; 
 127   1          result=readdata[1]; 
 128   1      	convert1=readdata[1]>>4;
 129   1      	i=convert1;
 130   1      	convert0=readdata[0];
 131   1      	j=convert0;
 132   1      	decimaldata=decimal[i]*16+decimal[j];
 133   1      	a=decimaldata/100;
 134   1      	b=(decimaldata%100)/10;
 135   1      	c=(decimaldata%100)%10;
 136   1      
 137   1      	textreal[0][0]=asccode[a];
 138   1      	textreal[0][1]=asccode[b];
 139   1      	textreal[0][2]=asccode[c];
 140   1      	LCDdisplay(textreal);
 141   1         	while(resetpulse()); 
 142   1         	writecommandtods18b20(0xcc); 
 143   1      	writecommandtods18b20(0x44); 
 144   1      } 
 145          
 146          
 147          void LCDdisplay(uchar textvar[2][16])
 148          {
 149   1      	uchar i,j,adress=0x80;
 150   1          P1=0x01;  //清显示
 151   1      	enable();
 152   1      	P1=0x38;
 153   1      	enable();
 154   1      	P1=0x0f;
 155   1      	enable();
 156   1      	P1=0x06;
 157   1      	enable();
 158   1          for(i=0;i<2;i++)               
 159   1      	{
 160   2      		for(j=0;j<16;j++)
 161   2      		{
 162   3      			P1=adress;
 163   3      			enable();
 164   3      			if(textvar[i][j]==0x00)//判断如果数组中的内容为空则填补空格
 165   3      			{
 166   4      			textvar[i][j]=' ';
 167   4      			}
 168   3      			P1=textvar[i][j];
 169   3      			rs=1;
 170   3      			rw=0;
 171   3      			e=0;
 172   3      			delay();
 173   3      			e=1;
 174   3      			adress++;	
 175   3      		}
 176   2      		adress=0xc0;
 177   2      			
 178   2      	}
 179   1      	adress=0x80;	
C51 COMPILER V6.12  DS18B20                                                                02/06/2007 20:26:34 PAGE 4   

 180   1      }
 181          
 182          void enable(void)
 183          {
 184   1      	rs=0;
 185   1      	rw=0;
 186   1      	e=0;
 187   1      	delay();
 188   1      	e=1;
 189   1      }
 190          
 191          void delay(void)   //判断液晶是否为忙
 192          {
 193   1          do             //注意do while和while的区别
 194   1      	{
 195   2      		P1=0xff;   //读数前首先发高点电平,将CMOS截止
 196   2      		rs=0;
 197   2      		rw=1;
 198   2      		e=0;
 199   2      		e=1;
 200   2      	}while(busy==1);  
 201   1      }
 202          
 203          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    489    ----
   CONSTANT SIZE    =     27    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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