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

📄 lyd.lst

📁 基于测距式的超声波测距仪
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   LYD                                                                   04/22/2008 11:38:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LYD
OBJECT MODULE PLACED IN lyd.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE lyd.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1             
   2                      /*===========================================================================
   3                      
   4                                              KS0070(44780) 16x2 字符液晶屏驱动演示程序总线方式         晓奇
   5                      =============================================================================
   6                      连接线图:       LCM-------51    LCM-------51    LCM--------51
   7                                      DB0-----P0.0    DB4-----P0.4    RW-------P2.0
   8                                     DB1-----P0.1    DB5-----P0.5    RC-------P2.1
   9                                      DB2-----P0.2    DB6-----P0.6    E--------P2.7 =>74ls00+wr+rd
  10                                    DB3-----P0.3    DB7-----P0.7    VLCD接1K2电阻到GND
  11                     
  12                      [注]:AT89C51的晶振频率为12MHz
  13                      ============================================================================*/
  14                                                                          // 产生汇编文件
  15                     #include <reg51.h>
  16                     #include<intrins.h> //#pragma src      
  17                     
  18                     //========= 变量类型标识的宏定义,大家都喜欢这么做 ==============
  19                      #define Uchar unsigned char
  20                      #define Uint unsigned int
  21                     
  22                      // ================= LCM1602A端口地址定义 =======================
  23                     char xdata Lcd1602CmdPort _at_ 0x8cff;          //E=1 RS=0 RW=0
  24                     char xdata Lcd1602WdataPort _at_ 0x8dff;        //E =1 RS=1 RW=0
  25                     char xdata Lcd1602StatusPort _at_ 0x8eff;       //CS=1 RS=0 RW=1
  26                     
  27                             
  28                     unsigned long temp1=0;
  29                             unsigned int dis=0,i;                                                                                                                                                                         
  30                             unsigned int counter=0;        /*等待1ms的计数位                                                                             */
  31                     bit disable_flag;              /*距离太远无法测量标志,    1:太远不可测; 0:可测   */
  32                     bit receive_flag;              /*接收标志位                1:收到;       0:没收到 */
  33                     sbit transmit=P1^1;            /*发送控制                  1:发;         0:停     */
  34                     sbit reset=P1^2;               /*接收触发器复位,0复位,下一个1时允许中断,后又必须复位*/
  35          
  36                             
  37                      #define Busy    0x80                                            // 忙判别位
  38                     
  39                      code char exampl[]= "No success!                 ";
  40                                  code char examp2[]= "Dis is:       cm";
  41                                  code char examp3[]= "Waiting.....";
  42          
  43                      void Delay400Ms(void);
  44                      void Delay5Ms(void);
  45                      void LcdWriteData( char dataW );
  46                      void LcdWriteCommand( Uchar CMD,Uchar AttribC );
  47                      void LcdReset( void );
  48                      void Display( Uchar dd );
  49                      void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
  50                      void ePutstr(Uchar x,Uchar y, Uchar code *ptr);
  51                                  void DispNumber(Uint Num);
  52                     
  53                      /*=======================================================
  54                       显示字符串
  55                      =======================================================*/
C51 COMPILER V8.02   LYD                                                                   04/22/2008 11:38:52 PAGE 2   

  56                     void ePutstr(Uchar x,Uchar y, Uchar code *ptr) {
  57   1                 Uchar i,l=0;
  58   1                      while (ptr[l] >31){l++;};
  59   1                      for (i=0;i<l;i++) {
  60   2                              DispOneChar(x++,y,ptr[i]);
  61   2                              if ( x == 16 ){
  62   3                                      x = 0; y ^= 1;
  63   3                              }
  64   2                      }
  65   1              }
  66                     
  67                      /*=======================================================
  68                      演示一行连续字符串,配合上位程序演示移动字串
  69                      =======================================================*/
  70                   void Display( Uchar dd ) {
  71   1              
  72   1              Uchar i;
  73   1                      
  74   1                      for (i=0;i<16;i++) {
  75   2              
  76   2                              DispOneChar(i,1,dd++);
  77   2                              
  78   2                              dd &= 0x7f;
  79   2                              if (dd<32) dd=32;
  80   2                      }
  81   1              }
  82                     
  83                    /*=======================================================
  84                      显示光标定位
  85                     =======================================================*/
  86                    void LocateXY( char posx,char posy) {
  87   1             
  88   1             Uchar temp;
  89   1            
  90   1                     temp = posx & 0x0f;//取底四位
  91   1                     posy &= 0x1;//取最后一位
  92   1                     if ( posy )temp |= 0x40;
  93   1                     temp |= 0x80;
  94   1                     LcdWriteCommand(temp,0);      
  95   1             }
  96                     
  97                    /*=======================================================
  98                      按指定位置显示数出一个字符
  99                                                                   
 100          
 101                    =======================================================*/
 102                   void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {
 103   1             
 104   1                     LocateXY( x, y );                               // 定位显示地址
 105   1                     LcdWriteData( Wdata );                  // 写字符
 106   1            }
 107                     
 108                     /*=======================================================
 109                     初始化程序, 必须按照产品资料介绍的初始化过程进行
 110                    =======================================================*/
 111                    void LcdReset( void ) {
 112   1            
 113   1                    LcdWriteCommand( 0x38, 0);                      // 显示模式设置(不检测忙信号)
 114   1                             Delay5Ms();
 115   1                     LcdWriteCommand( 0x38, 0);                      // 共三次
 116   1                             Delay5Ms();
 117   1                     LcdWriteCommand( 0x38, 0);
C51 COMPILER V8.02   LYD                                                                   04/22/2008 11:38:52 PAGE 3   

 118   1                             Delay5Ms();
 119   1             
 120   1                    LcdWriteCommand( 0x38, 1);                      // 显示模式设置(以后均检测忙信号)
 121   1                 LcdWriteCommand( 0x08, 1);                  // 显示关闭
 122   1                     LcdWriteCommand( 0x01, 1);                      // 显示清屏
 123   1                     LcdWriteCommand( 0x06, 1);                      // 显示光标移动设置
 124   1                     LcdWriteCommand( 0x0c, 1);                      // 显示开及光标设置
 125   1             }
 126                     
 127                    /*=======================================================
 128                     写控制字符子程序: E=1 RS=0 RW=0
 129                     =======================================================*/
 130                     void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {
 131   1            
 132   1                     if (AttribC)  while( Lcd1602StatusPort & Busy );         // 检测忙信号?
 133   1                     Lcd1602CmdPort = CMD;
 134   1             }
 135                            
 136                     /*=======================================================
 137                     当前位置写字符子程序: E =1 RS=1 RW=0
 138                     =======================================================*/
 139                     void LcdWriteData( char dataW ) {
 140   1            
 141   1                     while( Lcd1602StatusPort & Busy );                                      // 检测忙信号
 142   1                      Lcd1602WdataPort = dataW;
 143   1             }//  
 144                     
 145                     // 短延时
 146                     void Delay5Ms(void)
 147                     {
 148   1                     Uint i = 5552;
 149   1                     while(i--);
 150   1             }
 151                    
 152                     //长延时
 153                     void Delay400Ms(void)                       
 154                     {
 155   1                     Uchar i = 5;

⌨️ 快捷键说明

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