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

📄 340_ad.lst

📁 c8051f340 silcon lab
💻 LST
📖 第 1 页 / 共 2 页
字号:

 180   1              delay1us();
 181   1              delay1us();
 182   1              delay1us();
 183   1              delay1us();
 184   1              delay1us();
 185   1              delay1us();
 186   1              for(j=0;j<5000;j++);
 187   1      
 188   1      }
 189          
 190           void writecode(uchar ins)                                  //向液晶控制模块写命令
 191               {
 192   1            uchar xdata t;
 193   1                uint xdata j;
 194   1              
 195   1                for(j=0;j<500;j++);   
 196   1                virt_port|=ins&0xf0;                                  //取高字节向1602写数据 
 197   1                writelcd(virt_port);                                  //先写高4位后再写低4位 这是在选择四个数据线的时候
 198   1           
 199   1                virt_port|=0x08;                                                
 200   1                writelcd(virt_port);                                  //使能E脚为高电平
 201   1            virt_port&=~0x08;                                 
 202   1                writelcd(virt_port);                                  //使能E脚为低电平
 203   1      
 204   1            t=ins<<4;             
 205   1            virt_port|=t&0xf0;                                //取低字节向1602写数据
 206   1                writelcd(virt_port);
 207   1            virt_port|=0x08;                                          //使能E脚为高电平
 208   1                writelcd(virt_port);
 209   1            virt_port&=~0x08;                                     //使能E脚为低电平
 210   1                writelcd(virt_port);
 211   1            virt_port=0;
 212   1                writelcd(virt_port);
 213   1           }
 214          
 215          void writedata(uchar d)                                    //写数据到1602
 216               {
 217   1            uchar xdata i,t;
 218   1                uint xdata j;
 219   1                
 220   1            for(j=0;j<500;j++);               
 221   1            virt_port|=0x02;                                     //光标返回指令
 222   1                writelcd(virt_port);
 223   1            virt_port|=d&0xf0;                                   //取高字节数据给数据寄存器
 224   1                writelcd(virt_port);
 225   1            virt_port|=0x08;                     //使能E脚为高电平
 226   1                writelcd(virt_port);
 227   1            virt_port&=0xf7;                             //使能E脚为低电平
 228   1                writelcd(virt_port);
 229   1            virt_port&=0x07;                                     //设置光标右移,文字也右移
 230   1            writelcd(virt_port);
 231   1                     
 232   1            t=d&0x0f;
 233   1            virt_port|=t<<4;                                     //取低字节数据给数据寄存器
 234   1                writelcd(virt_port);
 235   1      
 236   1                virt_port|=0x08;                                 //使能E脚为高电平
 237   1                writelcd(virt_port);
 238   1            for(i=3;i>0;i--); 
 239   1            virt_port&=0xf7;                     //使能E脚为低电平
 240   1                writelcd(virt_port);
 241   1            virt_port=0;                                                 //数据清零
C51 COMPILER V7.50   340_AD                                                                10/23/2006 13:29:41 PAGE 5   

 242   1                writelcd(virt_port);
 243   1          }
 244           void lcdchar (void)
 245           {
 246   1      //     uint xdata j,k;
 247   1               uchar a,b,c,d;
 248   1           temp=temp<<8;
 249   1               temp_l=temp+ams;
 250   1               temp_l=temp_l>>4;
 251   1               a=temp_l/1000;d=temp_l%1000;    
 252   1           writedata(tab1[a]);
 253   1               b=d/100;d=d%100;
 254   1               writedata(tab1[b]);
 255   1               c=d/10; d=d%10;
 256   1               writedata(tab1[c]);
 257   1               writedata(tab1[d]);
 258   1            
 259   1                
 260   1         
 261   1         
 262   1      }
 263           
 264          void lcdinit()
 265          {
 266   1           uint xdata i;
 267   1              
 268   1            virt_port=0x00;
 269   1                writelcd(virt_port);       //RS脚为零写指令寄存器      RW为低电平
 270   1            virt_port|=0x08;               //使能脚E=1
 271   1                writelcd(virt_port);
 272   1                virt_port&=0xf7;               //使E=0使能脚发生跳变高--低
 273   1                writelcd(virt_port);
 274   1                for(i=1000;i>0;i--);       //3次延时,重要!
 275   1                for(i=8000;i>0;i--);           //用延时代替查询         
 276   1      
 277   1          
 278   1            virt_port=0;                               //写入20码,设置为4位总线方式,非常重要!!!!!
 279   1                writelcd(virt_port);
 280   1            virt_port|=0x20;                   //只写高字节
 281   1                writelcd(virt_port);
 282   1            virt_port|=0x08;           //E=1
 283   1                writelcd(virt_port);
 284   1                for(i=20;i>0;i--);             //使命令执行
 285   1            virt_port&=0xf7;           //E=0
 286   1                writelcd(virt_port);
 287   1                for(i=10;i>0;i--);
 288   1            virt_port=0;
 289   1                writelcd(virt_port);
 290   1               
 291   1               
 292   1      
 293   1            writecode(0x38);          //设两行显示,4线方式5*10字符显示
 294   1            for(i=50;i>0;i--);
 295   1                  writecode(0x06);                    //光标右移
 296   1            for(i=50;i>0;i--);
 297   1               
 298   1                
 299   1                writecode(0x0c);                  //开显示指令
 300   1            for(i=50;i>0;i--);
 301   1            
 302   1               
 303   1            writecode(0x02);                  //光标返回指令
C51 COMPILER V7.50   340_AD                                                                10/23/2006 13:29:41 PAGE 6   

 304   1            for(i=50;i>0;i--);
 305   1                 
 306   1          
 307   1               
 308   1                writecode(0x01);                      //清屏指令
 309   1                for(i=50;i>0;i--);
 310   1      }
 311          void spi_isr(void) interrupt 6 
 312          {
 313   1              if(SPIF)                
 314   1                      {
 315   2                      SPIF=0;
 316   2                      SPI_BUSY=0;
 317   2                      }
 318   1                      
 319   1      
 320   1              if(WCOL)
 321   1                      {
 322   2                      WCOL=0;
 323   2                      }
 324   1      }
 325            
 326          void ether_reset_low()
 327          {
 328   1      
 329   1         P1 &= ~0x01;               // Pull reset low
 330   1      
 331   1      }
 332          void ether_reset_high (void)
 333          {
 334   1      
 335   1         P1 |= 0x01;               // Allow /RST to rise
 336   1         while(!(P1 & 0x01));      // Wait for /RST to go high
 337   1      
 338   1      
 339   1      }
 340          void EMIF_Init (void)
 341          {
 342   1      
 343   1         EMI0CF = 0x1B;             // non-muxed mode; split mode
 344   1                                    // with bank select
 345   1      
 346   1         EMI0TC = EMIF_TIMING;      // This constant may be modified
 347   1                                    // according to SYSCLK to meet the
 348   1                                    // timing requirements for the CP2200
 349   1      
 350   1         EMI0CN = BASE_ADDRESS;     // Page of XRAM accessed by EMIF
 351   1      
 352   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1120    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     18      14
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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