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

📄 text2.lst

📁 RS485通讯代码,主机从机都有,调试通过绝对可以用
💻 LST
字号:
C51 COMPILER V7.08   TEXT2                                                                 05/21/2008 21:43:27 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include <string.h>
   3          #include <intrins.h>
   4          
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          #define COUNT 10
   8          #define NODE_ADDR 64
   9          sbit   SID   =  P1^3;   //数据
  10          sbit   SCLK  =  P1^4;   //时钟
  11          sbit   P15=P1^5;
  12          unsigned char buffer[COUNT];
  13          int pointer;
  14          
  15          void lcm_w_word(unsigned char *str) ;  //写字符  例:lcm_w_word("您好!");
  16          void lcm_w_test(bit start,unsigned char ddata);  //(0,指令) (1,数据)
  17          void lcm_w_byte(unsigned char bbyte);  //写一个字节给lcm
  18          void delaynms(unsigned int di);  //延时
  19          void lcm_init(void); //lcm初始化
  20          void lcm_clr(void);  //清屏
  21          
  22          
  23          
  24          void DelayM(unsigned int a);
  25          void DelayM(unsigned int a){//延时函数 1MS/次   
  26   1                      unsigned char i;
  27   1                      while( --a != 0){               
  28   2                              for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
  29   2                      }                                  //i 从0加到125,CPU大概就耗时1毫秒
  30   1      }
  31          
  32          /**********************************************************************/
  33          //延迟函数 11us
  34          void delay(int t)
  35          {
  36   1      for(;t>0;t--);
  37   1      }
  38          /****************************************************************************/
  39          //初始化LCM
  40          void lcm_init(void)      {
  41   1              delaynms(100); //启动等待,等LCM讲入工作状态
  42   1              lcm_w_test(0,0x30);  //8 位介面,基本指令集
  43   1              lcm_w_test(0,0x0c);  //显示打开,光标关,反白关
  44   1              lcm_w_test(0,0x01);  //清屏,将DDRAM的地址计数器归零 
  45   1              delaynms(100); //启动等待,等LCM讲入工作状态
  46   1       
  47   1      }
  48          /******************************************************************************/
  49          //写指令或数据  (0,指令) (1,数据)
  50          void lcm_w_test(bit start, unsigned char ddata) {
  51   1              unsigned char start_data,Hdata,Ldata;
  52   1              if(start==0) 
  53   1                      start_data=0xf8;         //0:写指令
  54   1          else    
  55   1              start_data=0xfa;  //1:写数据
C51 COMPILER V7.08   TEXT2                                                                 05/21/2008 21:43:27 PAGE 2   

  56   1        
  57   1              Hdata=ddata&0xf0;                 //取高四位
  58   1              Ldata=(ddata<<4)&0xf0;  //取低四位
  59   1              lcm_w_byte(start_data);   //发送起始信号
  60   1              delaynms(5); //延时是必须的
  61   1              lcm_w_byte(Hdata);            //发送高四位
  62   1              delaynms(5);  //延时是必须的
  63   1              lcm_w_byte(Ldata);                //发送低四位
  64   1              delaynms(5);  //延时是必须的
  65   1      }
  66          
  67          /******************************************************************************/
  68          //发送一个字节(底层函数)
  69          void lcm_w_byte(unsigned char bbyte) {
  70   1              unsigned char i;
  71   1              for(i=0;i<8;i++){
  72   2                      SID=bbyte&0x80; //取出最高位
  73   2                      SCLK=1;
  74   2                      SCLK=0;
  75   2                      bbyte<<=1; //左移
  76   2              }  
  77   1      }
  78          
  79          /******************************************************************************/
  80          //延时(LCM占用)
  81          void delaynms(unsigned int di) {
  82   1              unsigned int da,db;
  83   1              for(da=0;da<di;da++);
  84   1                      for(db=0;db<10;db++);
  85   1      }
  86                  
  87          /*****************************************************************************/
  88          //清屏函数
  89          void lcm_clr(void){
  90   1              lcm_w_test(0,0x01);
  91   1              delaynms(40); //启动等待,等LCM讲入工作状态
  92   1      
  93   1      }
  94          
  95          /*****************************************************************************/
  96          //向LCM发送一个字符串,长度64字符之内。
  97          //应用:lcm_w_word("您好!"); 
  98          void lcm_w_word(unsigned char *str){
  99   1                      while(*str != '\0'){
 100   2                              lcm_w_test(1,*str++);
 101   2              }
 102   1                      *str = 0;
 103   1      }
 104          
 105          
 106          main()
 107          {       
 108   1              int i=0;
 109   1              lcm_init();//初始化液晶显示器
 110   1              lcm_w_word("上位机为");
 111   1      //      for(i;i<11;i++)
 112   1      //      {lcm_w_test(1,buffer[i]);}
 113   1              P15=0;
 114   1              SCON=0xf0;
 115   1              TMOD=0x20;
 116   1              TH1=0xfd;
 117   1              TR1=1;
C51 COMPILER V7.08   TEXT2                                                                 05/21/2008 21:43:27 PAGE 3   

 118   1              ET1=0;
 119   1              ES=1;
 120   1              EA=1;
 121   1              pointer=0;
 122   1      
 123   1              while(pointer<COUNT);
 124   1              
 125   1              for(i;i<4;i++)
 126   1              {lcm_w_test(1,buffer[i]);}
 127   1              lcm_w_word("度");
 128   1              {DelayM(100);}
 129   1      
 130   1      }
 131          
 132          void receive(void) interrupt 4 using 3
 133          {
 134   1              RI=0;
 135   1              if(RB8==1)
 136   1              {
 137   2                      if(SBUF==NODE_ADDR) SM2=0;
 138   2                      return;
 139   2              }
 140   1              buffer[pointer++]=SBUF;
 141   1              if(pointer>=COUNT)
 142   1                      {
 143   2                      SM2=1;
 144   2                      }
 145   1       //     lcm_w_test(1,buffer[pointer]);
 146   1      
 147   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    414    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12       9
   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 + -