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

📄 can

📁 can通信源码
💻
📖 第 1 页 / 共 2 页
字号:
 193   1      DIN=1; 
 194   1      } 
 195          
 196          
 197          
 198          
 199          /////////////////////////////////////////////////////////////////////////////////////////// 
 200          /////////////////////////////////////////////////////////////////////////////////////////// 
 201          //LCD_init: LCD初始化 
 202          void LCD_init(void) 
 203          { 
 204   1      RST=0;   
 205   1         delay_1ms(); 
 206   1         RST=1; 
 207   1      delay_1ms();   
 208   1      LCD_Write_Byte(0x21,0);//初始化Lcd,功能设定使用扩充指令 
 209   1      LCD_Write_Byte(0xd0,0);//设定液晶偏置电压 
 210   1      LCD_Write_Byte(0x20,0);//使用基本指令 水平寻址 
 211   1      
 212   1      //LCD_Write_Byte(0x0C,0);//设定显示模式,正常显示 
 213   1      LCD_Write_Byte(0x0D,0);  //设定显示模式,反白显示 
 214   1      } 
 215          
 216          ///////////////////////////////////////////////////////////// 
 217          ///////////////////////////////////////////////////////////// 
 218          //LCD_Set_XY: 设置LCD坐标函数 用于准备显示高度是‘8个点’的汉字或字母 
 219          //输入参数:X:0-83  Y:0-5 
 220          void LCD_Set_XY(u8 X, u8 Y) 
 221          { 
 222   1      LCD_Write_Byte(0x40 | Y, 0);// 竖 
 223   1      LCD_Write_Byte(0x80 | X, 0);// 横 
 224   1      } 
 225          
 226          ///////////////////////////////////////////////////////////// 
 227          ///////////////////////////////////////////////////////////// 
 228          //LCD_Clear: LCD清屏函数 
 229          void LCD_Clear(void) 
 230          { 
 231   1      u8 x; 
 232   1      u8 y; 
 233   1      LCD_Set_XY(0,0); 
 234   1      
 235   1      for(y=0;y<=5;y++) 
 236   1      {  
 237   2      for(x=0;x<=83;x++) 
 238   2      {  
 239   3      LCD_Write_Byte(0x00,1); 
 240   3      }  
 241   2      } 
C51 COMPILER V8.02   二节点                                                                03/11/2012 14:11:13 PAGE 5   

 242   1      }  
 243          
 244          
 245          
 246          ///////////////////////////////////////////////////////////// 
 247          ///////////////////////////////////////////////////////////// 
 248          //LCD_Write_ABC: 显示8(宽)*16(高)点阵列数字字母符号等半角类 
 249          //输入参数: x: 
 250          // y: 
 251          // ABC:显示的字符的序号 
 252          
 253          
 254          ///////////////////////////////////////////////////////////// 
 255          ///////////////////////////////////////////////////////////// 
 256          //LCD_Write_Chinese: 显示16(宽)*16(高)点阵列汉字等半角类 
 257          //输入参数: 
 258          // x: 
 259          // y: 
 260          // Chinese:显示的汉字的序号
 261          void LCD_Write_Charater(u8 x,u8 y,u8 charater)
 262          {
 263   1       unsigned char i;
 264   1       LCD_Set_XY(x*8,y);
 265   1       for(i=0;i<8;i++)
 266   1       {
 267   2        LCD_Write_Byte2(charater_table[charater*16+i],1); 
 268   2       }
 269   1        LCD_Set_XY(x*8, y+1);// 列,页  
 270   1      for(i=8; i<16;i++)  
 271   1      { 
 272   2      LCD_Write_Byte2(charater_table[charater*16+i],1); 
 273   2      } 
 274   1      } 
 275          
 276          void LCD_Write_Chinese(u8 x, u8 y,u8 Chinese) 
 277          { 
 278   1      unsigned char i;   
 279   1      
 280   1      LCD_Set_XY(x*8, y);// 列,页  
 281   1      for(i=0; i<16;i++)  
 282   1      { 
 283   2      LCD_Write_Byte2(Chinese_table[Chinese*32+i],1);  
 284   2      } 
 285   1      
 286   1          LCD_Set_XY(x*8, y+1);// 列,页  
 287   1      for(i=16; i<32;i++)  
 288   1      { 
 289   2      LCD_Write_Byte2(Chinese_table[Chinese*32+i],1); 
 290   2      } 
 291   1      } 
 292          
 293          
 294          /////////////////////////////////////////////////////////////////////////////////////////////
 295          void anjian()
 296          {
 297   1       if(p15==0)//按5键在光照等级和温湿度之间切换
 298   1      {
 299   2       Delay(5000);
 300   2       if(p15==0)
 301   2         {
 302   3       qh=~qh;
 303   3       while(!p15);
C51 COMPILER V8.02   二节点                                                                03/11/2012 14:11:13 PAGE 6   

 304   3       xsg();
 305   3       xswsd();
 306   3         }  
 307   2      }
 308   1      
 309   1      
 310   1      
 311   1       if(p12==0)
 312   1      {
 313   2       Delay(500);
 314   2       if(p12==0)
 315   2        {
 316   3        CAN_yuan();
 317   3      
 318   3        while(!p12);
 319   3         }
 320   2      
 321   2      CAN_RXD();
 322   2      qh=1;
 323   2      xswsd();
 324   2      
 325   2      
 326   2      
 327   2      }
 328   1      
 329   1      
 330   1      if(p13==0)
 331   1        {
 332   2         Delay(3000);
 333   2         if(p13==0)
 334   2           {
 335   3            while(!p13);
 336   3                      qieh=0;
 337   3            PWM_Num++;
 338   3                if(PWM_Num>=5)
 339   3               PWM_Num=0;
 340   3               qh=0;
 341   3            xsg();  
 342   3             }
 343   2             }
 344   1      
 345   1      if(p11==0)//按1键,把光照等级发送过去
 346   1        {
 347   2      Delay(5000);
 348   2       
 349   2      if(p11==0)
 350   2      {
 351   3      CAN_TXD();
 352   3      Delay(100);
 353   3      Delay(100);
 354   3      while(!p11);
 355   3      LCD_Clear(); 
 356   3      LCD_Write_Chinese(0,0,4);//光 
 357   3      LCD_Write_Chinese(2,0,5);//照 
 358   3      LCD_Write_Chinese(4,0,6);//等 
 359   3      LCD_Write_Chinese(6,0,7);//级 
 360   3      LCD_Write_Chinese(0,2,9);//已 
 361   3      LCD_Write_Chinese(2,2,10);//;发 
 362   3      LCD_Write_Chinese(4,2,11);//送
 363   3      Delay(60000);
 364   3      Delay(60000);
 365   3      Delay(60000);
C51 COMPILER V8.02   二节点                                                                03/11/2012 14:11:13 PAGE 7   

 366   3      Delay(60000);
 367   3      
 368   3      }  
 369   2      }
 370   1      }
 371          ///////////////////////////////////////////////////主函数////////////////////////////////////
 372          void main(void)
 373          {
 374   1      bit Flag;
 375   1      RST=0; 
 376   1      Delay(200);
 377   1      Delay(200);
 378   1      RST=1;    
 379   1      LCD_init(); 
 380   1      LCD_Clear(); 
 381   1      
 382   1          SJA_RST = 0; //复位引脚
 383   1              Delay(100);
 384   1          SJA_RST = 1;//CAN总线复位管脚
 385   1              Delay(100);
 386   1              Delay(100);
 387   1              Delay(100);
 388   1          SJA_CS = 0;//CAN总线片选有效
 389   1         Delay(100);
 390   1          SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
 391   1      //CPU初始化
 392   1      
 393   1          CAN_init(); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片

⌨️ 快捷键说明

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