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

📄 12864perfect.lst

📁 3线控制12864液晶的源程序代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 211   1      command_data=0x04; 
 212   1      send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/ 
 213   1      command_data=0x0c; 
 214   1      send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/ 
 215   1      command_data=0x01; 
 216   1      send_command(command_data); /*清DDRAM*/ 
 217   1      command_data=0x02; 
 218   1      send_command(command_data); /*DDRAM地址归位*/ 
 219   1      command_data=0x80; 
 220   1      send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/ 
 221   1      }
 222          
 223          
 224          
 225          
 226          
 227          
 228           /*********************************************************/
 229          /*                                                       */
 230          /* 设定显示位置                                          */
 231          /*                                                       */
 232          /*********************************************************/
 233          void lcd_pos(uchar X,uchar Y)
 234          {                          
 235   1         uchar  pos;
 236   1         if (X==1)
 237   1           {X=0x80;}
 238   1         else if (X==2)
 239   1           {X=0x90;}
 240   1         else if (X==3)
 241   1           {X=0x88;}
C51 COMPILER V8.02   12864PERFECT                                                          09/06/2008 20:40:13 PAGE 5   

 242   1         else if (X==4)
 243   1           {X=0x98;}
 244   1         pos = X+Y ; 
 245   1       
 246   1         send_command(pos);     //显示地址
 247   1      }
 248          
 249          
 250          
 251          
 252          /*********************************************************
 253          *                                                        *
 254          * 闪烁函数                                               *
 255          *                                                        *
 256          *********************************************************/
 257          
 258          
 259          void lcdflag() 
 260          {
 261   1         send_command(0x08);                     //睡眠模式
 262   1         lcd_delay(400);
 263   1         send_command(0x0c);                          //睡眠中醒过来了,哈哈
 264   1         lcd_delay(400);
 265   1         send_command(0x08);   
 266   1         lcd_delay(400);
 267   1         send_command(0x0c);   
 268   1         lcd_delay(400);
 269   1         send_command(0x08);   
 270   1         lcd_delay(400);
 271   1         send_command(0x0c);   
 272   1         lcd_delay(5);
 273   1         send_command(0x01);   
 274   1        lcd_delay(5);
 275   1      }
 276          
 277          
 278          
 279          /*********************************************************
 280          *                                                        *
 281          * 图形显示                                               *
 282          *                                                        *
 283          *********************************************************/
 284          void photodisplay(uchar *bmp)   
 285          { 
 286   1        uchar i,j;
 287   1      
 288   1        send_command(0x34);        //写数据时,关闭图形显示
 289   1      
 290   1        for(i=0;i<32;i++)
 291   1        {
 292   2          send_command(0x80+i);    //先写入水平坐标值
 293   2          send_command(0x80);      //写入垂直坐标值
 294   2          for(j=0;j<16;j++)   //再写入两个8位元的数据    
 295   2          send_data(*bmp++);     
 296   2         // delay(1);
 297   2        }
 298   1      
 299   1        for(i=0;i<32;i++)
 300   1        { 
 301   2          send_command(0x80+i);
 302   2          send_command(0x88);
 303   2          for(j=0;j<16;j++)         
C51 COMPILER V8.02   12864PERFECT                                                          09/06/2008 20:40:13 PAGE 6   

 304   2              send_data(*bmp++);    
 305   2      //      delay(1);
 306   2        }
 307   1        send_command(0x36);       //写完数据,开图形显示 
 308   1      }
 309          /*********************************************************/
 310          //红外发射
 311          /*************************************/
 312          void IR_IN() interrupt 0 using 0   
 313          {
 314   1        uchar i,j,k,N=0;
 315   1        uchar number;
 316   1           EX0 = 0;   
 317   1               delay0(15);
 318   1               if (IRIN==1) 
 319   1           { EX0 =1;
 320   2                 return;
 321   2                } 
 322   1                               //确认IR信号出现
 323   1        while (!IRIN)           //等IR变为高电平,跳过9ms的前导低电平信号。
 324   1          {delay0(1);}
 325   1      
 326   1       for (j=0;j<4;j++)         //收集四组数据
 327   1       { 
 328   2        for (k=0;k<8;k++)        //每组数据有8位
 329   2        {
 330   3          while (IRIN);       //等IR变为低电平,跳过4.5ms的前导高电平信号。
 331   3          while (!IRIN);      //等IR变为高电平
 332   3          while (IRIN)        //计算IR高电平时长
 333   3            {
 334   4              delay0(1);
 335   4              N++;           
 336   4             if (N>=30)
 337   4                  { EX0=1;
 338   5                    return;}            //0.14ms计数过长自动离开。
 339   4            }                       //高电平计数完毕                
 340   3           IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
 341   3           if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
 342   3           N=0;
 343   3         }//end for k
 344   2       }//end for j
 345   1           if (IRCOM[2]!=~IRCOM[3])
 346   1         { EX0=1;
 347   2           return; }
 348   1              switch(IRCOM[2])
 349   1              {case 0x10:number=1;break;
 350   2              case 0x03:number=2;break;
 351   2              case 0x01:number=3;break;
 352   2              case 0x06:number=4;break;
 353   2              case 0x09:number=5;break;
 354   2              case 0x1D:number=6;break;
 355   2              case 0x1F:number=7;break;
 356   2              case 0x0D:number=8;break;
 357   2              case 0x19:number=9;break;
 358   2              case 0x1B:number=0;break;
 359   2      //      case 0x11:next++;if(next==3) next=0;number=0;break;
 360   2      //      case 0x15:queren++;break;
 361   2      //      case 0x17:gg++;if(gg==4) gg=0;break;
 362   2      
 363   2      
 364   2      //      case 0x1c:c1++;if(c1==10) c1=0;break;
 365   2      //      case 0x14:c2++;if(c2==10) c2=0;break;
C51 COMPILER V8.02   12864PERFECT                                                          09/06/2008 20:40:13 PAGE 7   

 366   2      //      case 0x0f:c3++;if(c3==10) c3=0;break;
 367   2      
 368   2              default:break;
 369   2         }
 370   1      
 371   1         key=number;
 372   1      
 373   1              lcd_pos(2,4);
 374   1      
 375   1              send_data(0x30+key);
 376   1         
 377   1                              
 378   1      
 379   1               EX0 = 1; 
 380   1      }
*** WARNING C280 IN LINE 314 OF 12864PERFECT.C: 'i': unreferenced local variable
 381          
 382          
 383          
 384          
 385          main() 
 386          { 
 387   1              uchar command_data; 
 388   1              uchar i;
 389   1         EA=1;
 390   1         EX0=1;
 391   1         IT0=1;
 392   1         IRIN=1;                    //I/O口初始化
 393   1                      //上电,等待稳定
 394   1              lcd_init(); 
 395   1      
 396   1        send_command(0x01);
 397   1       photodisplay(Photo1);     //显示图片1
 398   1        //lcdflag();
 399   1        //send_command(0x80);
 400   1        //send_data(0xa1);
 401   1        //send_data(0xf8); 
 402   1        //delay(1000);
 403   1        //send_command(0x80);
 404   1       // send_command(0x00); 
 405   1        while(1);
 406   1      
 407   1                
 408   1        
 409   1        
 410   1          
 411   1      }
*** WARNING C280 IN LINE 387 OF 12864PERFECT.C: 'command_data': unreferenced local variable
*** WARNING C280 IN LINE 388 OF 12864PERFECT.C: 'i': unreferenced local variable


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    756    ----
   CONSTANT SIZE    =   1024    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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