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

📄 time.lst

📁 再来一个IIC的时钟实现的例程吧。都是自己写的
💻 LST
📖 第 1 页 / 共 2 页
字号:
 199   2              write_code_E1(column|0x40);     //设置列地址
 200   2              for(i=N;i<(2*N);i++)
 201   2                      write_data_E1(p_char[i]);
 202   2              }
 203   1              else
 204   1              {
 205   2          write_code_E2(page|0xb8);    //设置页地址
 206   2              write_code_E2(column|0x40);      //设置列地址
 207   2              for(i=0;i<N;i++)
 208   2                      {write_data_E2(p_char[i]);/*P0_0_flash();*/}
 209   2              write_code_E2(page+1|0xb8);     //设置页地址
 210   2              write_code_E2(column|0x40);     //设置列地址
 211   2              for(i=N;i<(2*N);i++)
 212   2                      {write_data_E2(p_char[i]);/*P0_7_flash();*/}
 213   2              }
 214   1      }
 215          /*********************************************************************************************************
             -*************/
 216          
 217          
 218          void start(void){       //IIC总线起始条件
 219   1              SDA=1;
 220   1              SCL=1;
 221   1              delay();
 222   1              SDA=0;
 223   1              delay();
 224   1              SCL=0;
 225   1              }
 226          
 227          void stop(void){        //IIC总线停止条件
 228   1              SDA=0;
 229   1              SCL=1;
 230   1              delay();
 231   1              SDA=1;
 232   1              delay();
 233   1              SCL=0;
 234   1              }
 235          
 236          bit send_byte(uchar da){                //传送字节数据
 237   1              data uchar i;
 238   1              for(i=0;i<8;i++){
C51 COMPILER V7.50   TIME                                                                  03/21/2007 22:26:54 PAGE 5   

 239   2                      SDA=(bit)(da&0x80);
 240   2                      da=da<<1;
 241   2                      SCL=1;
 242   2                      delay();
 243   2                      SCL=0;
 244   2                      }
 245   1              ;;
 246   1              SDA=1;                  //准备接收ACK位
 247   1              ;
 248   1              ;
 249   1              SCL=1;                  //开始接收ACK位
 250   1              ;
 251   1              ;
 252   1              flag=0;
 253   1              if(SDA==0) flag=0;      //ACK(SDA线上是与关系决定电平)
 254   1              else flag=1;    //No ACK(SDA==1)
 255   1              SCL=0;                  //与上面的SCL=1构成正常的时钟同期
 256   1              delay();//加了这一句之后,成功了
 257   1              return(flag);
 258   1              }
 259          
 260          uchar recieve_byte(void){
 261   1              data uchar i;
 262   1              uchar da=0;
 263   1              SDA=1;
 264   1              for(i=0;i<8;i++){
 265   2                      da*=2;
 266   2                      ;
 267   2                      SCL=0;
 268   2                      delay();
 269   2                      SCL=1;;;
 270   2                      if(SDA==1) da++;
 271   2                      ;;
 272   2                      }
 273   1              SCL=0;
 274   1              if(flag1==0){
 275   2                      SDA=0;
 276   2                      ;;
 277   2                      SCL=1;
 278   2                      delay();
 279   2                      SCL=0;
 280   2                      delay();
 281   2                      }
 282   1              else {
 283   2                      SDA=1;
 284   2                      ;;
 285   2                      SCL=1;
 286   2                      delay();
 287   2                      SCL=0;
 288   2                      delay();//加了这一句之后,成功了
 289   2                      flag1=0;
 290   2                      }
 291   1              return(da);
 292   1              }
 293          
 294          void send(){
 295   1              data uchar i;
 296   1              for(i=0;i<255;i++)  delay();
 297   1                      start();
 298   1                      if(~send_byte(0xd0)){
 299   2                      if(~send_byte(0x00)){
 300   3                              for(i=0;i<8;i++){
C51 COMPILER V7.50   TIME                                                                  03/21/2007 22:26:54 PAGE 6   

 301   4                                      if(~send_byte(rom_sed[i]));
 302   4                                      else ;
 303   4                                      }
 304   3                              stop();
 305   3                              }
 306   2                      else;
 307   2                      }
 308   1                      else;
 309   1      
 310   1      }
 311          
 312          
 313          void recieve(){
 314   1              data uchar i;
 315   1              start();
 316   1              if(~send_byte(0xd0)){
 317   2              if(~send_byte(0x00)){
 318   3              delay2();
 319   3              start();
 320   3              if(~send_byte(0xd1)){
 321   4                      for(i=1;i<9;i++){
 322   5                              if(i==8) flag1=1;
 323   5                              else flag1=0;
 324   5                              rom_rec[i]=recieve_byte();
 325   5                              switch(i){
 326   6                                      case 1: rom_rec[i]=rom_rec[i]&0x7f; break;
 327   6                                      case 2: rom_rec[i]=rom_rec[i]&0x7f; break;
 328   6                                      case 3: rom_rec[i]=rom_rec[i]&0x3f; break;
 329   6                                      case 4: rom_rec[i]=rom_rec[i]&0x07; break;
 330   6                                      case 5: rom_rec[i]=rom_rec[i]&0x3f; break;
 331   6                                      case 6: rom_rec[i]=rom_rec[i]&0x1f; break;
 332   6                                      case 7: rom_rec[i]=rom_rec[i]&0xff; break;
 333   6                                      default : break;
 334   6                                      }
 335   5                              delay();//加了这一句之后,成功了
 336   5                              delay();//加了这一句之后,成功了
 337   5                              }
 338   4                      }
 339   3                      stop();
 340   3              }
 341   2              }
 342   1      }
 343          
 344          
 345          void main(){
 346   1              init_lcd();
 347   1              send();
 348   1              while(1){
 349   2              clear_lcd();
 350   2              write_char_N_16(xian,0x00,00,16);//现
 351   2              write_char_N_16(zai,0x00,24,16);//在
 352   2              write_char_N_16(shi1,0x00,48,16);//     时
 353   2              write_char_N_16(jian,0x00,72,16);//间
 354   2              write_char_N_16(maohao,0x00,96,16);//:
 355   2      
 356   2              write_char_N_16(shi2,0x04,16,16);//时
 357   2              write_char_N_16(fen,0x04,48,16);//分
 358   2              write_char_N_16(miao,0x04,80,16);//秒
 359   2      
 360   2              write_char_N_16(xin,0x06,20,16);//星
 361   2              write_char_N_16(qi,0x06,48,16);//期
 362   2      
C51 COMPILER V7.50   TIME                                                                  03/21/2007 22:26:54 PAGE 7   

 363   2              write_char_N_16(nian,0x02,16,16);//年
 364   2              write_char_N_16(yue,0x02,48,16);//月
 365   2              write_char_N_16(ri,0x02,80,16);//日
 366   2      
 367   2      
 368   2          recieve();
 369   2              //秒
 370   2              write_char_N_16(zhifu[((rom_rec[1]&0x70)>>4)],0x04,64,8);
 371   2              write_char_N_16(zhifu[(rom_rec[1]&0x0f)],0x04,72,8);
 372   2              //分
 373   2              write_char_N_16(zhifu[((rom_rec[2]&0x70)>>4)],0x04,32,8);
 374   2              write_char_N_16(zhifu[(rom_rec[2]&0x0f)],0x04,40,8);
 375   2              //时
 376   2              write_char_N_16(zhifu[((rom_rec[3]&0x70)>>4)],0x04,00,8);
 377   2              write_char_N_16(zhifu[(rom_rec[3]&0x0f)],0x04,8,8);
 378   2              //日
 379   2              write_char_N_16(zhifu[((rom_rec[5]&0x30)>>4)],0x02,64,8);
 380   2              write_char_N_16(zhifu[(rom_rec[5]&0x0f)],0x02,72,8);
 381   2              //月
 382   2              write_char_N_16(zhifu[((rom_rec[6]&0x10)>>4)],0x02,32,8);
 383   2              write_char_N_16(zhifu[(rom_rec[6]&0x0f)],0x02,40,8);
 384   2              //年
 385   2              write_char_N_16(zhifu[((rom_rec[7]&0xf0)>>4)],0x02,00,8);
 386   2              write_char_N_16(zhifu[(rom_rec[7]&0x0f)],0x02,8,8);
 387   2              //星期
 388   2              write_char_N_16(zhifu[(rom_rec[4]&0x07)],0x06,76,8);
 389   2              delay2();
 390   2              }
 391   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1345    ----
   CONSTANT SIZE    =    576    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   IDATA SIZE       =     17    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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