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

📄 1602-chuankou.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   1602_CHUANKOU                                                         06/29/2010 13:27:06 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 1602_CHUANKOU
OBJECT MODULE PLACED IN 1602-chuankou.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE 1602-chuankou.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /***************************************************************
   2                                                  “天祥电子”            倾情奉献
   3                                                                  www.txmcu.com
   4                                                                  www.txmcu.cn
   5          *****************************************************************
   6          串行通迅     LCD1602显示                                                        *
   7          * 作者: 郭天祥 (Email: txmcu@163.com)                                  *
   8          * 网站: www.tx-power.com(天祥电子)                                     *
   9          * 邮箱: txmcu@163.com                                                  *
  10          *【版权】Copyright(C)天祥电子 www.tx-power.com  All Rights Reserved     *
  11          *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!             *
  12          *************************************************************************
  13          * 描述:                                                                *
  14          *   主机发送123456给单片机,单片机接收到数据后发送TX-MCU给主机。        *
  15          *   主机发送其它数据给单片机,单片机接收到数据后,再发送给主机。        *
  16          *   LCD1602显示接收数据的ASCII码。  波特率9600                          *
  17          *   注:当单片机收到数据只有凑够16个时才会一次在液晶上显示出来          *
  18          ************************************************************************/
  19          
  20          #include <reg52.h>
  21          #include <intrins.h>
  22                  
  23          #define uchar  unsigned char 
  24          #define uint   unsigned int
  25          
  26          sbit LCD_RS = P3^5;             
  27          sbit LCD_EN = P3^4;
  28          
  29          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  30          
  31          
  32          uchar data  RXDdata[ ] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  33                                    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20 };
  34          uchar temp,buf,m,count;
  35          
  36          bit   playflag=0;
  37          
  38          uchar code  cdis1[ ] = {" SERILA TRANFER "};
  39          uchar code  cdis2[ ] = {"                "};
  40          
  41          /**********************************************************
  42          
  43           延时子程序
  44          
  45          **********************************************************/
  46          void delay1(uint ms) 
  47          
  48          {
  49   1         uchar k;
  50   1         while(ms--)
  51   1         {
  52   2           for(k = 0; k < 120; k++);
  53   2         }
  54   1      }
  55          
C51 COMPILER V8.02   1602_CHUANKOU                                                         06/29/2010 13:27:06 PAGE 2   

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

 118          /*******************************************************************/
 119          void lcd_init()
 120          { 
 121   1          delay1(15);   
 122   1          lcd_wcmd(0x01);      //清除LCD的显示内容            
 123   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 124   1          delay1(5);
 125   1          lcd_wcmd(0x38);         
 126   1          delay1(5);
 127   1          lcd_wcmd(0x38);         
 128   1          delay1(5);
 129   1      
 130   1          lcd_wcmd(0x0c);      //开显示,显示光标,光标闪烁
 131   1          delay1(5);
 132   1      
 133   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 134   1          delay1(5);
 135   1      }
 136          
 137          /*******************************************************************/
 138          /*                                                                 */
 139          /*  设定显示位置                                                   */
 140          /*                                                                 */
 141          /*******************************************************************/
 142          
 143          void lcd_pos(uchar pos)
 144          {                          
 145   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 146   1      }
 147          
 148          /*********************************************************
 149          
 150            发送数据函数
 151          
 152          *********************************************************/
 153          void senddata(uchar dat)
 154          {
 155   1           SBUF =dat;
 156   1           while(!TI);
 157   1           TI = 0;
 158   1      }
 159          
 160          /*********************************************************
 161          
 162            串行中断服务函数
 163          
 164          *********************************************************/
 165          void  serial() interrupt 4 
 166          {
 167   1         ES = 0;                //关闭串行中断
 168   1         RI = 0;                //清除串行接受标志位
 169   1         buf = SBUF;            //从串口缓冲区取得数据
 170   1           
 171   1         switch(buf)
 172   1         {
 173   2            case 0x31:  senddata('T');break;  //接受到1,发送字符'T'给计算机         
 174   2            case 0x32:  senddata('X');break;  //接受到2,发送字符'X'给计算机       
 175   2            case 0x33:  senddata('-');break;  //接受到3,发送字符'-'给计算机       
 176   2            case 0x34:  senddata('M');break;  //接受到4,发送字符'M'给计算机       
 177   2            case 0x35:  senddata('C');break;  //接受到5,发送字符'C'给计算机           
 178   2            case 0x36:  senddata('U');break;  //接受到5,发送字符'U'给计算机                  
 179   2            default:    senddata(buf);break;  //接受到其它数据,将其发送给计算机         
C51 COMPILER V8.02   1602_CHUANKOU                                                         06/29/2010 13:27:06 PAGE 4   

 180   2         }
 181   1      
 182   1         if(buf!=0x0D)
 183   1         {   
 184   2           if(buf!=0x0A)
 185   2           { 
 186   3             temp =buf;
 187   3             if(count<16)
 188   3             {         
 189   4               RXDdata[count]=temp;
 190   4               count++;
 191   4                       if(count==16)
 192   4                              playflag=1;
 193   4             }
 194   3           } 
 195   2         }
 196   1         ES = 1;    //允许串口中断
 197   1      }
 198          
 199          /*********************************************************
 200          
 201            数据显示函数
 202          
 203          *********************************************************/
 204          void  play()
 205          {
 206   1         if(playflag)
 207   1         { 
 208   2           lcd_pos(0x40);           //设置位置为第二行
 209   2           for(m=0;m<16;m++) 
 210   2           {
 211   3                      lcd_wdat(cdis2[m]);      //清LCD1602第二行
 212   3                      delay1(5);
 213   3               }
 214   2               lcd_pos(0x40);           //设置位置为第二行
 215   2           for(m=0;m<16;m++)
 216   2           {
 217   3          //   lcd_pos(0x40+m);       //设置显示位置为第二行
 218   3             lcd_wdat(RXDdata[m]);  //显示字符 
 219   3                 delay1(5);
 220   3           }
 221   2      
 222   2           playflag=0;              
 223   2           count=0x00;
 224   2      
 225   2           for(m=0;m<16;m++)      
 226   2           {
 227   3                      RXDdata[m]=0x20;         //清显存单元    
 228   3                      delay1(5);
 229   3               }
 230   2         }               
 231   1      }
 232          
 233          /*********************************************************
 234          
 235            主函数
 236          
 237          *********************************************************/
 238          void main(void) 
 239          {
 240   1          P0 = 0xff;
 241   1          P2 = 0xff;         
C51 COMPILER V8.02   1602_CHUANKOU                                                         06/29/2010 13:27:06 PAGE 5   

 242   1          
 243   1          SCON=0x50;           //设定串口工作方式
 244   1          PCON=0x00;           //波特率不倍增
 245   1                              
 246   1          TMOD=0x20;           //定时器1工作于8位自动重载模式, 用于产生波特率
 247   1          EA=1;
 248   1          ES = 1;              //允许串口中断
 249   1          TL1=0xfd;
 250   1          TH1=0xfd;             //波特率9600
 251   1          TR1=1;
 252   1      
 253   1          lcd_init();
 254   1          lcd_pos(0x00);        //设置显示位置为第一行
 255   1          for(m=0;m<16;m++) 
 256   1          {
 257   2                      lcd_wdat(cdis1[m]);   //显示字符
 258   2                      delay1(5);
 259   2              }
 260   1          lcd_pos(0x40);        //设置显示位置为第二行
 261   1          for(m=0;m<16;m++) 
 262   1          {
 263   2                      lcd_wdat(cdis2[m]);   //显示字符            
 264   2                      delay1(5);
 265   2              }
 266   1          while(1)        
 267   1          {
 268   2            play();       
 269   2          }
 270   1      }
 271          
 272          /*********************************************************/ 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    437    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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