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

📄 chuankou.lst

📁 串口双工通讯
💻 LST
字号:
C51 COMPILER V8.02   CHUANKOU                                                              07/31/2008 11:10:05 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CHUANKOU
OBJECT MODULE PLACED IN chuankou.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE chuankou.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********************************************************************
   2          函数名称:串口通信
   3          函数功能:实现串口半双工通信
   4          说明:主机发送1-8数字是可控制单片机LED点亮
   5                    主机发送的单个字符可在LCD 上显示
   6                    主机发送的数据可原样返回
   7                    单片机P3_2---P3_7可向主机发送字符
   8          李灿松
   9          2008.7.20
  10          ***********************************************************************/
  11          #include<reg52.h>
  12          #include<intrins.h>
  13          #include<absacc.h>
  14          #define uchar unsigned char
  15          #define L1602_DB0_DB7 P0             //定义1602的数据总线
  16          uchar code tab[10]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,} ;
  17          uchar code str[]={"I LOVE YOU FOR 10.2 "};
  18          uchar code hello[]={"hello:"};
  19          uchar data dat[4];
  20          sbit L1602_RS=P2^0;                  //定义1602得RS控制线
  21          sbit L1602_RW=P2^1;                  //定义1602得RW控制线
  22          sbit L1602_E=P2^2;                   //定义1602的E控制线
  23          sbit L1602_Busy=P0^7;                //定义1602的测忙线
  24          sbit P3_2=P3^2;
  25          sbit P3_3=P3^3;
  26          sbit P3_4=P3^4;
  27          sbit P3_5=P3^5;
  28          sbit P3_6=P3^6;
  29          sbit P3_7=P3^7;
  30          typedef bit BOOL ; 
  31          
  32          void init(void)
  33          {
  34   1              TMOD=0x20;                      //定时器1工作在方式2
  35   1              PCON=0x00;              //波特率不增倍
  36   1              SCON=0x50;                      //串行工作方式3                    
  37   1              TH1=0xFD;                   //SMOD=0时的初值
  38   1              TL1=0xFD;
  39   1              TR1=1;
  40   1      }
  41          
  42          /*void delay(void)
  43          {
  44                  int k;
  45                  for(k=0;k<800;k++);
  46          
  47          }
  48            */
  49          
  50          /**********************************************************************************************
  51          函数名称:显示函数
  52          函数功能:显示接受的数据
  53          说明:
  54          **********************************************************************************************/
  55          void display()
C51 COMPILER V8.02   CHUANKOU                                                              07/31/2008 11:10:05 PAGE 2   

  56          {
  57   1          uchar t_shi,t_ge,t_feng,t_miao;
  58   1          void LCM1602_Init();
  59   1              void print(uchar a,uchar *str);
  60   1              void print1(uchar a,uchar t);
  61   1              void LCM1602_Delay(uchar count);
  62   1      //    if(k==49)  P1=0xfe;
  63   1      //      else if(k==50)  P1=0xfd; 
  64   1      //      else if(k==51)  P1=0xfb;
  65   1      //      else if(k==52)  P1=0xf7;
  66   1      //      else if(k==53)  P1=0xef;
  67   1      //      else if(k==54)  P1=0xdf;
  68   1      //      else if(k==55)  P1=0xbf;
  69   1      //      else if(k==56)  P1=0x7f;
  70   1      //      else P1=0xff;
  71   1          t_shi=dat[0];t_ge=dat[1];t_feng=dat[2];t_miao=dat[3];
  72   1              LCM1602_Init();
  73   1              print(0x80,hello);
  74   1              print1(0xc0,t_shi);
  75   1              print1(0xc1,t_ge);
  76   1              print1(0xc2,t_feng);
  77   1              print1(0xc3,t_miao);
  78   1              LCM1602_Delay(5000);
  79   1      }
  80          
  81          
  82          void send_str()
  83          // 传送字串
  84          {
  85   1              unsigned char i = 0;
  86   1              while(str[i] != '\0')
  87   1              {
  88   2                      SBUF = str[i];
  89   2                      while(!TI);                             // 等特数据传送
  90   2                      TI = 0;                                 // 清除数据传送标志
  91   2                      i++;                                    // 下一个字符
  92   2              }       
  93   1      }
  94          
  95          /**********************************************************************************************
  96          函数名称:主函数
  97          函数功能:主函数
  98          说明:
  99          **********************************************************************************************/
 100          
 101          void main()
 102          {
 103   1              P2=0xff;
 104   1              P0=0xff;
 105   1              EA=1;
 106   1              ES=1;             //串行口中断开
 107   1              init();
 108   1              while(1)
 109   1              {
 110   2                      display();
 111   2                      if(P3_2==0)     
 112   2                      {
 113   3      //              SBUF='L';                  //发送
 114   3      //              while(TI==0);           //等待串口发送完毕      
 115   3      //                      TI=0;
 116   3                  send_str();
 117   3                              while(P3_2==0);         //等待按键放
C51 COMPILER V8.02   CHUANKOU                                                              07/31/2008 11:10:05 PAGE 3   

 118   3                      }
 119   2                      if(P3_3==0)     
 120   2                      {
 121   3                              SBUF='b';                  //发送
 122   3                              while(TI==0);           //等待串口发送完毕
 123   3                              TI=0;
 124   3                              while(P3_3==0);         //等待按键放
 125   3                      }
 126   2                      if(P3_4==0)     
 127   2                      {
 128   3                              SBUF='i';                  //发送
 129   3                              while(TI==0);           //等待串口发送完毕
 130   3                              TI=0;
 131   3                              while(P3_4==0);         //等待按键放
 132   3                      }
 133   2                      if(P3_5==0)     
 134   2                      {
 135   3                              SBUF='y';                  //发送
 136   3                              while(TI==0);           //等待串口发送完毕
 137   3                              TI=0;
 138   3                              while(P3_5==0);         //等待按键放
 139   3                      }
 140   2                      if(P3_6==0)     
 141   2                      {
 142   3                              SBUF='n';                  //发送
 143   3                              while(TI==0);           //等待串口发送完毕
 144   3                              TI=0;
 145   3                              while(P3_6==0);         //等待按键放
 146   3                      }
 147   2                      if(P3_7==0)     
 148   2                      {
 149   3                              SBUF='g';                  //发送
 150   3                              while(TI==0);           //等待串口发送完毕
 151   3                              TI=0;
 152   3                              while(P3_7==0);         //等待按键放
 153   3                      }
 154   2      
 155   2              }
 156   1       
 157   1      }
 158          
 159          serial () interrupt 4 using 1
 160          {
 161   1          int i;
 162   1              if(RI==1)
 163   1              {
 164   2                      RI=0;
 165   2                      for(i=0;i<4;i++)
 166   2                      {
 167   3                              dat[i]=SBUF;                    //接受
 168   3                  SBUF=dat[i];                   //发送       
 169   3                      }
 170   2                      while(TI==0);
 171   2                      TI=0;
 172   2              }
 173   1      }
 174          
 175          /**********************************************************************************************
 176          函数名称:延时函数
 177          函数功能:转换延时和显示延时
 178          说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
 179          **********************************************************************************************/
C51 COMPILER V8.02   CHUANKOU                                                              07/31/2008 11:10:05 PAGE 4   

 180          void delay(unsigned int delay_time) // 延时程序
 181          {
 182   1       while(delay_time--);
 183   1      }
 184          
 185          void LCM1602_Delay(uchar count)
 186          {
 187   1              uchar i;
 188   1              while(--count!=0)
 189   1                 {for(i=0;i<250;i++);}        
 190   1      }
 191          
 192          /**********************************************************************************************
 193          函数名称:初始化函数
 194          函数功能:液晶1602初始化
 195          说明:
 196          **********************************************************************************************/
 197          void  LCM1602_Init(void)
 198          {
 199   1       void LCM1602_WriteData(uchar LCM1602_data);
 200   1       void LCM1602_WriteCMD(uchar LCM1602_command);
 201   1       LCM1602_WriteCMD(0x38);    //显示两行,每个字符为5*7个像素
 202   1       delay(1);
 203   1       LCM1602_WriteCMD(0x06);    //光标移动设置,光标右移
 204   1       delay(1);
 205   1       LCM1602_WriteCMD(0x0c);    //现设开,光标开,闪烁开
 206   1       delay(1);
 207   1       LCM1602_WriteCMD(0x01);    //清屏
 208   1       delay(1);
 209   1      }
 210          void  print(uchar a,uchar *str)
 211          {
 212   1       void  LCM1602_WriteData(uchar LCM1602_data);
 213   1       void  LCM1602_WriteCMD(uchar LCM1602_command);
 214   1       LCM1602_WriteCMD(a);
 215   1       while(*str!='\0')
 216   1          {
 217   2          LCM1602_WriteData(*str++);
 218   2              }
 219   1       *str=0;
 220   1      }
 221          void print1(uchar a,uchar t)
 222          {
 223   1       LCM1602_WriteCMD(a);
 224   1       LCM1602_WriteData(t);
 225   1      }
 226          
 227          
 228          
 229          /**********************************************************************************************
 230          函数名称:写命令和写数据函数
 231          函数功能:向LCD写命令和数据
 232          说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
 233          **********************************************************************************************/
 234          void LCM1602_WriteCMD(uchar LCM1602_command)
 235          {
 236   1      BOOL lcd_bz();
 237   1      while(lcd_bz());        //测忙
 238   1      L1602_RS=0;
 239   1      L1602_RW=0;
 240   1      L1602_E=0;
 241   1      _nop_();
C51 COMPILER V8.02   CHUANKOU                                                              07/31/2008 11:10:05 PAGE 5   

 242   1      _nop_();
 243   1      L1602_DB0_DB7=LCM1602_command;
 244   1      _nop_();
 245   1      _nop_();_nop_();
 246   1      L1602_E=1;    //命令总送出
 247   1      _nop_();_nop_();_nop_();
 248   1      L1602_E=0; 
 249   1      }
 250          
 251          void LCM1602_WriteData(uchar LCM1602_data)
 252          {
 253   1      BOOL lcd_bz();
 254   1      while(lcd_bz());        //测忙
 255   1      L1602_RS=1;
 256   1      L1602_RW=0;
 257   1      L1602_E=0;
 258   1      L1602_DB0_DB7=LCM1602_data;
 259   1      _nop_();
 260   1      _nop_();
 261   1      _nop_();
 262   1      _nop_();
 263   1      L1602_E=1;   //数据送出
 264   1      _nop_();
 265   1      _nop_();
 266   1      _nop_();
 267   1      L1602_E=0;
 268   1      }
 269          
 270          
 271          /**********************************************************************************************
 272          函数名称:LCD检测忙函数
 273          函数功能:检测LCD是否处于忙状态
 274          说明: 
 275          **********************************************************************************************/
 276          BOOL lcd_bz()
 277          {                                                       // 测试LCD忙碌状态
 278   1              BOOL result;
 279   1              L1602_RS=0;
 280   1          L1602_RW=1;
 281   1          L1602_E=1;
 282   1              _nop_();
 283   1              _nop_();
 284   1              _nop_();
 285   1              _nop_();
 286   1              result = (BOOL)(P0 & 0x80);
 287   1              L1602_E = 0;
 288   1              return result;  
 289   1      }
 290          /**********************************************************************************************/ 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    446    ----
   CONSTANT SIZE    =     38    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      10
   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 + -