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

📄 receive.lst

📁 温度遥测系统程序,半双工的,已经调试成功了
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   RECEIVE                                                               08/23/2007 14:37:00 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE RECEIVE
OBJECT MODULE PLACED IN receive.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\uv3\C51\BIN\C51.EXE receive.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include   <reg51.h>
   2          #include   <intrins.h>
   3          #include<string.h>
   4          #include<stdio.h>
   5          #include<math.h>
   6          #define uint unsigned int
   7          #define uchar unsigned char
   8          #define lcd_bus P1
   9          #define key_bus P0
  10          sbit rt=P2^4;
  11          sbit enable=P2^7;
  12          sbit beep=P2^5;
  13          // lcd
  14          sbit rs=P2^0;
  15          sbit rw=P2^1;
  16          sbit e =P2^2;
  17          uchar offset=0x80;
  18          uchar   inte; //整数部分
  19          uchar   dec;   //小数部分
  20          uint   detemp;                    //年月摄氏度 
  21          uchar state=0; 
  22          uchar  TLL;
  23          uchar  THH;  
  24          uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,  
  25                              0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,  
  26                             0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00,
  27                     0x06,0x08,0x10,0x10,0x10,0x08,0x06,0x00};  
  28           uchar code str1[]="temperature  is:";
  29           uchar code str2[]="welcome";
  30           uchar code str3[]="1:temperature";
  31           uchar code str4[]="2:INPUT TL";
  32           uchar code str5[]="3:INPUT TH";
  33           uchar code str6[]="4:send";
  34           uchar code str7[]="sending";
  35           uchar  code key_table[16]={15,0,14,13,7,8,9,12,4,5,6,11,1,2,3,10};
  36           /*****************读按键***************/
  37          uchar getkey()
  38          {
  39   1          uchar keycode=0xff,temp,i;
  40   1          key_bus=0x0f;
  41   1          temp=key_bus&0x0f; 
  42   1          if(temp!=0x0f)              //有键按下
  43   1          {
  44   2              key_bus=0x7f;
  45   2              for(i=0;i<4;i++)
  46   2              {
  47   3                  temp=key_bus&0x0f;
  48   3                  if(temp==0x07)
  49   3                  {    
  50   4                      keycode=i*4;
  51   4                      break;
  52   4                      }
  53   3                  else if(temp==0x0b)
  54   3                      {
  55   4                      keycode=i*4+1;
C51 COMPILER V8.02   RECEIVE                                                               08/23/2007 14:37:00 PAGE 2   

  56   4                      break;
  57   4                      }
  58   3                  else if(temp==0x0d)
  59   3                      {
  60   4                      keycode=i*4+2;
  61   4                      break;
  62   4                      }
  63   3                  else if(temp==0x0e)
  64   3                      {
  65   4                      keycode=i*4+3;
  66   4                      break;
  67   4                      }
  68   3                  key_bus=(key_bus>>1)|0x80;
  69   3              }
  70   2      
  71   2               while((key_bus&0x0f)!=0x0f)   //等待释放
  72   2               {
  73   3                   key_bus=0x0f; 
  74   3               }
  75   2                                                      
  76   2           }
  77   1           return key_table[keycode];
  78   1      }       
  79          
  80          
  81          //////////////////////////////////////////
  82          delay(uchar d)
  83          {
  84   1              while(--d);
  85   1      }
  86          
  87          
  88          /**********判断忙标志,返回的是一个位BF**********/
  89          bit lcd_busy(void)
  90          {
  91   1              uchar bflag;     
  92   1              rs=0;
  93   1              rw=1;
  94   1              _nop_();
  95   1              e=1;
  96   1              _nop_();
  97   1              lcd_bus=0xff;
  98   1              bflag=lcd_bus;
  99   1              e=0;
 100   1              return(bit)(bflag&0x80);    //BF=1 busy   
 101   1      }
 102          
 103          
 104          
 105          /*********写命令,有两个参数,第一个是要写的命令控制字,
 106          第二个是用来控制是否进行忙标志的判断。
 107          busyflag=1:判断;为 0:不判断****************/
 108          void lcd_wrcmd(uchar cmd)
 109          {
 110   1              while(lcd_busy());
 111   1              lcd_bus=cmd;
 112   1              rs=0;
 113   1              rw=0;
 114   1              _nop_();
 115   1              e=1;
 116   1              _nop_();
 117   1              _nop_();
C51 COMPILER V8.02   RECEIVE                                                               08/23/2007 14:37:00 PAGE 3   

 118   1              e=0; 
 119   1      }
 120          
 121          
 122          /************向液晶片写数据***************/
 123          void lcd_wrdata( uchar lcddata)
 124          {
 125   1              while(lcd_busy());
 126   1              lcd_bus=lcddata;
 127   1              rs=1;
 128   1              rw=0;
 129   1              _nop_();
 130   1              e=1;
 131   1              _nop_();
 132   1              _nop_();
 133   1              e=0;
 134   1      }
 135          
 136          /****************初始化***************/
 137          void lcd_ini(void)
 138          {
 139   1              lcd_wrcmd(0x38); 
 140   1              delay(100);
 141   1              lcd_wrcmd(0x0c);
 142   1              delay(100);
 143   1              lcd_wrcmd(0x06);
 144   1              delay(100);
 145   1              lcd_wrcmd(0x01);
 146   1              delay(100);
 147   1      }
 148          
 149          //////////////////////////////////////////////
 150          //
 151          //    生成汉字子模函数
 152          //    当lcd_wrdata(0);显示第一个汉字
 153          //    当lcd_wrdata(1);显示第二个汉字
 154          //
 155          //////////////////////////////////////////////
 156          lcd_h()
 157          {
 158   1          uchar i;
 159   1          lcd_wrcmd(0x40);
 160   1          for(i=0;i<32;i++) lcd_wrdata(hanzi[i]);
 161   1      }
 162          
 163          
 164          receivedata()  interrupt 4  //接收中断
 165          {  uchar temp;     
 166   1        static bit flag_inte=0,flag_dec=0; //整数部分和小数部分的标志
 167   1         temp=SBUF;
 168   1                if(flag_dec==1)
 169   1           {
 170   2                dec=temp;              //接收小数部分
 171   2            flag_dec=0;           //  清除小数标志
 172   2           }
 173   1           if(flag_inte==1)
 174   1           {inte=temp;              //接收整数部分
 175   2            flag_inte=0;           //  清除整数标志
 176   2           }
 177   1           
 178   1         if(temp==0xfe) flag_dec=1;   //表示下面发送的是小数部分
 179   1         if(temp==0xff) flag_inte=1;  //表示下面发送的是整数部分
C51 COMPILER V8.02   RECEIVE                                                               08/23/2007 14:37:00 PAGE 4   

 180   1         
 181   1      
 182   1      
 183   1            RI=0;                  //清除中断标志
 184   1      }
 185          
 186          senddata(unsigned char dat)     //串口发送数据
 187          {SBUF=dat;
 188   1       while(TI==0);
 189   1       TI=0;
 190   1      }
 191          
 192          serial_init()             //串口初始化
 193          {
 194   1      
 195   1      
 196   1       SCON=0X50;         /* SCON: 串口方式1, 8位异步通信,接收使能*/ 
 197   1       TMOD=0x20;        /*波特率发生需用定时器1:TMOD: 定时器1, 8位自动重装 */ 
 198   1       PCON= 0x80;   //双倍时钟
 199   1       TH1=0xfd;         /* TH1:自动重装值,19200baud ,晶振11.0592MHz */ 
 200   1       TL1=0xfd; 
 201   1       TR1=1;           /* TR1:启动定时器1 */ 
 202   1       ES=1;
 203   1       EA=1;
 204   1      }
 205          
 206          
 207          
 208          void  tempdisplay(void)
 209          {   
 210   1         uchar i,r=0,j,iii;
 211   1         uchar stra[3];
 212   1         uchar  xiaoshu[4];
 213   1         lcd_wrcmd(0x0f);
 214   1                lcd_wrcmd(0x81);
 215   1             for(j=0;j<16;j++)lcd_wrdata(str1[j]);
 216   1                while(1)
 217   1            
 218   1             { if(inte<TLL||inte>=THH)
 219   2                beep=1;
 220   2                        else beep=0;
 221   2               detemp=dec*625;
 222   2               xiaoshu[0]=detemp/1000+'0';
 223   2               xiaoshu[1]=detemp%1000/100+'0';
 224   2               xiaoshu[2]=detemp%100/10+'0';
 225   2               xiaoshu[3]=detemp%10+'0';
 226   2      
 227   2              stra[0]=inte/100+'0';
 228   2              stra[1]=inte%100/10+'0';
 229   2             stra[2]=inte%10+'0';
 230   2             if(stra[0]=='0')
 231   2                r=1;
 232   2             lcd_wrcmd(0xc2+r);
 233   2             for(i=r;i<3;i++)
 234   2             lcd_wrdata(stra[i]);
 235   2              lcd_wrdata('.');
 236   2              for(i=0;i<4;i++)
 237   2              lcd_wrdata(xiaoshu[i]);
 238   2                      delay(100);
 239   2                 lcd_wrdata(2);
 240   2             lcd_wrdata(0x43);
 241   2               for(i=0;i<4;i++)
C51 COMPILER V8.02   RECEIVE                                                               08/23/2007 14:37:00 PAGE 5   

 242   2             lcd_wrdata(' ');
 243   2                 iii=getkey();
 244   2                   if(iii==1)
 245   2                       enable=!enable;
 246   2                   if(iii==13)
 247   2                {
 248   3                       state=1;
 249   3                       lcd_wrcmd(0x0c);
 250   3                       lcd_wrcmd(1);
 251   3                       lcd_wrcmd(0x80);
 252   3                       break;
 253   3                 }
 254   2                }
 255   1      
 256   1       }
 257          
 258          welcome()
 259          {
 260   1             
 261   1             uchar temp=0x12,w;
 262   1             lcd_wrcmd(0x0c);
 263   1             lcd_wrcmd(0x82); 
 264   1                
 265   1             for(w=0;w<strlen(str2);w++)
 266   1                  lcd_wrdata(str2[w]);
 267   1             lcd_h();
 268   1             lcd_wrcmd(0xc4);
 269   1             lcd_wrdata('2'); lcd_wrdata('0');lcd_wrdata('0');lcd_wrdata('7');
 270   1             lcd_wrdata(0);
 271   1             lcd_wrdata('0');lcd_wrdata('8');
 272   1             lcd_wrdata(1);
 273   1             while(1)
 274   1             {                                                           
 275   2                 temp=getkey();
 276   2                 if(temp>=0&&temp<=15)    //按任意键跳转
 277   2                 {
 278   3                     state=1;  
 279   3                     lcd_wrcmd(1);
 280   3                     break;
 281   3                 }
 282   2             }
 283   1      }
 284          
 285          menu()
 286          {
 287   1           uchar i,ii,cnt=1;
 288   1      
 289   1           lcd_wrcmd(0x83);
 290   1           for(i=0;i<strlen(str3);i++)
 291   1               lcd_wrdata(str3[i]);
 292   1           lcd_wrcmd(0xc3);
 293   1           i=0;
 294   1           while(str4[i]!='\0')

⌨️ 快捷键说明

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