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

📄 lcd1602.lst

📁 1602字符液晶在89C52单片机上的应用实例和在proteus环境下的仿真实例!
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   LCD1602                                                               08/11/2007 18:24:45 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include "LCD1602.h"
   3          #include "uart.h"
   4          #include "i2c.h"
   5          #define uchar  unsigned char 
   6          #define uint  unsigned int 
   7          #define NOACK 0xaa
   8          uchar LMH=0;      //高低速
   9          uchar FILESTATE=0;//文件状态
  10          uchar filechoice=0;
  11          uchar filenum=0;
  12          uchar filenum1=0;       //文件序号
  13          uchar filename=0;       //文件名
  14          uchar filetotal=0;      //文件总数
  15          uint num ;
  16          uint time;
  17          
  18          void Delay1ms(unsigned int count)
  19          {
  20   1              unsigned int i,j;
  21   1              for(i=0;i<count;i++)
  22   1              for(j=0;j<120;j++);
  23   1      }
  24          unsigned char key_val(unsigned char key)
  25          {
  26   1              switch(key)
  27   1              {
  28   2                      case 0xff: return 0;break;
  29   2                      case 0xee: return 1;break;
  30   2                      case 0xed: return 2;break;
  31   2                      case 0xeb: return 3;break;
  32   2                      case 0xe7: return 4;break;
  33   2                      case 0xde: return 5;break;
  34   2                      case 0xdd: return 6;break;
  35   2                      case 0xdb: return 7;break;
  36   2                      case 0xd7: return 8;break;
  37   2                      case 0xbe: return 9;break;
  38   2                      case 0xbd: return 10;break;
  39   2                      case 0xbb: return 11;break;
  40   2                      case 0xb7: return 12;break;
  41   2                      case 0x7e: return 13;break;
  42   2                      case 0x7d: return 14;break;
  43   2                      case 0x7b: return 15;break;
  44   2                      case 0x77: return 16;break;
  45   2                      default: return 0;break;
  46   2              }
  47   1      } 
  48          unsigned char key_scan(void)
  49          {
  50   1          unsigned char row, col;
  51   1          P1  = 0xF0;
  52   1          row = P1&0xF0;
  53   1          row = row&0xF0;
  54   1          P1  = 0x0F;
  55   1          col = P1&0x0F;
C51 COMPILER V8.02   LCD1602                                                               08/11/2007 18:24:45 PAGE 2   

  56   1          col = col&0x0F;
  57   1          return(row|col);
  58   1      }
  59          
  60          uchar key()
  61          {
  62   1       uchar keyvalue,keyvalue1;
  63   1       keyvalue=key_scan();
  64   1       if(keyvalue)
  65   1       {
  66   2              Delay1ms(50);
  67   2              keyvalue1=key_scan();   //去抖动
  68   2              if(keyvalue==keyvalue1){
  69   3              return key_val(keyvalue);
  70   3              
  71   3              }
  72   2       }
  73   1       return 0;
  74   1      }
  75          
  76          void Uart_init(void)  
  77          {
  78   1       TMOD=0x20; 
  79   1      
  80   1      
  81   1        TH1=0xFD;//9600 11.0592MHz 
  82   1        TL1=0xFD; 
  83   1                   
  84   1        TH1=0xF3;      //2400 12MHz
  85   1       //TL1=0xF9;    //9600 , 12MHz 
  86   1        PCON=0x00;
  87   1        TR1=1;                
  88   1        SCON=0x50;                     
  89   1      }
  90           /*
  91          void Uart_init(void)  
  92          {
  93           TMOD=0x20;              
  94           TH1=0xE6;
  95           TL1=0xE6;    //1200 , 12MHz 
  96           PCON=0x00;
  97           TR1=1;                
  98           SCON=0x50;                     
  99          }
 100             */
 101          
 102          // 查询方式从串口接收数据
 103          uchar Uart_getchar(void)
 104          {  
 105   1         uint i=0;
 106   1         while(!RI){i++;if(i>0x2fff)return 0;}// 
 107   1         RI=0;
 108   1         return SBUF;
 109   1      }
 110          
 111          // 查询方式向串口发送数据
 112          void Uart_putchar(uchar ch)
 113          {
 114   1         SBUF=ch;
 115   1         while(!TI);
 116   1         TI=0;
 117   1      }
C51 COMPILER V8.02   LCD1602                                                               08/11/2007 18:24:45 PAGE 3   

 118          // 向串口发送一个字符串
 119          void Uart_putString(char *pt)
 120          {
 121   1          while(*pt)
 122   1              Uart_putchar(*pt++);
 123   1      }
 124          //向串口发送一个整型数
 125          void Uart_put_uint(uint num)
 126          {
 127   1              uchar a;
 128   1              a=(num>>8)&0xff;
 129   1          Uart_putchar(a);
 130   1              a=num&0xff;
 131   1              Uart_putchar(a);
 132   1      }
 133          //从串口接收一个整型数
 134          uint Uart_get_uint(void)
 135          {
 136   1              uint num;       
 137   1          num=Uart_getchar();
 138   1              num=num<<8;
 139   1              num+=Uart_getchar();
 140   1              return num;
 141   1      }
 142          //浮点数显示
 143          void floatDisplay(uint t,uchar i)
 144          {
 145   1              uchar a[6];
 146   1              a[0]=(t/10000)%10+'0';         //取得整数值到数组  
 147   1              a[1]=(t/1000)%10+'0';         //取得整数值到数组                
 148   1              a[2]=(t/100)%10+'0';                                            
 149   1              a[3]=(t/10)%10+'0';                                                                                     
 150   1              a[4]=(t/1)%10+'0';  
 151   1              a[5]='\0';
 152   1              switch(i)
 153   1              {
 154   2                      case 0:LCD_Print(2,0,a);break;
 155   2                      case 1:LCD_Print(11,0,a);break;
 156   2                      case 2:LCD_Print(2,1,a);break;
 157   2                      default:break;
 158   2              }
 159   1      }
 160          //显示单个数字函数************************************************************************
 161          void LCD_Printnum(unsigned char x, unsigned char y,unsigned char num)
 162          {
 163   1         uchar a[2];
 164   1         a[1]='\0'; 
 165   1         a[0]=num+'0';
 166   1                      LCD_Print(x,y,a);
 167   1      }
 168          //XYZ坐标界面显示
 169          void xyzDisplay(uchar i)
 170          {
 171   1              uint len,lastlen;
 172   1              uchar count;    
 173   1              uchar j=0;
 174   1              LCD_Print(0,0,"X:00000  Y:00000");
 175   1              if(LMH==0)LCD_Print(0,1,"Z:00000      LOW");
 176   1              else if(LMH==1)LCD_Print(0,1,"Z:00000      HI ");
 177   1              count=key(); 
 178   1              RI=0;
 179   1              lastlen=len=0;
C51 COMPILER V8.02   LCD1602                                                               08/11/2007 18:24:45 PAGE 4   

 180   1              while(count!=10&&count!=14)
 181   1              {
 182   2                      switch(count)
 183   2                              {
 184   3                              case 2:                                 //开胶
 185   3                                      if(i==0)
 186   3                                              {
 187   4                                              Uart_putchar('k');
 188   4                                              while(count==key());
 189   4                                              Uart_putchar('k'); //关胶
 190   4                                              }
 191   3                                              break;
 192   3                              case 3:         //X+ 
 193   3                                              RI=0;
 194   3                                              Uart_putchar('5');
 195   3                                              while(count==key())
 196   3                                              {
 197   4                                              RI=0;
 198   4                                              Uart_putchar('y');
 199   4                                              len=Uart_get_uint();
 200   4                                              floatDisplay(len,0);
 201   4                                              }
 202   3                                              for(j=0;j<5;j++)Uart_putchar('x');
 203   3                                              break;
 204   3                               case 12:               //X-
 205   3                                              RI=0;
 206   3                                              Uart_putchar('6');
 207   3                                              while(count==key())

⌨️ 快捷键说明

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