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

📄 water.lst

📁 详细介绍了怎么利用单片机实现自身温度控制的程序!通过了实验验证!效果不错!
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE WATER
OBJECT MODULE PLACED IN water.OBJ
COMPILER INVOKED BY: C:\Keil\UV2\C51\BIN\C51.EXE water.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "water.h"
   2          
   3          uchar xdata lcdPosX, lcdPosY;                                           //X,Y坐标
   4          uchar xdata halfScr, halfLineCnt, basicBlock;           //半屏,半屏行数,N*8块
   5          
   6          uchar xdata Option = 0; //液晶屏选项
   7          uchar xdata Page = 0;   //液晶屏页码
   8          
   9          uchar  ErrorNum = 0;         //0-无错误
  10          uchar xdata Errorflag[9];
  11          
  12          /**********************************delay**************************************************/
  13          void delay(uint i)
  14          {
  15   1              while (i--) ;           
  16   1      }
  17          void Ldelay()
  18          {
  19   1              int i;
  20   1              for(i=0;i<10;i++)
  21   1              {
  22   2                      delay(50000);
  23   2                      delay(50000);
  24   2                      delay(50000);
  25   2                      delay(50000);
  26   2                      delay(50000);
  27   2              }
  28   1      }
  29          /********************************** HD7279A *********************************************/
  30          /* Long delay for 7279 read or write */
  31          void long_delay(void)
  32          {
  33   1              uchar  i;
  34   1              for( i = 0; i < 0xff; i++)
  35   1              {
  36   2                       nop();
  37   2                       nop();
  38   2              }
  39   1      }
  40          
  41          /* Short delay for 7279 read or write */
  42          void short_delay(void)
  43          {
  44   1              uchar i;
  45   1              for( i = 0; i <0x60; i++);
  46   1      }
  47          
  48          /*Write 7279 function */
  49          void send_byte( uchar out_byte)
  50          {
  51   1               uchar i;
  52   1               CS = 0;
  53   1               long_delay();
  54   1               for(i = 0; i < 8; i++)
  55   1               {      
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 2   

  56   2                      if(out_byte & 0x80)
  57   2                      {
  58   3                              DAT = 1;
  59   3                      }
  60   2                      else
  61   2                      {
  62   3                              DAT = 0;
  63   3                      }
  64   2                      CLK = 1;
  65   2                      short_delay();
  66   2                      CLK = 0;
  67   2                      short_delay();
  68   2                      out_byte = out_byte*2;
  69   2              }
  70   1              DAT = 0; 
  71   1      }//end of send_byte function
  72          
  73          uchar receive_byte(void)
  74          {
  75   1              uchar i, in_byte;
  76   1              DAT = 1;
  77   1              long_delay();
  78   1              for( i = 0; i < 8; i++)
  79   1              {
  80   2                      CLK = 1;
  81   2                      short_delay();
  82   2                      in_byte = in_byte*2;
  83   2                      if(DAT)
  84   2                      {
  85   3                              in_byte  = in_byte | 0x01;
  86   3                      }
  87   2                      CLK  = 0;
  88   2                  short_delay();
  89   2              }
  90   1              DAT = 0;
  91   1              return (in_byte);
  92   1      }
  93          
  94          /* interface of write 7279 function*/
  95          void write7279(uchar cmd, uchar dta)
  96          {
  97   1              send_byte(cmd);    //first send command byte
  98   1              send_byte(dta);    //second send user data
  99   1      }
 100          
 101          /* interface of read 7279 function*/
 102          uchar read7279(uchar cmd)
 103          {
 104   1              send_byte(cmd);   //first send command to read data
 105   1              return (receive_byte());     //read data
 106   1      }
 107          
 108          
 109          /********************************************* 液晶 ********************************************/
 110          
 111          //ms延时  
 112          void lcd_DelayMs (uint ms)                      
 113          {
 114   1              uchar i;
 115   1              while (ms)
 116   1              {
 117   2                      for (i = 0; i < 254; i++);
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 3   

 118   2                      ms--;
 119   2              }
 120   1      }
 121          
 122          
 123          
 124          //串行数据输入一字节
 125          void LCD_SendByte(uchar s_data)
 126          {
 127   1              uchar i;
 128   1              SID=0;
 129   1              SCLK=0;
 130   1              for(i=0;i<8;i++)
 131   1              {
 132   2                      SID=(bit)(s_data & 0x80);
 133   2                      delay(1);                            
 134   2                      SCLK=1;
 135   2                      delay(1);                            
 136   2                      s_data<<=1;
 137   2                      delay(1);                            
 138   2                      SCLK=0;
 139   2                      delay(1);                            
 140   2              }
 141   1      }
 142          //命令输入
 143          void LCD_SendComm(uchar comm_data)
 144          {
 145   1              delay(1);                            
 146   1              LCD_SendByte(0xF8 & 0xFF);                //send 1 1 1 1 1 RW=0 RS=0 0
 147   1              delay(1);                            
 148   1              LCD_SendByte(comm_data & 0xF0);           //send D7 D6 D5 D4 0 0 0 0
 149   1              delay(1);                            
 150   1              LCD_SendByte((comm_data & 0x0F)<<4);      //send D3 D2 D1 D0 0 0 0 0
 151   1              delay(150);
 152   1      }
 153          
 154          
 155          //数据输入
 156          void LCD_SendData(uchar send_data)
 157          {
 158   1              LCD_SendByte(0xFA & 0xFF);                // 1 1 1 1 1 RW=0 RS=1 0
 159   1              delay(1);                            
 160   1              LCD_SendByte(send_data & 0xF0);           //send D7 D6 D5 D4 0 0 0 0
 161   1              delay(1);                            
 162   1              LCD_SendByte((send_data & 0x0F)<<4);      //send D3 D2 D1 D0 0 0 0 0
 163   1              delay(150);
 164   1      }
 165          
 166          
 167          //设定光标位置
 168          void Set_Cursor(uchar X, Y)                     
 169          {
 170   1              if (X == 0)
 171   1              {
 172   2                      X = 0x80;
 173   2              }
 174   1              else if (X == 1)
 175   1              {
 176   2                      X = 0x90;
 177   2              }
 178   1              else if (X == 2)
 179   1              {
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 4   

 180   2                      X = 0x88;
 181   2              }
 182   1              else if (X == 3)
 183   1              {
 184   2                      X = 0x98;
 185   2              }
 186   1              Y = X + Y;
 187   1              LCD_SendComm(Y);
 188   1      
 189   1      }
 190          
 191          
 192          //清除屏幕
 193          void lcd_Clear(void)                                            
 194          {
 195   1              
 196   1              LCD_SendComm(SClear);
 197   1              lcd_DelayMs(30);
 198   1              LCD_SendComm(SOrigin);
 199   1              delay(150);
 200   1      }
 201          
 202          //显示字符串
 203          void lcd_DispString(uchar X, Y, uchar *msg )
 204          {
 205   1      
 206   1              Set_Cursor(X, Y);
 207   1              while (*msg != '\0')
 208   1              {
 209   2                      LCD_SendData(*msg++);
 210   2              }
 211   1      }
 212          
 213          //坐标写入
 214          void wrPosition(void)
 215          {
 216   1              LCD_SendComm(SFunSetE);
 217   1              LCD_SendComm(lcdPosY);
 218   1              LCD_SendComm(lcdPosX);
 219   1              LCD_SendComm(SFunSetB); 
 220   1      }       
 221          
 222          //函数功能:全屏显示图形
 223          //bmpCls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)
 224          void lcd_DispPhoto (uchar *bmp, uchar bmpCls)
 225          {
 226   1              lcdPosX = 0x80;
 227   1              halfScr = 2;
 228   1              
 229   1              for (;halfScr != 0; halfScr--)
 230   1              {
 231   2                      lcdPosY = 0x80;
 232   2                      halfLineCnt = 32;
 233   2                      
 234   2                      for (;halfLineCnt != 0; halfLineCnt--)
 235   2                      {
 236   3                              basicBlock = 16;
 237   3                              wrPosition ();
 238   3                              
 239   3                              for (; basicBlock != 0; basicBlock--)
 240   3                              {
 241   4                                      if (bmpCls == OFF)
C51 COMPILER V7.06   WATER                                                                 10/28/2007 09:52:35 PAGE 5   

 242   4                                      {
 243   5                                              LCD_SendData (*bmp++);
 244   5                                      }
 245   4                                      else if (bmpCls == ON)
 246   4                                      {
 247   5                                              LCD_SendData (0x00);
 248   5                                      }
 249   4                              }
 250   3                              lcdPosY++;
 251   3                      }
 252   2                      lcdPosX = 0x88;
 253   2              }
 254   1              LCD_SendComm(SFunDrawOn);
 255   1              LCD_SendComm(SFunSetB);
 256   1      }
 257          
 258          //---------------------------------------------------------
 259          //函数原形:void lcd_ConvertChar (uchar CX, CY, width)
 260          //函数功能:字符反白显示
 261          //输入参数:
 262          //返回值  :
 263          //---------------------------------------------------------
 264                  
 265          void lcd_ConvertChar (uchar CX, CY, width)      
 266          {
 267   1              lcd_DispPhoto(OFF,ON);
 268   1              lcdPosY = 0x80;
 269   1      
 270   1              if (CX == 0)
 271   1              {
 272   2                      CX = 0x80;
 273   2                      halfLineCnt = 16;
 274   2              }
 275   1              else if (CX == 1)
 276   1              {
 277   2                      CX = 0x80;
 278   2                      halfLineCnt = 32;
 279   2              }
 280   1              else if (CX == 2)
 281   1              {
 282   2                      CX = 0x88;
 283   2                      halfLineCnt = 16;
 284   2              }
 285   1              else if (CX == 3)
 286   1              {

⌨️ 快捷键说明

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