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

📄 bo hao.lst

📁 用89S52作的远程序电话拨号系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
 209   2       }
 210   1      }
 211          
 212          /************************************************************
 213          *                                                           *
 214          * 蜂鸣器响一声                                              *
 215          *                                                           *
 216          ************************************************************/
 217          void beep()
 218          {
 219   1        unsigned char i;
 220   1        for (i=0;i<180;i++)
 221   1         {
 222   2         delay0(6);
 223   2         BEEP=!BEEP;       //BEEP取反
 224   2         } 
 225   1         BEEP=1;           //关闭蜂鸣器
 226   1         delay(250);       //延时     
 227   1      }
 228          
 229          /************************************************************
 230          *                                                           *
 231          * 键入电话号码函数                                          *
 232          *                                                           *
 233          ************************************************************/
 234          void  key_input ()
 235           {  
 236   1              P1=0xF0;
 237   1              if(P1!=0xF0)                //判是否有健按下
 238   1              {
 239   2                keyscan();
 240   2                beep();
 241   2            
C51 COMPILER V8.02   BO_HAO                                                                12/11/2006 11:06:57 PAGE 5   

 242   2            if(key==0x0f)              //是否为发送键
 243   2                return;
 244   2      
 245   2                if(key==0)                 //0转换为电话码"a"
 246   2                key=0x0a;
 247   2      
 248   2            dis_buf1[keynum]=key;      //健值送存储单元
 249   2      
 250   2                dis_buf =dis_buf1[keynum]; //健值送显示单元
 251   2       
 252   2            if(dis_buf==0x0a)          //数据转换
 253   2                dis_buf=0x00;
 254   2      
 255   2            dis_buf = dis_buf & 0x0f;
 256   2          
 257   2            if(dis_buf>9)               //转换为ASCII码
 258   2            dis_buf = dis_buf+0x37;
 259   2            else
 260   2            dis_buf = dis_buf+0x30;
 261   2      
 262   2                lcd_pos(0x44+keynum);             
 263   2            lcd_wdat(dis_buf);         //显示健值
 264   2      
 265   2                keynum++;                  //按键次数计数
 266   2              }
 267   1       }
 268          
 269          /*************************************************************
 270          *                                                            *
 271          * MT8880 写状态函数                                          *
 272          * RS=1,RW=0,写状态寄存器                                     *
 273          *                                                            *
 274          *************************************************************/
 275          void  write_status(uchar value)
 276          {
 277   1         MT_RS=1;
 278   1         MT_RW =0;
 279   1         MT_CK =0;
 280   1      
 281   1         P1 = value;     //写 8880CRA和CRB.
 282   1         MT_CK =1;
 283   1         delayNOP();
 284   1         MT_CK =0;
 285   1      }
 286          
 287          /*************************************************************
 288          *                                                            *
 289          * MT8880 初始化函数                                          *
 290          *                                                            *
 291          *************************************************************/
 292          void  MT_INIT() 
 293          {
 294   1         MT_CS=0;             //MT8880使能
 295   1         delayNOP();
 296   1         write_status(0x10);  //写 8880CRA,CRA=0000.
 297   1         write_status(0x10);  //写 8880CRA,CRA=0000.
 298   1         write_status(0x18);  //写 8880CRA,CRA=1000,允许选择CRB.
 299   1         write_status(0x10);  //写 8880CRB,CRB=0000
 300   1         MT_CS=1;             //禁止MT8880工作
 301   1      }
 302          
 303          /*************************************************************
C51 COMPILER V8.02   BO_HAO                                                                12/11/2006 11:06:57 PAGE 6   

 304          *                                                            *
 305          * MT8880   发码程序                                          *
 306          *                                                            *
 307          * RS=1,RW=0,写状态寄存器                                     *
 308          * RS=1,RW=1,读状态寄存器                                     *
 309          * RS=0,RW=0,写发送寄存器                                     *
 310          *                                                            *
 311          *************************************************************/ 
 312          void  MT_TRAN()
 313          {
 314   1         uchar  i;
 315   1      
 316   1         lcd_pos(0x40);           //设置显示位置为第二行     
 317   1         for(m=0;m<16;m++)
 318   1         lcd_wdat(cdis2[m]);
 319   1      
 320   1         MT_CS=0;
 321   1         delayNOP();
 322   1      
 323   1         write_status(0x1d);      //写 8880CRA,CRA=1101.
 324   1         write_status(0x10);      //写 8880CRB,CRB=0000.
 325   1                                  //8880模式2为TONE,DTMF,IRQ,BURST
 326   1       
 327   1         MT_RS=0;                //写发送寄存器
 328   1         MT_RW =0;
 329   1         MT_CK =0;
 330   1      
 331   1         for(i=0;i<keynum;i++)
 332   1         {
 333   2           dis_buf1[i]=dis_buf1[i]&0x0f;  //取数据低4位
 334   2               P1 = dis_buf1[i];
 335   2               MT_CK =1;                      //发送号码
 336   2           delayNOP();
 337   2           MT_CK =0;
 338   2       
 339   2               if(dis_buf1[i]==0x0a)
 340   2               dis_buf1[i]=0x00;
 341   2      
 342   2           dis_buf1[i]=dis_buf1[i]+0x30;  //转换为ASCII码
 343   2               lcd_pos(0x44+i);             
 344   2           lcd_wdat(dis_buf1[i]);         //显示拨号码
 345   2      
 346   2           delay(300);                    //调整拨号速率
 347   2         }
 348   1          MT_CS=1;
 349   1      }
 350          
 351          /************************************************************
 352          *                                                           *
 353          * 主程序                                                    *
 354          *                                                           *
 355          ************************************************************/ 
 356          void  main()
 357          {    
 358   1          P0=0xFF;                    //置P0口
 359   1          P2=0xFF;                    //置P2口  
 360   1          delay(10);                  //延时
 361   1          MT_CS=1;                    //禁止MT8880工作
 362   1          lcd_init();                 //初始化LCD             
 363   1              
 364   1          lcd_pos(0);                 //设置显示位置为第一行
 365   1          for(m=0;m<16;m++)
C51 COMPILER V8.02   BO_HAO                                                                12/11/2006 11:06:57 PAGE 7   

 366   1          lcd_wdat(cdis1[m]);
 367   1      
 368   1          lcd_pos(0x40);              //设置显示位置为第二行     
 369   1          for(m=0;m<16;m++)
 370   1          lcd_wdat(cdis2[m]);
 371   1          
 372   1          while(1)
 373   1          { 
 374   2            key_input();              //输入拨号号码
 375   2      
 376   2                if(key==0x0f)             //拨号
 377   2                {
 378   3                  TEL = 0;                //摘机
 379   3              delay(2000);            //延时等待拨号音出现
 380   3              MT_INIT();              //MT8880初始化
 381   3              MT_TRAN();              //MT8880拨号
 382   3      
 383   3              delay(5000);            //调整在线时间
 384   3              delay(5000);
 385   3              delay(5000);
 386   3      
 387   3                      TEL = 1;                //挂机
 388   3              
 389   3              MT_CS=1;                //禁止MT8880工作
 390   3                      key=0x00;
 391   3                      keynum=0x00;
 392   3      
 393   3                      lcd_pos(0x40);          //设置显示位置为第二行     
 394   3              for(m=0;m<16;m++)
 395   3              lcd_wdat(cdis2[m]);
 396   3      
 397   3                      delay(1000);
 398   3                 }      
 399   2              }      
 400   1      }   
 401          
 402          /************************************************************
 403          
 404          使用说明:
 405              先使用矩阵键盘输入你要拨的电话号码,LCD显示你输入的电话
 406          号码,可以输入12位。检查号码输入无误后,按"F"健即可进行拨号。
 407          
 408          ************************************************************/
 409          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    726    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17    ----
   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 + -