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

📄 lcd1602_4.lst

📁 步进电机控制的C程序
💻 LST
字号:
C51 COMPILER V8.08   LCD1602_4                                                             12/21/2008 10:38:59 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LCD1602_4
OBJECT MODULE PLACED IN lcd1602_4.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd1602_4.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //使用举例(仅供参考)  
   2          #include <reg52.h>     
   3          //#include <intrins.h>
   4          
   5          //本程序中,LCD使用用D4~D7总线
   6          #define BUSMASK 0xf0
   7          
   8          sbit dc=P1^3; /*P1.3 LCD 的RS 21*/
   9          sbit rw=P1^4; /*P1.4 LCD 的R/W 22*/
  10          sbit cs=P1^5; /*P1.5 LCD 的E 25*/
  11          
  12          sfr lcdbus=0xB0; /*p3 LCD 数据D0=P3.0*/
  13          
  14          unsigned int sys10mscounter;
  15          unsigned char syslimitcounter;
  16          //code char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
  17          //code char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
  18          //code char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
  19          //code char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/
  20          void soft_nop(){}
  21          
  22          unsigned char data lcdcounter;
  23          bit lcdusing1,lcdusing2;
  24          bit lcd_checkbusy()/*检查LCD 忙*/
  25          {       register lcdstate;
  26   1          char t;
  27   1              dc=0; /*dc=1为数据,=0为命令.*/
  28   1              rw=1; /*rw=1为读,=0为写.*/
  29   1              cs=1; /*cs=1选通.*/
  30   1              soft_nop();
  31   1              lcdbus |= 0x80;
  32   1              lcdstate=lcdbus;
  33   1              cs=0;
  34   1              dc=0; /*dc=1为数据,=0为命令.*/
  35   1              rw=1; /*rw=1为读,=0为写.*/
  36   1              cs=1; /*cs=1选通.*/
  37   1              soft_nop();
  38   1              t=lcdbus;
  39   1              cs=0;
  40   1              return((bit)(lcdstate&0x80));
  41   1      }
  42          void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
  43          {       
  44   1      
  45   1          lcdusing1=1;
  46   1              while(lcd_checkbusy());
  47   1              lcdbus &=~BUSMASK;
  48   1              lcdbus |= (lcdcmd &0xf0);
  49   1              dc=0; /*dc=1为数据,=0为命令.*/
  50   1              rw=0; /*rw=1为读,=0为写.*/
  51   1              cs=1; /*cs=1选通.*/
  52   1              soft_nop();
  53   1              cs=0;
  54   1          lcdbus &=~BUSMASK;
  55   1              lcdbus |=(lcdcmd<<4)&0xf0;
C51 COMPILER V8.08   LCD1602_4                                                             12/21/2008 10:38:59 PAGE 2   

  56   1              dc=0; /*dc=1为数据,=0为命令.*/
  57   1              rw=0; /*rw=1为读,=0为写.*/
  58   1              cs=1; /*cs=1选通.*/
  59   1              soft_nop();
  60   1              cs=0;
  61   1              lcdbus |=BUSMASK;
  62   1              lcdusing1=0;
  63   1      }
  64          
  65          void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
  66          {       //char i;
  67   1              lcdusing2=1;
  68   1              while(lcd_checkbusy());
  69   1              lcdbus &=~BUSMASK;
  70   1              lcdbus |= 0xf0 & lcddata;
  71   1              dc=1; /*dc=1为数据,=0为命令.*/
  72   1              rw=0; /*rw=1为读,=0为写.*/
  73   1              cs=1; /*cs=1选通.*/
  74   1              soft_nop();
  75   1              cs=0;
  76   1              lcdbus &=~BUSMASK;
  77   1              lcdbus |= 0xf0 & (lcddata<<4);
  78   1              dc=1; /*dc=1为数据,=0为命令.*/
  79   1              rw=0; /*rw=1为读,=0为写.*/
  80   1              cs=1; /*cs=1选通.*/
  81   1              soft_nop();
  82   1              cs=0;
  83   1              lcdbus |=BUSMASK;       
  84   1              lcdusing2=0;    
  85   1      }
  86          /*
  87          void lcd_char(unsigned int addr,char *strpoint) //在当前显示位置显示LCD 字符串//
  88          {       int i=0;
  89              if(addr<16) lcd_wrcmd(0x80+addr);     //第1行起始地址,0b11000000B=0x80.
  90              else lcd_wrcmd(0xc0+addr-16);
  91                  while(strpoint[i]!=0){
  92                          lcd_wrdata(strpoint[i]);
  93                          i++;
  94                          if((i+addr)==16) lcd_wrcmd(0xc0);     //第二行起始地址,0b11000000B=0xc0.       
  95                  }
  96          }
  97          */
  98          
  99          void ePut_str(char x,char y,char *strpoint) /*在当前显示位置显示LCD 字符串*/
 100          {       register i=0;
 101   1          char k;
 102   1          lcd_wrcmd(0x03);    
 103   1              if(y>=1) lcd_wrcmd(0xc0+x);
 104   1              else     lcd_wrcmd(0x80+x);
 105   1              k = x;
 106   1              while(strpoint[i]!=0)
 107   1              {               
 108   2                      lcd_wrdata(strpoint[i]);                
 109   2                      i++;
 110   2                      if((k+i)==16) lcd_wrcmd(0xC0);
 111   2              }
 112   1      }
 113           
 114          void lcd_string(char *strpoint) //在当前显示位置显示LCD 字符串//
 115          {       register i=0;
 116   1          lcd_wrcmd(0x03);
 117   1          lcd_wrcmd(0x80);
C51 COMPILER V8.08   LCD1602_4                                                             12/21/2008 10:38:59 PAGE 3   

 118   1              while(strpoint[i]!=0){          
 119   2                      lcd_wrdata(strpoint[i]);                
 120   2                      i++;
 121   2                      if(i==16) lcd_wrcmd(0xC0);
 122   2              }
 123   1      }
 124          
 125          
 126          void LcdReset(void)/*初始化*/
 127          {       
 128   1          lcd_wrcmd(0x28); /*设置4 位格式,2 行,5*7*/
 129   1              lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
 130   1              lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
 131   1              lcd_wrcmd(0x01); /*清除显示*/
 132   1              lcdcounter=0;
 133   1      
 134   1      }
 135          
 136          void lcd_cls()/*清除显示*/
 137          {   lcd_wrcmd(0x01);
 138   1              lcdcounter=0;
 139   1      }
 140          
 141          void showx(char x,char y,unsigned int n)
 142          {
 143   1         char i=0,num[6],t[6],j=0;
 144   1         while(n/10)
 145   1         {
 146   2            num[i++]=0x30+n%10;n/=10;   
 147   2         }
 148   1         num[i++]=0x30+n;
 149   1         while(i--) t[j++]=num[i];
 150   1         if(j<5)t[j++]=' '; t[j]='\0'; 
 151   1         ePut_str(x,y,t); 
 152   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    461    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      28
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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