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

📄 text1.lst

📁 用Keil写的LPC938I2C通讯程序
💻 LST
字号:
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 08:54:36 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND TABS(2)

line level    source

   1          #include <REG938.h>
   2          #include <intrins.h>
   3          
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          #define _Nop()  _nop_()
   7          #define GENERATE_STOP        0x54     /* 置位 STO, 复位 STA 、 SI          */
   8          #define RELEASE_BUS_ACK      0x44     /* 复位 STO,STA,SI 并置位  AA (ack)  */
   9          #define RELEASE_BUS_NOACK    0x40     /* 复位 STO,STA,SI 并置位 AA (noack) */
  10          #define RELEASE_BUS_STA      0x64     /* 起动总线/重新起动总线, 置位 STA   */
  11          
  12          
  13          //定义变量
  14          sbit rt12864_sid = P1^1;  //数据
  15          sbit rt12864_clk = P1^0;  //时钟
  16          
  17          extern uchar byte[20];
  18          
  19          //void display(uchar *put);
  20          bit RcvByte(uchar *c);
  21          void rt12864_initialization(void);
  22          void dally_timer1(uint data ms);
  23          void rt12864_write1(uchar data TMP1);
  24          void rt12864_write(uchar data LCD_COMMAND,uchar data LCD_TMP);
  25          void rt12864_initialization(void);
  26          void lcd12232_zfc(uchar row,uchar tier,uchar *puts);
  27          void rt12864_clear(void);
  28          
  29          
  30          uchar code AC_TABLE[]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
  31                                  0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
  32                                  0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行汉字位置
  33                                  0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f};     //第四行汉字位置
  34          
  35          uchar code lcd_tab[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
  36                                  0x41,0x42,0x43,0x44,0x45,0x46};
  37          
  38          
  39          /********************************************************************
  40          使用定时器1延时n毫秒
  41          ********************************************************************/
  42          void dally_timer1(uint data ms)
  43          {
  44   1        uint i;
  45   1        TR1=1;//启动定时器T1
  46   1        for(i=ms*25;i>0;i--)
  47   1        {
  48   2          while(TF1==0)
  49   2          {
  50   3            _Nop();
  51   3          };
  52   2          TF1=0;//清除T1溢出标志TF1
  53   2        }
  54   1        TR1=0;//关闭定时器T1
  55   1      }
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 08:54:36 PAGE 2   

  56          
  57          /****************************************************************************
  58          * 名称:rt12864_write()
  59          * 功能:LCD读写子程序。
  60          * 入口参数:LCD_COMMAND, LCD_DATA
  61          * 出口参数:无
  62          ****************************************************************************/
  63          /**------------------------------------------------------------------------**/
  64          void rt12864_write1(uchar data TMP1)
  65          {
  66   1        uchar data i,TMP;
  67   1        for(i=8;i>0;i--)
  68   1        {
  69   2          TMP=(TMP1&(0x01<<(i-1)))>>(i-1);//取数据第7-0位
  70   2          if(TMP==0)
  71   2          {
  72   3            rt12864_sid = 0;    //第i位为0,lcd数据为0
  73   3          }
  74   2          if(TMP==1)
  75   2          {
  76   3            rt12864_sid = 1;    //第i位为1,lcd数据为1 
  77   3          } 
  78   2          rt12864_clk = 0;      //lcd时钟产生一个上升沿
  79   2          _Nop();
  80   2          _Nop();
  81   2          rt12864_clk = 1;      
  82   2        }
  83   1      }
  84            
  85          
  86          /**-----------------------------------------------------------------------**/
  87          void rt12864_write(uchar data LCD_COMMAND,uchar data LCD_TMP)
  88          {
  89   1        uchar data TMP1;
  90   1        TMP1=LCD_COMMAND;                  //发送lcd指令
  91   1        rt12864_write1(TMP1);
  92   1        TMP1=LCD_TMP&0xF0;                //发送lcd指令或数据高4位
  93   1        rt12864_write1(TMP1);
  94   1        TMP1=(LCD_TMP&0x0F)<<4;           //发送lcd指令或数据低4位
  95   1        rt12864_write1(TMP1);
  96   1      }
  97          
  98          /****************************************************************************
  99          * 名称:LCDInit()
 100          * 功能:LCD初始化子程序。
 101          * 入口参数:无
 102          * 出口参数:无
 103          ****************************************************************************/
 104          void rt12864_initialization(void)
 105          {
 106   1        rt12864_write(0xf8,0x01);   //清屏命令
 107   1        dally_timer1(40);
 108   1        rt12864_write(0xf8,0x30);   //基本指令集
 109   1        dally_timer1(40);
 110   1        rt12864_write(0xf8,0x02);   //游标归零命令
 111   1        dally_timer1(40);
 112   1        rt12864_write(0xf8,0x04);   //
 113   1        dally_timer1(40);
 114   1        rt12864_write(0xf8,0x0c);   //
 115   1        dally_timer1(40);
 116   1        rt12864_write(0xf8,0x01);   //
 117   1        dally_timer1(40);
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 08:54:36 PAGE 3   

 118   1        rt12864_write(0xf8,0x80);   //
 119   1        dally_timer1(40);
 120   1      }
 121          
 122          void lcd12232_zfc(uchar row,uchar tier,uchar *puts)
 123          {
 124   1        uchar data tmp;
 125   1        tmp = AC_TABLE[8*row+tier];
 126   1        rt12864_write(0xf8,tmp);
 127   1        while(*puts != '\0')                  //等待传送结束
 128   1        {
 129   2          rt12864_write(0xfa,*puts);              //
 130   2          puts++;
 131   2        }
 132   1      }
 133          
 134          /***************************************************************
 135          *             接收字节函数
 136          * 功能:读取总线传来的字节数据并发送应答位,正常接收返回1。
 137          * 入口参数:c   此时读入的数据变量的地址
 138          * 出口参数:接收到总线结束信号或重新启动总线信号时返回0
 139          ***************************************************************/
 140          bit RcvByte(uchar *c)
 141          { 
 142   1        I2CON = RELEASE_BUS_ACK;        /* 清除标志位       */
 143   1        while( SI==0 );           /* 放开总线,等待接收   */
 144   1        if(I2STAT==0xA0)        /* 接收到停止位或重新启动位 */
 145   1        { 
 146   2          I2CON = RELEASE_BUS_ACK;    /* 先放开总线,再返回0    */
 147   2          return(0);
 148   2        }
 149   1        *c = I2DAT;               /* 取数据         */
 150   1        return(1);
 151   1      }
 152          
 153          
 154          void intermit ()interrupt 7
 155          { 
 156   1        uchar byte[10]="";
 157   1        bit tmp;
 158   1        do
 159   1        {
 160   2          tmp=RcvByte(byte);
 161   2        }while(!tmp);
 162   1      
 163   1        lcd12232_zfc(0,0,byte);
 164   1        I2CON=I2CON&0xF8;//清除中断标志
 165   1        return;
 166   1      }
 167          
 168          void main()
 169          {
 170   1        uchar byte1[]="扬州电力设备修造";
 171   1        P0M1=0x00;
 172   1        P0M2=0x00;
 173   1        P1M1=0x0C;//P1.2,P1.3配置为开漏,其他为双向I/O口
 174   1        P1M2=0x0C;
 175   1        P3M1=0x00;
 176   1        P3M2=0x00;
 177   1      
 178   1        P0=0xff;
 179   1        P1=0xff;
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 08:54:36 PAGE 4   

 180   1        P3=0xff;
 181   1      
 182   1        SP=0x7F;
 183   1      
 184   1        TMOD=0x20;//T1工作方式2
 185   1        TAMOD=0x00;
 186   1        TL1=0x6C;//装入T1初值
 187   1        TH1=0x6C;
 188   1      
 189   1        I2CON=0x44;//从接收器模式初始化
 190   1        I2STAT=0;
 191   1        I2ADR=0x70;//从机地址为70h
 192   1        I2SCLH=0x0E;//数据波特率为123Kbit/s
 193   1        I2SCLL=0x0E;
 194   1        
 195   1        rt12864_initialization();
 196   1        dally_timer1(40);
 197   1        
 198   1        IEN0=0x80;//开总中断
 199   1        IEN1=0x01;//开I2C中断
 200   1         
 201   1        while(1)
 202   1        {
 203   2          lcd12232_zfc(1,0,byte1);
 204   2          dally_timer1(40);
 205   2        }
 206   1        
 207   1      }
 208          
 209          
 210          
 211          
 212          
 213          
 214          
 215          
 216          
 217          
 218          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    463    ----
   CONSTANT SIZE    =     75    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      30
   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 + -