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

📄 temp.lst

📁 液晶程序液晶程序液晶程序液晶程序液晶程序液晶程序
💻 LST
字号:
C51 COMPILER V7.01  TEMP                                                                   09/23/2008 14:27:38 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE TEMP
OBJECT MODULE PLACED IN TEMP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TEMP.C OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <hz.h>
   3          
   4          //宏**************************************************************************************************8
   5          #define zkpos(num,stadd)  (stadd+(num&0x00ff)*32)//通过字符编号算出字符在字符库中的地址num的低两位为地址编
             -号
   6          
   7          typedef unsigned char uchar;
   8          
   9          //全局变量声明
  10          extern unsigned char xdata KEY_BUF;
  11          
  12          //变量定义**************************************************************************
  13          unsigned char xdata XPOS; //XPOS        为0~7
  14          unsigned char xdata YPOS; //YPOS 为0~127
  15          unsigned char data COM; //command
  16          unsigned char data DAT; //data
  17          unsigned char code * data HZKSTADD = hzk;//汉字库起始地址
  18          //地址定义*********************************
  19          /*unsigned char xdata *WCADD_1=0x4000;
  20          unsigned char xdata *RCADD_1=0x4200;
  21          unsigned char xdata *WDADD_1=0x4100;
  22          unsigned char xdata *RDADD_1=0x4300;
  23          
  24          unsigned char xdata *WCADD_2=0x6000;
  25          unsigned char xdata *RCADD_2=0x6200;
  26          unsigned char xdata *WDADD_2=0x6100;
  27          unsigned char xdata *RDADD_2=0x6300;
  28          */
  29          unsigned char xdata *WCADD_1=0xC000;
  30          unsigned char xdata *RCADD_1=0xC002;
  31          unsigned char xdata *WDADD_1=0xC001;
  32          unsigned char xdata *RDADD_1=0xC003;
  33          
  34          unsigned char xdata *WCADD_2=0xE000;
  35          unsigned char xdata *RCADD_2=0xE002;
  36          unsigned char xdata *WDADD_2=0xE001;
  37          unsigned char xdata *RDADD_2=0xE003;
  38          
  39          //变量声明************************************************
  40          bit FB_FLAG;//反白标志位,反白FB_FLAG=1,正常FB_FLAG=0
  41          
  42          //读写基本子程序
  43          void cmdwrite_1(uchar com)//左侧写命令
  44          {
  45   1              while((*RCADD_1&0x80)!=0);//不为0 ,忙,等待
  46   1              *WCADD_1=com;
  47   1      }
  48          
  49          void datwrite_1(uchar dat)//左侧写数据
  50          {
  51   1              while((*RCADD_1&0x80)!=0);//不为0 ,忙,等待
  52   1              *WDADD_1=dat;
  53   1      }
  54          
C51 COMPILER V7.01  TEMP                                                                   09/23/2008 14:27:38 PAGE 2   

  55          /*
  56          void datread_1() //左侧读数据(no use)
  57          {
  58                  while(*RCADD_1&0x80!=0);
  59                  DAT=*RDADD_1;
  60          }
  61          */
  62          
  63          void cmdwrite_2(uchar com)//右侧写命令
  64          {
  65   1              while((*RCADD_2&0x80)!=0);//不为0 ,忙,等待
  66   1              *WCADD_2=com;
  67   1      }
  68          
  69          void datwrite_2(uchar dat)//右侧写数据
  70          {
  71   1              while((*RCADD_2&0x80)!=0);//不为0 ,忙,等待
  72   1              *WDADD_2=dat;
  73   1      }
  74          
  75          /*
  76          void datread_2()//右侧读数据(no use)
  77          {
  78                  while(*RCADD_2&0x80!=0);
  79                  DAT=*RDADD_2;
  80          }
  81          */
  82          //---------------------------------------------------------------
  83          
  84          //初始化
  85          void lcm_init()
  86          {
  87   1              COM=0x3f;//开显示
  88   1              cmdwrite_1(COM);
  89   1              cmdwrite_2(COM);
  90   1      
  91   1              COM=0xc0;//显示启始行
  92   1              cmdwrite_1(COM);
  93   1              cmdwrite_2(COM);
  94   1      }
  95          //---------------------------------------------------------------
  96          
  97          //清屏
  98          void clearscreen()
  99          {
 100   1              uchar x,y;
 101   1              for(x=0;x<8;x++)
 102   1              {
 103   2                      COM=x|0xB8;
 104   2                      cmdwrite_1(COM);
 105   2                      cmdwrite_2(COM);
 106   2                      COM=0X40;
 107   2                      cmdwrite_1(COM);
 108   2                      cmdwrite_2(COM);
 109   2                      for(y=0;y<64;y++)
 110   2                      {
 111   3                              DAT=0x0;
 112   3                              datwrite_1(DAT);
 113   3                              datwrite_2(DAT);
 114   3                      }
 115   2              }
 116   1      }
C51 COMPILER V7.01  TEMP                                                                   09/23/2008 14:27:38 PAGE 3   

 117          //---------------------------------------------------------------
 118          
 119          //设定液晶显示起始坐标,输入:液晶显示字符的地址 XPOS为0~7,YPOS为0~127,不影响XPOS,YPOS
 120          void setxy()
 121          {
 122   1              if(YPOS<=63)
 123   1              {     //设左侧lcm
 124   2                      cmdwrite_1(XPOS|0xB8);//设左侧页命令
 125   2                      cmdwrite_1(YPOS|0x40);}//设左侧列命令
 126   1              else 
 127   1              {    //设右侧LCM        
 128   2                      cmdwrite_2(XPOS|0xB8);//设左侧页命令
 129   2                      cmdwrite_2(YPOS|0x40);
 130   2              }//设左侧列命令
 131   1      }
 132          //--------------------------------------------------------
 133          
 134          //写一个字节,不影响YPOS
 135          void write_byte()
 136          {
 137   1              if(YPOS<=63)
 138   1                      datwrite_1(DAT);//字节写入左侧
 139   1              else
 140   1                      datwrite_2(DAT);//字节写入右侧
 141   1      }
 142          //-----------------------------------------------------------
 143          
 144          //写一个汉字16*16,输入:液晶显示字符的起始坐标XPOS,YPOS,字符的首地址*hzkpos,执行后XPOS,YPOS 不变
 145          void write_ch(uchar *hzkpos)
 146          {
 147   1              uchar xtimes,ytimes,ytemp;
 148   1              for(xtimes=0;xtimes<2;xtimes++)
 149   1              {
 150   2                      XPOS=XPOS+xtimes;   //换下一页,一个汉字占两页 
 151   2                      ytemp=YPOS;
 152   2                      for(ytimes=0;ytimes<16;ytimes++)//一页中列变量自动加1写16列,但YPOS不变
 153   2                      {
 154   3                              if(FB_FLAG==0)
 155   3                                      DAT=*hzkpos;
 156   3                              else
 157   3                                      DAT=(255-*hzkpos); 
 158   3                              YPOS++;
 159   3                              setxy();
 160   3                              write_byte();//将一个字节写入
 161   3                              hzkpos++;
 162   3                      }//指向下个字节
 163   2                      YPOS = ytemp;
 164   2              }
 165   1              XPOS--;
 166   1      }//恢复页坐标
 167          //-----------------------------------------------------------------------
 168          
 169          //写一个英文字符8*16,输入:液晶显示字符的起始坐标XPOS,YPOS,字符的首地址hzkpos,执行后XPOS,YPOS 不变
 170          void write_eng(uchar *hzkpos)
 171          {
 172   1              uchar xtimes,ytimes,ytemp;
 173   1              for(xtimes=0;xtimes<2;xtimes++)
 174   1              {
 175   2                      XPOS = XPOS+xtimes;              //换下一页,一个字符占两页
 176   2                      ytemp = YPOS;
 177   2                      for(ytimes=0;ytimes<8;ytimes++)//一页 列变量自动加1写8列,但YPOS不变
 178   2                      {
C51 COMPILER V7.01  TEMP                                                                   09/23/2008 14:27:38 PAGE 4   

 179   3                              if(FB_FLAG==0)
 180   3                                      DAT=*hzkpos;
 181   3                              else
 182   3                                      DAT=(255-*hzkpos); 
 183   3                              YPOS++;
 184   3                              setxy();
 185   3                              write_byte();//将一个字节写入
 186   3                              hzkpos++;
 187   3                      }
 188   2                      YPOS = ytemp;
 189   2              }//指向下个字节
 190   1              XPOS--;
 191   1      }
 192          //---------------------------------------------------------------------
 193          
 194          //确定下个汉字在液晶上的显示坐标XPOS,YPOS,输入XPOS,YPOS为上一字符的坐标
 195          void c_lcmnext()
 196          {
 197   1              YPOS=YPOS+16;
 198   1              if(YPOS>127)
 199   1              {
 200   2                      XPOS=XPOS+2;
 201   2                      YPOS=0;
 202   2              }
 203   1      }//写到最后一列,换到下一个字符显示行,列坐标置0
 204          //----------------------------------------------------------------
 205          
 206          //确定下个英文在液晶上的显示坐标XPOS,YPOS,输入XPOS,YPOS为上一字符的坐标
 207          void e_lcmnext()
 208          {
 209   1              YPOS=YPOS+8;
 210   1              if(YPOS>127)
 211   1              {
 212   2                      XPOS=XPOS+2; 
 213   2                      YPOS=0;
 214   2              }
 215   1      }//写到最后一列,换到下一个字符显示行,列坐标置0
 216          //-------------------------------------------------------------------
 217          
 218          //以下为被调用函数putstr,输入为字符串起始坐标XPOS,YPOS,  字符串的起始地址STR,是否需要反白显示标志位FB_FLAG
 219          void putstr(unsigned int *STR)
 220          {
 221   1              unsigned int *charnumpt=STR;//指向编号的指针。最初指向该字符串的第一个字符编码
 222   1              unsigned int charnum;
 223   1              unsigned char code *hzkpos;//字符在汉字库中的地址

⌨️ 快捷键说明

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