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

📄 receivedata.lst

📁 用89S52作的远程序电话拨号系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE RECEIVEDATA
OBJECT MODULE PLACED IN Receivedata.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Receivedata.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************
   2          *                                                                 *
   3          * ME500B片机开发系统演示程序 - 接收 DTMF 编码                     *
   4          *                                                                 *
   5          * LCD1602显示                                                     *
   6          *                                                                 *
   7          * 版本: V1.0 (2006/11/20)                                        *
   8          * 作者: gguoqing (Email: gguoqing@willar.com)                    *
   9          * 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) *
  10          * 时间: 2006/12/12                                               *
  11          *                                                                 *
  12          *【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved *
  13          *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       *
  14          *                                                                 *
  15          ******************************************************************/
  16          
  17          #include <reg51.h>
  18          #include <intrins.h>
  19                                  
  20          #define uchar unsigned char
  21          #define uint  unsigned int
  22          
  23          sbit BEEP = P3^7;          //蜂鸣器驱动线
  24          
  25          sbit LCD_RS = P2^0;             
  26          sbit LCD_RW = P2^1;
  27          sbit LCD_EN = P2^2;
  28          
  29          sbit MT_RS  = P2^3;
  30          sbit MT_RW  = P2^4;
  31          sbit MT_CS  = P2^5;
  32          sbit MT_CK  = P2^6;
  33          sbit TEL    = P2^7;      //电话摘挂机控制线 
  34          
  35          bit  zhenling,playflag,tel_on;
  36          
  37          uchar  dis_buf=0x00;       //显示缓存     
  38          uchar  temp,count;
  39          uchar  T0_Count,m;        
  40          
  41          uchar code  cdis1[ ] = {"  RECEIVE DTMF  "};
  42          uchar code  cdis2[ ] = {"NUM:            "};
  43          
  44          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  45          
  46          
  47          /*************************************************************
  48          *                                                            *
  49          * 延时子程序                                                 *
  50          * 晶振 11.0592MHz  延时为1ms                                 *
  51          *                                                            *
  52          *************************************************************/
  53          void  delay(uint x)
  54          { 
  55   1         uchar j;
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 2   

  56   1         while((x--)!=0)
  57   1         { 
  58   2           for(j=0;j<115;j++)
  59   2           {;}
  60   2         }
  61   1      }
  62          
  63          /*************************************************************
  64          *                                                            *
  65          *检查LCD忙状态                                               *
  66          *lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据   *
  67          *                                                            *
  68          *************************************************************/ 
  69          bit lcd_busy()
  70           {                          
  71   1          bit result;
  72   1          LCD_RS = 0;
  73   1          LCD_RW = 1;
  74   1          LCD_EN = 1;
  75   1          delayNOP();
  76   1          result = (bit)(P0&0x80);
  77   1          LCD_EN = 0;
  78   1          return(result); 
  79   1       }
  80          
  81          /*************************************************************
  82          *                                                            *
  83          *写指令数据到LCD                                             *
  84          *RS=L,RW=L,E=高脉冲,D0-D7=指令码。                        *
  85          *                                                            *
  86          *************************************************************/
  87          void lcd_wcmd(uchar cmd)
  88          
  89          {                          
  90   1         while(lcd_busy());
  91   1          LCD_RS = 0;
  92   1          LCD_RW = 0;
  93   1          LCD_EN = 0;
  94   1          _nop_();
  95   1          _nop_(); 
  96   1          P0 = cmd;
  97   1          delayNOP();
  98   1          LCD_EN = 1;
  99   1          delayNOP();
 100   1          LCD_EN = 0;  
 101   1      }
 102          
 103          /************************************************************
 104          *                                                           *
 105          *写显示数据到LCD                                            *
 106          *RS=H,RW=L,E=高脉冲,D0-D7=数据。                         *
 107          *                                                           *
 108          ************************************************************/
 109          void lcd_wdat(uchar dat)
 110          {                          
 111   1         while(lcd_busy());
 112   1          LCD_RS = 1;
 113   1          LCD_RW = 0;
 114   1          LCD_EN = 0;
 115   1          P0 = dat;
 116   1          delayNOP();
 117   1          LCD_EN = 1;
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 3   

 118   1          delayNOP();
 119   1          LCD_EN = 0; 
 120   1      }
 121          
 122          /************************************************************
 123          *                                                           *
 124          *  LCD初始化设定                                            *
 125          *                                                           *
 126          ************************************************************/
 127          void lcd_init()
 128          { 
 129   1          delay(15);                   
 130   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 131   1          delay(5);
 132   1          lcd_wcmd(0x38);         
 133   1          delay(5);
 134   1          lcd_wcmd(0x38);         
 135   1          delay(5);
 136   1      
 137   1          lcd_wcmd(0x0c);      //显示开,关光标
 138   1          delay(5);
 139   1          lcd_wcmd(0x06);      //移动光标
 140   1          delay(5);
 141   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 142   1          delay(5);
 143   1      }
 144          
 145          /************************************************************
 146          *                                                           *
 147          *  设定显示位置                                             *
 148          *                                                           *
 149          ************************************************************/
 150          
 151          void lcd_pos(uchar pos)
 152          {                          
 153   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 154   1      }
 155          
 156          /************************************************************
 157          *                                                           *
 158          *  LCD显示函数                                              *
 159          *                                                           *
 160          ************************************************************/
 161          void lcd_play()
 162          {  
 163   1         if(dis_buf>9)               //转换为ASCII码
 164   1         dis_buf = dis_buf+0x37;
 165   1         else
 166   1         dis_buf = dis_buf+0x30;
 167   1      
 168   1         lcd_pos(0x44+T0_Count);              
 169   1         lcd_wdat(dis_buf);          //显示编码
 170   1      }
 171          
 172          /************************************************************
 173          *                                                           *
 174          * 延时 x*0.14ms                                             *
 175          *                                                           *
 176          ************************************************************/
 177          void delay0(uchar x)    
 178          {
 179   1        unsigned char i;
C51 COMPILER V8.02   RECEIVEDATA                                                           12/12/2006 16:32:39 PAGE 4   

 180   1        while(x--)
 181   1        {
 182   2          for (i = 0; i<13; i++) {;}
 183   2        }
 184   1      }
 185          
 186          /************************************************************
 187          *                                                           *
 188          * 蜂鸣器响一声                                              *
 189          *                                                           *
 190          ************************************************************/
 191          void beep()
 192          {
 193   1         unsigned char i;
 194   1         for (i=0;i<180;i++)
 195   1         {
 196   2           delay0(6);
 197   2           BEEP=!BEEP;     //BEEP取反
 198   2         } 
 199   1         BEEP=1;           //关闭蜂鸣器
 200   1         delay(400);       //延时     
 201   1      }
 202          
 203          /*************************************************************
 204          *                                                            *
 205          * MT8880 写状态函数                                          *
 206          * RS=1,RW=0,写状态寄存器                                     *
 207          *                                                            *
 208          *************************************************************/
 209          void  write_status(uchar value)
 210          {
 211   1         MT_RS =1;
 212   1         MT_RW =0;
 213   1         MT_CK =0;
 214   1      
 215   1         P1 = value;     //写 8880CRA和CRB.
 216   1         MT_CK =1;
 217   1         delayNOP();
 218   1         MT_CK =0;
 219   1      }
 220          
 221          /*************************************************************
 222          *                                                            *
 223          * MT8880 读状态函数                                          *

⌨️ 快捷键说明

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