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

📄 lcd12864.lst

📁 基于51单片机的图形LCD驱动程序,建立了完成的中英文字符和基本图形输出程序,字符点阵从一片Flash存储器读出.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 1   


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

stmt level    source

   1          //lcd12864.c
   2          #include"general.h"
   3          #include"lcd12864.h"
   4          #include"lcd_code.h"
   5          #include"sys12M.h"
   6          #include"cm27c04.h"
   7          #include<math.h>
   8          sbit EN = P1^0;
   9          //********************************
  10          extern BYTE code char_code[95][16];
  11          extern BYTE code motor_icon[6][32];
  12          extern BYTE bdata tempchar[8];
  13          //********************************
  14          void lcd_init(void)
  15          {
  16   1           lcd_cmd1_send(0x3F);
  17   1      	 lcd_cmd1_send(0xC0);
  18   1      
  19   1           lcd_cmd2_send(0x3F);
  20   1      	 lcd_cmd2_send(0xC0);
  21   1      }
  22          //********************************
  23          void start_row(BYTE nrow)
  24          {
  25   1      	lcd_cmd1_send(nrow|0xC0);
  26   1      	lcd_cmd2_send(nrow|0xC0);
  27   1      }
  28          //********************************
  29          void lcd_cmd1_send(BYTE cmd)
  30          {
  31   1           BYTE state;
  32   1      	 do
  33   1           {
  34   2      		ADDR_LCD = E1_state_r;
  35   2      		EN = 1;
  36   2      		state = DATA_LCD;
  37   2      		EN = 0;
  38   2      		state = state & 0x80;
  39   2           }while(state);
  40   1      	 ADDR_LCD = E1_cmd_w;
  41   1      	 EN = 1;
  42   1      	 DATA_LCD = cmd;
  43   1      	 _nop_();
  44   1      	 EN = 0;
  45   1      	 
  46   1      }
  47          //***********************************
  48          void lcd_cmd2_send(BYTE cmd)
  49          {
  50   1           BYTE state;
  51   1      	 do
  52   1           {
  53   2      	 	ADDR_LCD = E2_state_r;
  54   2      		EN = 1;
  55   2      		state = DATA_LCD;
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 2   

  56   2      		EN = 0;
  57   2      		state = state & 0x80;
  58   2           }while(state);
  59   1      	 ADDR_LCD = E2_cmd_w;
  60   1      	 EN = 1;
  61   1      	 DATA_LCD = cmd;
  62   1      	 _nop_();
  63   1      	 EN = 0;
  64   1      }
  65          //*************************************
  66          void lcd_data1_send(BYTE dat)
  67          {
  68   1      	 BYTE state;
  69   1      	 do
  70   1           {
  71   2      	 	ADDR_LCD = E1_state_r;
  72   2      		EN = 1;
  73   2      		state = DATA_LCD;
  74   2      		EN = 0;
  75   2      		state = state & 0x80;
  76   2           }while(state);
  77   1      	 ADDR_LCD = E1_data_w;
  78   1      	 EN = 1;
  79   1      	 DATA_LCD = dat;
  80   1      	 _nop_();
  81   1      	 EN = 0;
  82   1      }
  83          //***********************************
  84          void lcd_data2_send(BYTE dat)
  85          {
  86   1      	 BYTE state;
  87   1      	 do
  88   1           {
  89   2      	 	ADDR_LCD = E2_state_r;
  90   2      		EN = 1;
  91   2      		state = DATA_LCD;
  92   2      		EN = 0;
  93   2      		state = state & 0x80;
  94   2           }while(state);
  95   1      	 ADDR_LCD = E2_data_w;
  96   1      	 EN = 1;
  97   1      	 DATA_LCD = dat;
  98   1      	 _nop_();
  99   1      	 EN = 0;
 100   1      }
 101          //************************************
 102          //*************************LCD清屏
 103          void lcd_clear()
 104          {
 105   1           BYTE page;
 106   1           BYTE i,j;
 107   1           for(i=0;i<8;i++)
 108   1           {
 109   2              page =  i | 0xB8;
 110   2              lcd_cmd1_send(page);
 111   2              lcd_cmd1_send(0x40);
 112   2              lcd_cmd2_send(page);
 113   2              lcd_cmd2_send(0x40);
 114   2              for(j=0;j<64;j++)
 115   2              {
 116   3                 lcd_data1_send(0x00);
 117   3                 lcd_data2_send(0x00);
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 3   

 118   3              }
 119   2           }
 120   1      }
 121          //***********************LCD写字符子程序
 122          BYTE lcd_char_send(BYTE *dat,BYTE page/*0,2,4or8*/,BYTE line_num,bit bclr)
 123          {
 124   1          BYTE temp,cur_line;
 125   1          BYTE i;
 126   1          temp = page | 0xB8;
 127   1          for(i=0,cur_line=line_num;i<8;i++,cur_line++)
 128   1          {
 129   2             if(cur_line<64)
 130   2             {
 131   3                lcd_cmd1_send(temp);
 132   3                lcd_cmd1_send(cur_line|0x40);
 133   3                if(bclr) lcd_data1_send(dat[i]);
 134   3      		  else     lcd_data1_send(~dat[i]);
 135   3             }
 136   2             else
 137   2             {
 138   3                lcd_cmd2_send(temp);
 139   3                lcd_cmd2_send((cur_line-64)|0x40);
 140   3                if(bclr) lcd_data2_send(dat[i]);
 141   3      		  else     lcd_data2_send(~dat[i]);
 142   3             }
 143   2          }
 144   1          temp = (page+1) | 0xB8;
 145   1      
 146   1          for(i=8,cur_line=line_num;i<16;i++,cur_line++)
 147   1          {
 148   2             if(cur_line<64)
 149   2             {
 150   3                lcd_cmd1_send(temp);
 151   3                lcd_cmd1_send(cur_line|0x40);
 152   3                if(bclr) lcd_data1_send(dat[i]);
 153   3      		  else     lcd_data1_send(~dat[i]);
 154   3             }
 155   2             else
 156   2             {
 157   3                lcd_cmd2_send(temp);
 158   3                lcd_cmd2_send((cur_line-64)|0x40);
 159   3                if(bclr) lcd_data2_send(dat[i]);
 160   3      		  else     lcd_data2_send(~dat[i]);
 161   3             }
 162   2          }
 163   1          line_num += 8;
 164   1          return line_num;
 165   1      }
 166          //*************************打印字符
 167          BYTE print_char(BYTE the_char,BYTE page,BYTE line_num,bit bclr)
 168          {
 169   1            line_num = lcd_char_send(char_code[the_char-32],page,line_num,bclr);
 170   1            return line_num;
 171   1      }
 172          //*************************打印字符串
 173          BYTE print_string(BYTE *string,BYTE page,BYTE line_num,bit bclr)
 174          {
 175   1           BYTE i;
 176   1           BYTE char_test;
 177   1      	 i = 0;
 178   1           while(1)
 179   1           {
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 4   

 180   2              char_test = string[i];
 181   2              if(char_test == '$') break;
 182   2      		if(char_test >0xA0)
 183   2      		{
 184   3      			line_num = print_chs(string+i,page,line_num,bclr);
 185   3      			i++;
 186   3      			i++;
 187   3      		}
 188   2      		else
 189   2      		{
 190   3               	line_num = print_char(char_test,page,line_num,bclr);
 191   3               	i++;
 192   3      		}
 193   2           }
 194   1           return line_num;
 195   1      }
 196          //*************************打印图标或汉字
 197          BYTE print_icon(BYTE *icon,BYTE page,BYTE line_num,BYTE iheight,BYTE iwidth,bit bclr)
 198          {
 199   1          BYTE temp,cur_line;
 200   1          BYTE i,j;
 201   1      	for(j=0;j<iheight;j++)
 202   1      	{
 203   2      	    temp = (page+j) | 0xB8;
 204   2      	    for(i=0,cur_line=line_num;i<iwidth;i++,cur_line++)
 205   2      	    {
 206   3      	       if(cur_line<64)
 207   3      	       {
 208   4      	          lcd_cmd1_send(temp);
 209   4      	          lcd_cmd1_send(cur_line|0x40);
 210   4      	          if(bclr) lcd_data1_send(icon[i+j*iwidth]);
 211   4      			  else	   lcd_data1_send(~icon[i+j*iwidth]);	
 212   4      	       }
 213   3      	       else
 214   3      	       {
 215   4      	          lcd_cmd2_send(temp);
 216   4      	          lcd_cmd2_send((cur_line-64)|0x40);
 217   4      	          if(bclr) lcd_data2_send(icon[i+j*iwidth]);
 218   4      			  else	   lcd_data2_send(~icon[i+j*iwidth]);
 219   4      	       }
 220   3      	    }
 221   2      	 }
 222   1          line_num += iwidth;
 223   1          return line_num;
 224   1      }
 225          //******************************打印整型数字
 226          BYTE print_num(WORD srcnum,BYTE page,BYTE line_num,bit bclr)
 227          {
 228   1          BYTE i;
 229   1          WORD j,digit;
 230   1          if(srcnum==0) print_string("   $",page,line_num,bclr);
 231   1          else if(srcnum<10)
 232   1          {
 233   2            digit = srcnum;
 234   2            line_num = lcd_char_send(char_code[digit+16],page,line_num,bclr);

⌨️ 快捷键说明

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