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

📄 text1.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.20   TEXT1                                                                 08/13/2007 15:13:36 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<intrins.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          #define ulong  unsigned long
   6          /*****数据口定义****/
   7          #define lcd1602_bus P0  
   8          
   9          
  10          /*定义9850端口*/
  11          sbit sclk=P2^0;   //W_CLK
  12          sbit load=P2^1;   //FQUD
  13          sbit sdata=P2^2;  //DATA         
  14          
  15          /*******   引脚LCD定义           *****/
  16          sbit rs_1602=P2^5;           
  17          sbit rw_1602=P2^6;
  18          sbit e_1602=P2^7;
  19          
  20          sbit alarm=P0^0;
  21          
  22          
  23          sbit beep=P2^3;   //按键声音开关
  24          
  25          /******* TLC0838数据口定义         *******/
  26          sbit CS=P3^2;      //TLC0838---PIN18
  27          sbit DI=P3^3;      //TLC0838---PIN17
  28          sbit CLK=P3^4;     //TLC0838---PIN16
  29          sbit DO=P3^5;      //TLC0838---PIN14
  30          
  31                             //SE接成低电平
  32          uchar error=1;
  33          
  34          
  35          
  36          
  37          
  38          /*********延时子程序**********/
  39          void delay_1ms(uint t)
  40          {
  41   1         uint i,j;
  42   1         for(i=0;i<t;i++)
  43   1           for(j=0;j<120;j++);              
  44   1      }
  45          
  46          void delay(uchar t)
  47          {
  48   1              uchar i;
  49   1              while(t--)
  50   1              {
  51   2                      /* 对于11.0592M时钟,约延时1ms */
  52   2                      for (i=0;i<125;i++)
  53   2                      {}
  54   2              }
  55   1      } 
C51 COMPILER V7.20   TEXT1                                                                 08/13/2007 15:13:36 PAGE 2   

  56          
  57          
  58          
  59          
  60          
  61          
  62          
  63          /***********忙判断标志,返回一个位BF********************/
  64          bit lcd1602_busy(void)
  65          {
  66   1              uchar busy_flag;
  67   1              rs_1602=0;
  68   1              rw_1602=1;
  69   1              _nop_();
  70   1              e_1602=1;
  71   1              _nop_();
  72   1              lcd1602_bus=0xff;
  73   1              busy_flag=lcd1602_bus;   //e在高电平时读 
  74   1              e_1602=0;
  75   1              return (bit)(busy_flag&0x80);    //BF=1; BUSY  返回一个位
  76   1      }
  77          
  78          
  79          /********写命令,有两个参数,一个是要写的命令控制字,
  80          第二个是用来控制是否进行忙标志的判断。
  81          busyflag=1;
  82          判断: 为0 
  83          ***************/
  84          void lcd1602_wrcmd(unsigned char lcdcmd)
  85          {
  86   1              while(lcd1602_busy());     //等待空闲
  87   1              lcd1602_bus=lcdcmd;
  88   1              rs_1602=0;
  89   1              rw_1602=0;
  90   1              _nop_();
  91   1              e_1602=1;
  92   1              _nop_();
  93   1              _nop_();
  94   1              e_1602=0;      //产生一个下沿     
  95   1      }
  96          
  97          
  98          
  99          /***************向液晶写数据******************/
 100          void lcd1602_wrdata(uchar lcddata)
 101          {
 102   1       while(lcd1602_busy());       //等待空闲
 103   1       lcd1602_bus=lcddata;             //在下沿的时候写数据
 104   1       rs_1602=1;
 105   1       rw_1602=0;
 106   1       _nop_();
 107   1       e_1602=1;
 108   1       _nop_();
 109   1       _nop_();
 110   1       e_1602=0;
 111   1       //lcd_bus=0xff;
 112   1      }
 113          
 114          
 115          /************液晶的清屏************/
 116          void lcd1602_clear(void)
 117          {
C51 COMPILER V7.20   TEXT1                                                                 08/13/2007 15:13:36 PAGE 3   

 118   1        lcd1602_wrcmd(0x01);     //液晶清屏控制字     并延时>40us
 119   1        delay(1);
 120   1      }
 121          
 122          /***********1602液晶的初始化***************/
 123          void lcd1602_init(void)
 124          {
 125   1        lcd1602_wrcmd(0x38);          //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
 126   1        delay(1);
 127   1        lcd1602_wrcmd(0x0e);         //显示开关控制----显示开关开,光标开关关,闪烁开关关
 128   1        delay(1);
 129   1        lcd1602_wrcmd(0x06);         //输入方式设置,AC自增1, S=0;
 130   1        delay(1);                
 131   1        lcd1602_wrcmd(0x01);         //清屏
 132   1        delay(1);
 133   1      }
 134          
 135          
 136          /**********4*4矩阵键盘****************/
 137          /************
 138           矩阵键盘
 139          D---------P1.0
 140          C---------P1.1
 141          B---------P1.2
 142          A---------P1.3
 143          1---------P1.4
 144          2---------P1.5
 145          3---------P1.6
 146          4---------P1.7
 147          按键值的分布
 148             D   C  B  A
 149          1〔15 14 13 12〕
 150          2〔11 10  9  8〕
 151          3〔 7  6  5  4〕
 152          4〔 3  2  1  0〕
 153          利用已有的那个按键程序  */
 154          uchar getkey_ii()
 155          
 156          {
 157   1          unsigned char keycode=0xff,temp,i;
 158   1          P1=0x0f;
 159   1          temp=P1&0x0f;
 160   1          if(temp!=0x0f)        //判是否有键按下
 161   1          {
 162   2              beep=0;
 163   2              P1=0xef;          //自第0行开始扫描输出,自列读入键值
 164   2              for(i=0;i<4;i++)
 165   2              {
 166   3                  temp=P1&0x0f;
 167   3                  if(temp==0x07)     //判断第0列是否有键按下
 168   3                  {    
 169   4                      keycode=i*4+0;
 170   4                      break;
 171   4                  }
 172   3                  else if(temp==0x0b)//判断第1列是否有键按下
 173   3                  {
 174   4                      keycode=i*4+1;
 175   4                      break;                                                                                    
 176   4                  }
 177   3                  else if(temp==0x0d)//判断第2列是否有键按下
 178   3                  {
 179   4                      keycode=i*4+2;
C51 COMPILER V7.20   TEXT1                                                                 08/13/2007 15:13:36 PAGE 4   

 180   4                      break;
 181   4                  }
 182   3                  else if(temp==0x0e)//判断第3列是否有键按下
 183   3                  {
 184   4                      keycode=i*4+3;
 185   4                      break;
 186   4                  }
 187   3                  P1=(P1<<1)|0x1;
 188   3              }
 189   2      
 190   2               while((P1&0x0f)!=0x0f)   //等待释放
 191   2               {
 192   3                   P1=0x0f;
 193   3               }
 194   2            beep=1;                                             
 195   2              
 196   2           }
 197   1           return keycode;
 198   1      }
 199          
 200          
 201          /*********       显示数字        *************/
 202          void xianshu(unsigned long a)
 203          {          unsigned long c,p=0;
 204   1                                      
 205   1                              
 206   1                      
 207   1                                      c=a/1000000000;
 208   1                                      if(c!=0)
 209   1                      {lcd1602_wrdata(c+0x30);
 210   2                                   p=1;
 211   2                                       }
 212   1                       c=(a%1000000000)/100000000;
 213   1                       if(c!=0 || p==1)
 214   1                       {lcd1602_wrdata(c+0x30);
 215   2                                        p=1;
 216   2                                    }
 217   1                       c=(a%100000000)/10000000;
 218   1                       if(c!=0 || p==1)
 219   1                       {lcd1602_wrdata(c+0x30);
 220   2                                     p=1;
 221   2                                        }
 222   1      
 223   1                       c=(a%10000000)/1000000;
 224   1                       if(c!=0 || p==1)
 225   1                       {lcd1602_wrdata(c+0x30);
 226   2                                     p=1;
 227   2                                        }
 228   1                        c=(a%1000000)/100000;
 229   1                      if(c!=0 || p==1)
 230   1                       {lcd1602_wrdata(c+0x30);
 231   2                                     p=1;
 232   2                                        }
 233   1                       c=(a%100000)/10000;
 234   1                      if(c!=0 || p==1)
 235   1                       {lcd1602_wrdata(c+0x30);
 236   2                                     p=1;
 237   2                                        }               
 238   1                      c=(a%10000)/1000;
 239   1                      if(c!=0 || p==1)
 240   1                       {lcd1602_wrdata(c+0x30);
 241   2                                     p=1;
C51 COMPILER V7.20   TEXT1                                                                 08/13/2007 15:13:36 PAGE 5   

 242   2                                        }
 243   1                      
 244   1                                      c=(a%1000)/100;
 245   1                      if(c!=0 || p==1)
 246   1                       {lcd1602_wrdata(c+0x30);
 247   2                                     p=1;
 248   2                                        }
 249   1                      
 250   1                                      c=(a%100)/10;
 251   1                      if(c!=0 || p==1)
 252   1                       {lcd1602_wrdata(c+0x30);
 253   2                                    }
 254   1                      
 255   1                          c=a%10+0x30;
 256   1                          lcd1602_wrdata(c);   
 257   1                                      
 258   1                
 259   1      }
 260          
 261           /*******       菜单显示子程序      ************/
 262          void xianshi(uchar j)
 263          {       uchar code str[][9]={{"1.SIN   "},{"2.OOK   "},{"3.set F "},{"4.set dF"},{"5.set XW"},{"6.FSK   "},{"7
             -.FM    "},{"1.SIN   "}};   
 264   1          uchar i;
 265   1          unsigned char offset=0x80;
 266   1                lcd1602_clear();
 267   1                          lcd1602_wrcmd(offset+0x00);
 268   1      
 269   1                   lcd1602_wrcmd(offset+0x00);
 270   1                   lcd1602_wrdata('-');

⌨️ 快捷键说明

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