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

📄 receive.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   RECEIVE                                                               08/18/2007 13:32:16 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 key_table[16]={15,0,14,13,7,8,9,12,4,5,6,11,1,2,3,10};
  34           /*****************读按键***************/
  35          uchar getkey()
  36          {
  37   1          uchar keycode=0xff,temp,i;
  38   1          key_bus=0x0f;
  39   1          temp=key_bus&0x0f; 
  40   1          if(temp!=0x0f)              //有键按下
  41   1          {
  42   2              key_bus=0x7f;
  43   2              for(i=0;i<4;i++)
  44   2              {
  45   3                  temp=key_bus&0x0f;
  46   3                  if(temp==0x07)
  47   3                  {    
  48   4                      keycode=i*4;
  49   4                      break;
  50   4                      }
  51   3                  else if(temp==0x0b)
  52   3                      {
  53   4                      keycode=i*4+1;
  54   4                      break;
  55   4                      }
C51 COMPILER V8.02   RECEIVE                                                               08/18/2007 13:32:16 PAGE 2   

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

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

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

 242   3                       lcd_wrcmd(1);
 243   3                       lcd_wrcmd(0x80);
 244   3                       break;
 245   3                 }
 246   2                }
 247   1      
 248   1       }
 249          
 250          welcome()
 251          {
 252   1             
 253   1             uchar temp=0x12,w;
 254   1             lcd_wrcmd(0x0c);
 255   1             lcd_wrcmd(0x82); 
 256   1                
 257   1             for(w=0;w<strlen(str2);w++)
 258   1                  lcd_wrdata(str2[w]);
 259   1             lcd_h();

⌨️ 快捷键说明

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