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

📄 ir- motor-lcd1602.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   IR__MOTOR_LCD1602                                                     12/22/2006 09:46:41 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE IR__MOTOR_LCD1602
OBJECT MODULE PLACED IN IR- MOTOR-LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IR- MOTOR-LCD1602.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*****************************************************************/
   2          /*                                                                *
   3          /* ME500单片机开发系统演示程序 - 红外遥控步进电机                 *
   4          /*                                                                *
   5          /* LCD1602显示                                                    *
   6          /*                                                                *
   7          /* 版本: V1.0 (2006/11/20)                                       *
   8          /* 作者: gguoqing (Email: gguoqing@willar.com)                   *
   9          /* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)*
  10          /* 时间: 2006/06/03                                              *
  11          /*                                                                *
  12          /*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *
  13          /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      *
  14          /*                                                                *
  15          /*****************************************************************/
  16              
  17          #include <reg51.h>       //51芯片管脚定义头文件
  18          #include <intrins.h>     //内部包含延时函数 _nop_();
  19          
  20          #define uchar unsigned char
  21          #define uint  unsigned int
  22          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  23          
  24          
  25          uchar code FFW[8]= {0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
  26          uchar code REV[8]= {0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
  27          
  28          uchar IRCOM[6]=(0x00,0x00,0x00,0x00,0x00,0x00);
  29          
  30          sbit  BEEP = P3^7;       //蜂鸣器
  31          sbit IRIN=P3^2;          //红外接收端口
  32          
  33          sbit  LCD_RS = P2^0;             
  34          sbit  LCD_RW = P2^1;
  35          sbit  LCD_EN = P2^2;
  36          
  37          bit  on_off=0;            //运行与停止标志
  38          bit  direction=1;         //方向标志
  39          bit  rate_dr=1;           //速率标志
  40          bit  snum_dr=1;           //圈数标志
  41          bit  flag;                //红外接收有效标志
  42          bit  pause1=0;            //暂停标志
  43          
  44          //uchar code  cdis1[ ] = {" STEPPING MOTOR "};
  45          //uchar code  cdis2[ ] = {"CONTROL  PROCESS"};
  46          
  47          uchar code  cdis1[ ] = {"   IR CONTROL   "};
  48          uchar code  cdis2[ ] = {" STEPPING MOTOR "};
  49          
  50          uchar code  cdis3[ ] = {"IR:--H  STOP    "};
  51          uchar code  cdis4[ ] = {"NUM:    RATE:   "};
  52          uchar code  cdis5[ ] = {" RUN "};
  53          uchar code  cdis6[ ] = {" STOP"};
  54          uchar code  cdis7[ ] = {"PAUSE"};
  55          
C51 COMPILER V8.02   IR__MOTOR_LCD1602                                                     12/22/2006 09:46:41 PAGE 2   

  56          uchar   m,v=0,q=0;
  57          
  58          uchar   number=0,number1=0; 
  59          uchar   snum=10,snum1=10;       //预设定圈数
  60          uchar   rate=8;               //预设定速率
  61          uchar   data_temp,data_temp1,data_temp2;   
  62          uchar  TEMP;
  63          
  64          void IR_IN();
  65          /********************************************************/
  66          /*                                                  
  67          /* 延时t毫秒 
  68          /* 11.0592MHz时钟,延时约1ms                                     
  69          /*                                                      
  70          /********************************************************/
  71          void delay(uint t)
  72          {                           
  73   1         uchar k;
  74   1         while(t--)
  75   1         {
  76   2           for(k=0; k<125; k++)
  77   2           { }
  78   2         }
  79   1      }
  80          
  81          /********************************************************/
  82          void delayB(uchar x)    //x*0.14MS
  83          {
  84   1         uchar i;
  85   1         while(x--)
  86   1         {
  87   2           for (i=0; i<13; i++)
  88   2           { }
  89   2         }
  90   1      }
  91          
  92          /********************************************************/
  93          void beep()
  94           {
  95   1         uchar j;
  96   1         for (j=0;j<100;j++)
  97   1          { 
  98   2           delayB(5);
  99   2           BEEP=!BEEP;                 //BEEP取反
 100   2          } 
 101   1           BEEP=1;                    //关闭蜂鸣器
 102   1       }
 103          
 104          /********************************************************/
 105          /*                                                                
 106          /*检查LCD忙状态                                                   
 107          /*lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。     
 108          /*                                                               
 109          /********************************************************/ 
 110          bit lcd_busy()
 111           {                          
 112   1          bit result;
 113   1          LCD_RS = 0;
 114   1          LCD_RW = 1;
 115   1          LCD_EN = 1;
 116   1          delayNOP();
 117   1          result = (bit)(P0&0x80);
C51 COMPILER V8.02   IR__MOTOR_LCD1602                                                     12/22/2006 09:46:41 PAGE 3   

 118   1          LCD_EN = 0;
 119   1          return(result); 
 120   1       }
 121          
 122          /********************************************************/
 123          /*                                                                 
 124          /*写指令数据到LCD                                                 
 125          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             
 126          /*                                                               
 127          /********************************************************/
 128          void lcd_wcmd(uchar cmd)
 129          {                          
 130   1         while(lcd_busy());
 131   1          LCD_RS = 0;
 132   1          LCD_RW = 0;
 133   1          LCD_EN = 0;
 134   1          _nop_();
 135   1          _nop_(); 
 136   1          P0 = cmd;
 137   1          delayNOP();
 138   1          LCD_EN = 1;
 139   1          delayNOP();
 140   1          LCD_EN = 0;  
 141   1      }
 142          
 143          /********************************************************/
 144          /*                                                                
 145          /*写显示数据到LCD                                                  
 146          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                              
 147          /*                                                               
 148          /********************************************************/
 149          void lcd_wdat(uchar dat)
 150          {                          
 151   1         while(lcd_busy());
 152   1          LCD_RS = 1;
 153   1          LCD_RW = 0;
 154   1          LCD_EN = 0;
 155   1          P0 = dat;
 156   1          delayNOP();
 157   1          LCD_EN = 1;
 158   1          delayNOP();
 159   1          LCD_EN = 0; 
 160   1      }
 161          
 162          /********************************************************/
 163          /*                                                                
 164          /*  LCD初始化设定                                                
 165          /*                                                                
 166          /********************************************************/
 167          void lcd_init()
 168          { 
 169   1          delay(30);                   
 170   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 171   1          delay(5);
 172   1          lcd_wcmd(0x38);         
 173   1          delay(5);
 174   1          lcd_wcmd(0x38);         
 175   1          delay(5);
 176   1      
 177   1          lcd_wcmd(0x0c);      //显示开,关光标
 178   1          delay(5);
 179   1          lcd_wcmd(0x06);      //移动光标
C51 COMPILER V8.02   IR__MOTOR_LCD1602                                                     12/22/2006 09:46:41 PAGE 4   

 180   1          delay(5);
 181   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 182   1          delay(5);
 183   1      }
 184          
 185          /********************************************************/
 186          /*                                                                 
 187          /*  设定显示位置                                                  
 188          /*                                                                
 189          /********************************************************/
 190          void lcd_pos(uchar pos)
 191          {                          
 192   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 193   1      }
 194          
 195          /********************************************************/
 196          /*                                                       
 197          /* LCD1602初始显示子程序                                             
 198          /*                                                      
 199          /********************************************************/
 200          void  LCD_init_DIS()
 201          {            
 202   1           delay(10);                 //延时
 203   1           lcd_init();                //初始化LCD             
 204   1              
 205   1           lcd_pos(0);                //设置显示位置为第一行的第1个字符
 206   1           for(m=0;m<16;m++)
 207   1           lcd_wdat(cdis1[m]);
 208   1      
 209   1           lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 210   1           for(m=0;m<16;m++)
 211   1           lcd_wdat(cdis2[m]);
 212   1      
 213   1           delay(3000);               //延时        
 214   1              
 215   1           lcd_pos(0);                //设置显示位置为第一行的第1个字符
 216   1               for(m=0;m<16;m++)
 217   1           lcd_wdat(cdis3[m]);
 218   1      
 219   1           lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 220   1           for(m=0;m<16;m++)
 221   1           lcd_wdat(cdis4[m]);
 222   1      
 223   1           for(m=0;m<2;m++)
 224   1           { 
 225   2            lcd_pos(0x0d+m);         //显示方向符号
 226   2            lcd_wdat(0x3e);
 227   2           }
 228   1      
 229   1      }
 230          /********************************************************/
 231          /*
 232          /*数据转换子程序
 233          /*
 234          /********************************************************/
 235          void  data_conv() 
 236           {
 237   1           data_temp1=data_temp/10;       //高位
 238   1               if(data_temp1==0)
 239   1               {data_temp1=0x20;}             //高位为0不显示
 240   1           else 
 241   1               {data_temp1=data_temp1+0x30;}
C51 COMPILER V8.02   IR__MOTOR_LCD1602                                                     12/22/2006 09:46:41 PAGE 5   

 242   1      
 243   1               data_temp2=data_temp%10;       //低位
 244   1           data_temp2=data_temp2+0x30;
 245   1       }
 246          
 247          void  code_conv()
 248          {
 249   1         IRCOM[5]=IRCOM[2];
 250   1         IRCOM[6]=IRCOM[5]&0x0f;       //低位
 251   1      
 252   1         if(IRCOM[6]>0x09)
 253   1         IRCOM[6]=IRCOM[6]+0x37;
 254   1         else
 255   1         IRCOM[6]=IRCOM[6]+0x30;
 256   1      
 257   1         IRCOM[5]=(IRCOM[5]&0xf0)>>4;  //高位
 258   1         if(IRCOM[5]>0x09)
 259   1         IRCOM[5]=IRCOM[5]+0x37;
 260   1         else
 261   1         IRCOM[5]=IRCOM[5]+0x30;
 262   1      } 
 263          
 264          /********************************************************/
 265          /*
 266          /*数据显示子程序
 267          /*
 268          /********************************************************/
 269          void  data_dis()
 270          {
 271   1             code_conv();
 272   1             lcd_pos(0x03);
 273   1                 lcd_wdat(IRCOM[5]);
 274   1      //         lcd_pos(0x08);
 275   1                 lcd_wdat(IRCOM[6]);
 276   1       
 277   1             data_temp = snum;        //显示圈数
 278   1                 data_conv();
 279   1             lcd_pos(0x44); 
 280   1             lcd_wdat(data_temp1);

⌨️ 快捷键说明

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