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

📄 ledls.lst

📁 单片机应用
💻 LST
字号:
C51 COMPILER V6.12  LEDLS                                                                  08/30/2007 18:15:26 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #define uchar unsigned char   //8位
   4          
   5          typedef unsigned char BYTE;
   6          typedef unsigned int WORD;
   7          typedef bit BOOL ; 
   8          
   9          sbit rs	= P2^0;		//寄存器选择
  10          sbit rw = P2^1;     //读写控制
  11          sbit ep = P2^2;     //使能端,由高电平跳变到低电平时,液晶执行命令
  12          sbit right = P2^6;
  13          BYTE dis1[];    //unsigned char code 放一些固定的数据,一般查表用,这样可以少占用ram
  14          BYTE code dis2[] = {"0x0179"};
  15          
  16          BYTE k,n;
  17          
  18          sbit TMDAT = P3^3; //根据实实际情况设定,对应1820的DQ引脚
  19          uchar TMP;  //读取后温度值存于TMP中,将其除以2即可得出实际温度;
  20          uchar f;  //结果是否为负温,“0”为正温,“1”为负温。  
  21          
  22          ////////////////////////////////////////延时部分//////////////////////////
  23          void dmsec (unsigned int count)       //
  24          {         //
  25   1       unsigned int i;              // 
  26   1       while (count)       //
  27   1       {        //
  28   2        i = 115;      //
  29   2        while (i>0) i--;     //
  30   2        count--;      //
  31   2          }         //
  32   1      }         //
  33          //////////////////////////////////////////////////////////////////////////
  34          
  35           
  36          
  37          /////////////////////////////////////// 发送复位//////////////////////////
  38          void tmreset (void)       //    初始化1820
  39          {                          //
  40   1       unsigned int i;       //
  41   1       TMDAT = 0;       //
  42   1       i = 103;       //
  43   1       while (i>0) i--;          // 将信号线置为低电平,延时 900 uS(11.0592Mhz时) //
  44   1       TMDAT = 1;       //
  45   1       i = 4;        //       将信号线置为高电平,延时 35 uS
  46   1       while (i>0) i--;      //
  47   1      }         //
  48          //////////////////////////////////////////////////////////////////////////
  49          
  50           
  51          
  52          //判断DS1820是否存在的子程序。最好不要用,因为当器件不存在时将会进入死循环
  53          
  54          ////////////////////////////////////// 等待存在脉冲///////////////////////
  55          void tmpre (void)   //判断器件是否存在  //
C51 COMPILER V6.12  LEDLS                                                                  08/30/2007 18:15:26 PAGE 2   

  56          {                            //
  57   1       unsigned int i;       //
  58   1       while (TMDAT);       //
  59   1       while (~TMDAT);       //
  60   1       i = 4; while (i>0) i--;      //
  61   1      }         //
  62          //////////////////////////////////////////////////////////////////////////
  63          
  64          
  65          ///////////////////////////////////// 读一位//////////////////////////////
  66          bit tmrbit (void)       //
  67          {                          //  
  68   1       unsigned int i;       //
  69   1       bit dat;       //
  70   1       TMDAT = 0; i++;       //
  71   1       TMDAT = 1; i++; i++;  //微量延时   //
  72   1       dat = TMDAT;       //
  73   1       i = 8; while (i>0) i--;  // 延时    //
  74   1       return (dat);       //
  75   1      }         //
  76          //////////////////////////////////////////////////////////////////////////
  77          
  78          
  79          //////////////////////////////////////// 读一个字节///////////////////////
  80          unsigned char tmrbyte (void)        //
  81          {                 //
  82   1       unsigned char i,j,dat;      //
  83   1       dat = 0;       //
  84   1       for (i=1;i<=8;i++)      //
  85   1       {        //
  86   2        j = tmrbit ();      //
  87   2        dat = (j << 7) | (dat >> 1);    //
  88   2       }        //
  89   1       return (dat);       //
  90   1      }         //
  91          //////////////////////////////////////////////////////////////////////////
  92          
  93          
  94          /////////////////////////////////////// 写一个字节////////////////////////
  95          void tmwbyte (unsigned char dat)     //
  96          {                       //
  97   1       unsigned int i;       //
  98   1       unsigned char j;      //
  99   1       bit testb;       //
 100   1       for (j=1;j<=8;j++)      //
 101   1       {        //
 102   2        testb = dat & 0x01;     //  检测最低位是1还是0
 103   2        dat = dat >> 1;      //   并转串,共8位
 104   2        if (testb)      //    如果是1
 105   2        {       //
 106   3         TMDAT = 0;                           // 写0  //
 107   3         i++; i++;                              //
 108   3         TMDAT = 1;     //
 109   3         i = 8; while (i>0) i--;                //
 110   3        }       //
 111   2        else       //
 112   2        {       //
 113   3         TMDAT = 0;                           // 写0  //
 114   3         i = 8; while (i>0) i--;                //
 115   3         TMDAT = 1;     //
 116   3         i++; i++;                              //
 117   3        }       //
C51 COMPILER V6.12  LEDLS                                                                  08/30/2007 18:15:26 PAGE 3   

 118   2       }        //
 119   1      }         //
 120          //////////////////////////////////////////////////////////////////////////
 121          
 122          /////////////////////////////////发送ds1820 开始转换//////////////////////
 123          void tmstart (void)       //
 124          {                          //
 125   1       tmreset ();  //复位     //
 126   1       //tmpre ();  //等待存在脉冲    //
 127   1       dmsec (1);  //延时     //
 128   1       tmwbyte (0xcc);  //跳过序列号命令   //
 129   1       tmwbyte (0x44);  //发转换命令 44H,   //
 130   1      }         //
 131          //////////////////////////////////////////////////////////////////////////
 132          
 133          
 134          /////////////////////////////////// 读取温度//////////////////////////////
 135          void tmrtemp (void)       //
 136          {                          //
 137   1       unsigned char a,b;      //
 138   1       tmreset ();  //复位     //
 139   1       //tmpre ();  //等待存在脉冲    //
 140   1       dmsec (1);  //延时     //
 141   1       tmwbyte (0xcc);  //跳过序列号命令   //
 142   1       tmwbyte (0xbe);  //发送读取命令     //
 143   1       a = tmrbyte ();  //读取低位温度    //
 144   1       b = tmrbyte ();   //读取高位温度    //
 145   1       f=b;   //若b为1则为负温   //
 146   1       if(f)        //
 147   1       {        //
 148   2        TMP=~a+1; //如果为负温则去除其补码  //
 149   2       }        //
 150   1       else        //
 151   1       {        //
 152   2        TMP=a;       //
 153   2       }        //
 154   1      }         //
 155          //////////////////////////////////////////////////////////////////////////
 156          
 157          /////////////////////////////////////////////////////////////////////////
 158          /////////////////////////////////////////////////////////////////////////
 159          ////////////////////////////////////////////////////////////////////////
 160          
 161          
 162          
 163          delay(BYTE ms)
 164          {							// 延时子程序
 165   1      	BYTE k;
 166   1      	while(ms--)
 167   1      	{
 168   2      		for(k = 0; k< 250; k++)
 169   2      		{
 170   3      			_nop_();   //NOP不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期
 171   3      			_nop_();
 172   3      			_nop_();
 173   3      			_nop_();
 174   3      		}
 175   2      	}
 176   1      }
 177          
 178          BOOL lcd_bz()
 179          {							// 测试LCD忙碌状态
C51 COMPILER V6.12  LEDLS                                                                  08/30/2007 18:15:26 PAGE 4   

 180   1      	BOOL result;
 181   1      	rs = 0;
 182   1      	rw = 1;
 183   1      	ep = 1;                 //读数据口状态字
 184   1      	_nop_();
 185   1      	_nop_();
 186   1      	_nop_();
 187   1      	_nop_();
 188   1      	result = (BOOL)(P0 & 0x80);   //D7为0才能进行读写操作
 189   1      	ep = 0;
 190   1      	return result;	
 191   1      }
 192          
 193          lcd_wcmd(BYTE cmd)
 194          {							// 写入指令数据到LCD
 195   1      	while(lcd_bz());
 196   1      	rs = 0;
 197   1      	rw = 0;
 198   1      	ep = 0;
 199   1      	_nop_();
 200   1      	_nop_();	
 201   1      	P0 = cmd;
 202   1      	_nop_();
 203   1      	_nop_();
 204   1      	_nop_();
 205   1      	_nop_();
 206   1      	ep = 1;            //////
 207   1      	_nop_();
 208   1      	_nop_();
 209   1      	_nop_();          //高变低,液晶模块执行命令
 210   1      	_nop_();
 211   1      	ep = 0;		      //////
 212   1      }
 213          
 214          lcd_pos(BYTE pos)
 215          {							//设定显示位置
 216   1      	lcd_wcmd(pos | 0x80);
 217   1      }
 218          
 219          lcd_wdat(BYTE dat)	
 220          {							//写入字符显示数据到LCD
 221   1      	while(lcd_bz());
 222   1      	rs = 1;
 223   1      	rw = 0;
 224   1      	ep = 0;
 225   1      	P0 = dat;
 226   1      	_nop_();
 227   1      	_nop_();
 228   1      	_nop_();
 229   1      	_nop_();
 230   1      	ep = 1;
 231   1      	_nop_();
 232   1      	_nop_();
 233   1      	_nop_();
 234   1      	_nop_();
 235   1      	ep = 0;	
 236   1      }
 237          
 238          lcd_init()
 239          {							//LCD初始化设定
 240   1      	lcd_wcmd(0x38);			//显示模式设定 00111000(0x38),设置16*2显示,5*7点阵,8位数据接口
 241   1      	delay(1);
C51 COMPILER V6.12  LEDLS                                                                  08/30/2007 18:15:26 PAGE 5   

 242   1      	lcd_wcmd(0x0c);			//显示开关及光标位置 0000 1100(0x0c),开显示,不显示光标
 243   1      	delay(1);
 244   1      	lcd_wcmd(0x06);			// 0000 0110(0x06),当读写一个字符后,地址指针加1,且光标加1
 245   1      	delay(1);
 246   1      	lcd_wcmd(0x01);			//清除LCD的显示内容
 247   1      	delay(1);
 248   1      }
 249          
 250          
 251          
 252          
 253          //////////////////////////////////////////////////////////////////////////
 254          main()         //
 255          {         //
 256   1       do{        //
 257   2        tmstart();      //
 258   2        dmsec(1000); //如果是不断地读取的话可以不延时 //
 259   2        tmrtemp(); //读取温度,执行完毕温度将存于TMP中 //
 260   2        //P0=TMP;
 261   2       //right=0;
 262   2      	lcd_init();				// 初始化LCD			
 263   2      	delay(10);
 264   2      //    dis1=TMP;
 265   2          for (n=1;n<=8;n++)      //
 266   2          {        //
 267   3           dis1[n] = TMP & 0x01;     //  
 268   3           TMP = TMP >> 1;    
 269   3          } 
 270   2      	lcd_pos(4);				// 设置显示位置为第一行的第5个字符
 271   2      	k = 0;
 272   2      //	while(dis1[k] != '\0')  // 显示第一句话 "hificat.com"
 273   2          for (k=1;k<=8;k++)
 274   2      	{						// 显示字符
 275   3      		lcd_wdat(dis1[k]);
 276   3      		k++;
 277   3      
 278   3          }
 279   2      
 280   2      lcd_pos(0x41);			// 设置显示位置为第二行第二个字符
 281   2      	k = 0;
 282   2      	while(dis2[k] != '\0')  // 显示第二句话 "0571-85956028"
 283   2      	{
 284   3      		lcd_wdat(dis2[k]);	// 显示字符
 285   3      		k++;
 286   3      	}
 287   2         
 288   2      	
 289   2       }while(1);       //
 290   1      }         //
 291          //////////////////////////////////////////////////////////////////////////
 292          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    517    ----
   CONSTANT SIZE    =      7    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.

C51 COMPILER V6.12  LEDLS                                                                  08/30/2007 18:15:26 PAGE 6   


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

⌨️ 快捷键说明

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