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

📄 main.lst

📁 51单片机字符型128*64液晶温度曲线实现程序
💻 LST
字号:
C51 COMPILER V7.20   MAIN                                                                  07/23/2008 16:20:10 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include"omc12864.h"
   3          
   4          #define         disp_off   0x3e //显示关指令
   5          #define         disp_on    0x3f //显示开指令
   6          #define         disp_x     0xb8 //地址页初值bin000
   7          #define         disp_z     0xc0 //显示起始行偏移量bin000000
   8          #define         disp_y     0x40 //列地址初值bin000000
   9          #define         comm       0    //指令
  10          #define         dat        1    //数据
  11          #define         data_ora   P0   //数据口
  12          
  13          sbit    rs =P1^2;                       //Data or Instrument Select,H:写数据,L:写指令
  14          sbit    rw =P1^3;                       //Write or Read,H:read,L:write
  15          sbit    e  =P1^4;                       //读写使能
  16          sbit    cs1=P1^0;                       //cs1=H,选择左半屏
  17          sbit    cs2=P1^1;                       //cs2=H,选择右半屏
  18          sbit    rst=P1^5;                       //Lcm reset,低有效
  19          sbit    bf =P0^7;                       //检测忙状态
  20          sbit    res=P0^4;                       //检测复位状态
  21          
  22          void wr_lcd (unsigned char dat_comm,unsigned char content);
  23          void delay (unsigned int us);
  24          void delay1 (unsigned int ms);
  25          void Puthazs(unsigned char x, unsigned char y ,unsigned char len,unsigned char code *hazs);
  26          void Puthaz(unsigned char x,unsigned char y,unsigned char chacnum,unsigned char code *ziku);
  27          
  28          /*****************************************************************
  29          函数功能:显示ASCII码字符
  30          参数说明:x(行,取值0~3),y(列,取值0~15)为定位坐标
  31                                  ch为ASCII字符
  32          ******************************************************************/
  33          
  34          void PutChar(unsigned char x,unsigned char y,unsigned char asc2key)
  35          {
  36   1              unsigned char i;
  37   1              x=x&0x0F;
  38   1              if((y=(y&0x0F))>7){cs1=1;cs2=0;y-=8;}   //右半屏显示
  39   1                      else{cs1=0;cs2=1;}                      //左半屏显示
  40   1              wr_lcd (comm,disp_on);
  41   1      
  42   1              //显示字符上半部分
  43   1              wr_lcd (comm,disp_x+2*x);               //设置页
  44   1              wr_lcd (comm,disp_z);                   //设置起始行
  45   1              wr_lcd (comm,disp_y+8*y);               //设置列
  46   1              for(i=0;i<8;i++)
  47   1                      wr_lcd (dat,asc2[(asc2key-32)*16+i]);   //根据ASCII码开始位置的不同来修改32
  48   1              
  49   1              //显示字符下半部分
  50   1              wr_lcd (comm,disp_x+2*x+1);             //设置页
  51   1              wr_lcd (comm,disp_z);                   //设置起始行
  52   1              wr_lcd (comm,disp_y+8*y);               //设置列
  53   1              for(i=8;i<16;i++)
  54   1              wr_lcd (dat,asc2[(asc2key-32)*16+i]);   //根据ASCII码开始位置的不同来修改32
  55   1      }
C51 COMPILER V7.20   MAIN                                                                  07/23/2008 16:20:10 PAGE 2   

  56          
  57          /********************************************************************************
  58          函数功能:      字符串输入函数,可选择定位也可不用此功能(x=0,y=0或都超出范围)
  59                                  具有自动换行功能,当写满屏时转到(0,0)从头开始
  60          参数说明:       x(行);y(列);str*字库
  61                                  x,y的值可较灵活,超出范围时自动从(0,0)点显示
  62          *********************************************************************************/
  63          
  64          //监测忙状态
  65          void chk_busy (void)
  66          {
  67   1        data_ora=0xff;
  68   1        rs=0;
  69   1        rw=1;
  70   1        ;
  71   1        e=1;
  72   1        while(bf||res==1);
  73   1        e=0;
  74   1      }
  75          void PutStr(unsigned char x, unsigned char y , unsigned char *str)
  76          {
  77   1              unsigned char i,len=0;
  78   1      
  79   1              /* 计算字符串长度 */
  80   1              while (str[len] >31)
  81   1              ++len;                  
  82   1      
  83   1              /* 显示字符串 */
  84   1              for (i=0;i<len;i++) 
  85   1              {
  86   2                      if ( y>= 16 )
  87   2                              {
  88   3                                      if(x<3)
  89   3                                      {
  90   4                                              y = 0;
  91   4                                              x += 1; //若超出范围则下一行显示
  92   4                                      }
  93   3                                      else {x=0;y=0;} //超出屏幕范围,则从屏幕开头显示
  94   3                              }
  95   2                      PutChar(x,y++,str[i]);
  96   2              }
  97   1      }
  98          
  99          
 100          
 101          //初始化
 102          void init_lcd (void)
 103          {
 104   1      //  rst=0;
 105   1        delay(50);
 106   1      // rst=1;
 107   1        cs1=0;cs2=0;
 108   1        wr_lcd (comm,disp_off);
 109   1        wr_lcd (comm,disp_on);
 110   1      }
 111          
 112          //清屏
 113          void clear(void)
 114          {
 115   1        unsigned char i,j;
 116   1        cs1=0;cs2=0;
 117   1        wr_lcd (comm,disp_on);
C51 COMPILER V7.20   MAIN                                                                  07/23/2008 16:20:10 PAGE 3   

 118   1        for(j=0;j<8;j++)
 119   1        {
 120   2          wr_lcd (comm,disp_x+j);
 121   2          wr_lcd (comm,disp_z);
 122   2          wr_lcd (comm,disp_y);
 123   2          for(i=0;i<64;i++)wr_lcd (dat,0x00);
 124   2        }
 125   1      }
 126          //写数据或命令到LCD
 127          void wr_lcd (unsigned char dat_comm,unsigned char content)
 128          {
 129   1       // chk_busy ();
 130   1        rs=dat_comm;
 131   1        rw=0;
 132   1        data_ora=content;
 133   1        e=1;
 134   1        ;
 135   1        e=0;
 136   1      }
 137          
 138          void xwpclear(void)
 139          {
 140   1          unsigned char x,y;
 141   1              if ( y>= 16 )
 142   1                              {
 143   2                                      if(x<3)
 144   2                                      {
 145   3                                              y = 0;
 146   3                                              x += 1; //若超出范围则下一行显示
 147   3                                      }
 148   2                                      else {x=0;y=0;} //超出屏幕范围,则从屏幕开头显示
 149   2                              }
 150   1                      PutChar(x,y++," ");
*** WARNING C214 IN LINE 150 OF MAIN.C: 'Argument': conversion: pointer to non-pointer
 151   1      }
 152          
 153          
 154          
 155            void main ()
 156          {
 157   1              init_lcd ();
 158   1              clear();
 159   1              while(1)
 160   1              {
 161   2                 clear();
 162   2                 PutStr(0,0,"Hello!            Welcome!         lilei   0000  0000 0000 0111 ");     
 163   2                 delay1(1500);
 164   2             clear();
 165   2                  xwpclear();
 166   2                 Puthazs(0,0,sizeof(dax2)/sizeof(dax2[0])>>5,dax2);
 167   2                 delay1(200);
 168   2              }       
 169   1      }
 170          
 171          
 172          
 173          void delay (unsigned int us)
 174          {
 175   1        while(us--);
 176   1      }
 177          
 178          void delay1 (unsigned int ms)
C51 COMPILER V7.20   MAIN                                                                  07/23/2008 16:20:10 PAGE 4   

 179          {
 180   1        unsigned int i,j;
 181   1        for(i=0;i<ms;i++)
 182   1        for(j=0;j<1000;j++)
 183   1        ;
 184   1      }
 185          
 186          /*********************************************************************************
 187          函数功能:格式化((16*16)*8*4)从字库中提取单个汉字
 188          参数说明:定位x:行,0~3 y:列,0~7 chacnum:所取汉字在字库中的标号(后面生成的标号)
 189                                  ziku:字库名
 190          *********************************************************************************/
 191          void Puthaz(unsigned char x,unsigned char y,unsigned char chacnum,unsigned char code *ziku)
 192          {
 193   1              unsigned char i;
 194   1              x=x&0x0F;
 195   1              if((y=(y&0x07))>3){cs1=1;cs2=0;y-=4;}   //右半屏显示
 196   1                      else{cs1=0;cs2=1;}                                      //左半屏显示
 197   1              wr_lcd (comm,disp_on);
 198   1      
 199   1              //显示汉字上半部分
 200   1              wr_lcd (comm,disp_x+2*x);               //设置页
 201   1              wr_lcd (comm,disp_z);                   //设置起始行
 202   1              wr_lcd (comm,disp_y+16*y);              //设置列
 203   1              for(i=0;i<16;i++)
 204   1              wr_lcd (dat,ziku[chacnum*32+i]);        //根据ASCII码开始位置的不同来修改32
 205   1              
 206   1              //显示汉字下半部分
 207   1              wr_lcd (comm,disp_x+2*x+1);             //设置页
 208   1              wr_lcd (comm,disp_z);                   //设置起始行
 209   1              wr_lcd (comm,disp_y+16*y);              //设置列
 210   1              for(i=16;i<32;i++)
 211   1              wr_lcd (dat,ziku[chacnum*32+i]);        //根据ASCII码开始位置的不同来修改32
 212   1      }
 213          
 214          /**********************************************************************************************
 215          函数功能:从x(行)y(列)位置开始,从字库的第一个字输出一直到标号为len的字结束,包含len
 216          **********************************************************************************************/
 217          void Puthazs(unsigned char x, unsigned char y ,unsigned char len,unsigned char code *hazs)
 218          {
 219   1              unsigned char i;
 220   1              
 221   1              /* 计算汉字个数 */
 222   1      //      len=((sizeof(hazs)/sizeof(hazs[0]))>>5);
 223   1      
 224   1              /* 显示字符串 */
 225   1              for (i=0;i<len;i++) 
 226   1              {
 227   2                      if ( y>= 8 )
 228   2                              {
 229   3                                      if(x<3)
 230   3                                      {
 231   4                                              y = 0;
 232   4                                              x += 1; //若超出范围则下一行显示
 233   4                                      }
 234   3                                      else {x=0;y=0;} //超出屏幕范围,则从屏幕开头显示
 235   3                              }
 236   2              
 237   2                      Puthaz(x,y++,i,hazs);
 238   2              }
 239   1      }

C51 COMPILER V7.20   MAIN                                                                  07/23/2008 16:20:10 PAGE 5   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    749    ----
   CONSTANT SIZE    =   6931    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      25
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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