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

📄 mcs51-项目开发经典.lst

📁 带keil工程
💻 LST
📖 第 1 页 / 共 2 页
字号:
 185          { SBUF = uart_data_out;
 186   1        while(TI==0);
 187   1        TI=0;
 188   1      }
 189          //-------------------------------------------------------------------------------------------------
 190          //函数功能:串口发射字符数组。通常将要发送的字符数组定义在CODE代码区。
 191          void uart_string_out(char * char_array)
 192          {  uchar i;
 193   1         for(i=0; i<strlen(char_array) ;i++)
 194   1           {
 195   2                uart_byte_out(char_array[i]);
 196   2               }
 197   1      }
 198          
 199          // 液晶ST7920驱动程序
 200          //=================================================================================================
 201          //-------------------------------------------------------------------------------------------------
 202          // 函数功能:液晶并行写数据或写指令
 203          // 形参:dat_or_comm 区分指令或数据,由宏定义可知 comm表示指令,dat表示数据
 204          // content 指令或数据内容
 205          void write_lcd (uchar dat_comm,uchar content)
 206          {
 207   1              check_busy ();
 208   1              if(dat_comm)
 209   1                 {rs=1;   //data
 210   2                  rw=0;   //write
 211   2                 }
 212   1              else 
 213   1                 {rs=0;   //command
 214   2                  rw=0;   //write
 215   2                 }
 216   1              P0=content;   //output data or comm
 217   1              e=1;
 218   1              e=0;
 219   1      }
 220          //-------------------------------------------------------------------------------------------------
 221          uchar read_lcd (void)
 222          {       uchar fhz;
 223   1          check_busy ();
 224   1              P0=0xff;
 225   1              rs=1;
 226   1              rw=1;
 227   1              e=1;
 228   1              fhz=P0;
 229   1              e=0;
 230   1              return(fhz) ;
 231   1      }
 232          //-------------------------------------------------------------------------------------------------
 233          //函数功能:判断液晶忙闲
 234          void check_busy (void)
 235          { uint max_delay_time=65535;
 236   1        P0=0xff;
 237   1        rs=0;
 238   1        rw=1;
 239   1        e =1;
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/07/2008 20:01:11 PAGE 5   

 240   1        while(busy==1)
 241   1          {
 242   2           max_delay_time--;//如果busy==1条件永远满足不了(如液晶损坏),则延时一段时间后退出
 243   2               if(max_delay_time==0) break;
 244   2              }
 245   1        e =0;
 246   1      }
 247          //-------------------------------------------------------------------------------------------------
 248          // 函数功能:液晶模块初始化
 249          void init_lcd (void)
 250          {
 251   1        write_lcd (comm,0x30);  //6 功能设定:使用基本指令动作,8位控制接口
 252   1        write_lcd (comm,0x01);  //1 清屏:DDRAM全部写20H,地址指针指向00H
 253   1        write_lcd (comm,0x02);  //2 地址归位:地址指针指向00H
 254   1        write_lcd (comm,0x06);  //3 点设定:置光标右移,AC自动加 1,整体显示不移动
 255   1        write_lcd (comm,0x0c);  //4 显示状态设定:置整体显示开,光标关,光标位置不反白闪烁
 256   1        write_lcd (comm,0x14);  //5 光标或显示移位控制:光标右移,AC加 1
 257   1      }
 258          //-------------------------------------------------------------------------------------------------
 259          // 函数功能:刷新图像
 260          void image_clear(void)
 261          {   
 262   1              uchar y_zb,x_zb;
 263   1      
 264   1              for(y_zb=0;y_zb<32;y_zb++)
 265   1                 {for(x_zb=0;x_zb<8;x_zb++)
 266   2                     {line_display (y_zb, x_zb, 0x0000);
 267   3                         }
 268   2                 }
 269   1      }
 270          //-------------------------------------------------------------------------------------------------
 271          // 函数功能:清DDRAM
 272          void lcm_clear_ram (void)
 273          {
 274   1        write_lcd (comm,0x30);
 275   1        write_lcd (comm,0x01);
 276   1      }
 277          //-------------------------------------------------------------------------------------------------
 278          // 函数功能:显示汉字或字符
 279          // 12232C液晶模块的显示结构为:共2行显示,每行可显示15个字符或7个半汉字
 280          // 显示内容可以字符和汉字混排,方法如下:
 281          // 即一个汉字为2字节,一个字符1字节,汉字字符可以穿插,只要保证每行15字节就可正确显示
 282          void chinese_or_character_display (uchar code *char_name)
 283          {
 284   1        uchar i;
 285   1        write_lcd (comm,0x30);
 286   1      
 287   1        write_lcd (comm,0x80);//设定DDRAM地址到地址计数器AC,即第一行显示首址
 288   1        for (i=0;i<15;i++)
 289   1          {write_lcd (dat,char_name[i]);//显示第一行内容,要显示字符串的0-14字节
 290   2              }
 291   1        write_lcd (comm,0x90);//设定DDRAM地址到地址计数器AC,即第二行显示首址
 292   1        for (i=15;i<30;i++)
 293   1          {write_lcd (dat,char_name[i]);//显示第二行内容,要显示字符串的15-29字节
 294   2              }
 295   1      }
 296          //-------------------------------------------------------------------------------------------------
 297          // 函数功能:显示图片
 298          void image_display (uchar code *img)
 299          {
 300   1        uchar i,j;
 301   1        for(j=0;j<32;j++)
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/07/2008 20:01:11 PAGE 6   

 302   1                {
 303   2                  for(i=0;i<8;i++)
 304   2                  {
 305   3                    write_lcd (comm,0x34);
 306   3                    write_lcd (comm,y+j);
 307   3                    write_lcd (comm,x+i);
 308   3                    write_lcd (comm,0x30);
 309   3                    write_lcd (dat,img[j*16+i*2]);
 310   3                    write_lcd (dat,img[j*16+i*2+1]);
 311   3                  }
 312   2                }
 313   1        write_lcd (comm,0x36);//绘图显示开
 314   1      }
 315          //-------------------------------------------------------------------------------------------------
 316          void line_display (uchar y_coordinate, uchar x_coordinate, uint show_data)
 317          {
 318   1          uchar data_high,data_low;
 319   1          data_high = (show_data & 0xff00)>>8;
 320   1          data_low  =  show_data & 0x00ff;
 321   1      
 322   1              write_lcd (comm,0x34);
 323   1              write_lcd (comm,0x80 + y_coordinate);
 324   1              write_lcd (comm,0x80 + x_coordinate);
 325   1      
 326   1              write_lcd (comm,0x30);
 327   1      
 328   1              write_lcd (dat,data_high);
 329   1              write_lcd (dat,data_low);
 330   1      
 331   1              write_lcd (comm,0x36);//绘图显示开
 332   1      }
 333          //-------------------------------------------------------------------------------------------------
 334          uint line_read (uchar y_coordinate, uchar x_coordinate)
 335          {
 336   1          uchar data_high,data_low;
 337   1              uint  data_backup;
 338   1      
 339   1              write_lcd (comm,0x34);
 340   1              write_lcd (comm,0x80 + y_coordinate);
 341   1              write_lcd (comm,0x80 + x_coordinate);
 342   1      
 343   1              write_lcd (comm,0x30);
 344   1              read_lcd ();
 345   1          data_high = read_lcd ();
 346   1              data_low  = read_lcd ();
 347   1      
 348   1              data_backup = data_high;
 349   1          data_backup = (data_backup<<8) | data_low;  
 350   1      
 351   1              return(data_backup);
 352   1      }
 353          //=================================================================================================
 354          // T1中断服务程序
 355          //=================================================================================================
 356          void T1_interrupt(void) interrupt 3
 357          {
 358   1        TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
 359   1        TL1=0x00;
 360   1        t1_delay_time++;//在需要延时的地方清空并判断该变量
 361   1      }
 362          //=================================================================================================
 363          //                           end of the file 
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/07/2008 20:01:11 PAGE 7   

 364          //=================================================================================================


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    665    ----
   CONSTANT SIZE    =    587    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3      25
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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