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

📄 text1.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   TEXT1                                                                 07/16/2007 22:00:06 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<reg51.h>
   2          #include<intrins.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          //数据口定义
   6          #define lcd1602_bus P3           
   7          
   8          //引脚定义
   9          sbit rs_1602=P2^5;           
  10          sbit rw_1602=P2^6;
  11          sbit e_1602=P2^7;
  12          
  13          //ASCII码表
  14          /**********0---9**************/
  15          unsigned  int  code table[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  16          /**********a---z**************/
  17          unsigned  int code table1[26]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
  18                                         0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a};
  19          /***********A---Z*************/
  20          unsigned  int code table2[26]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
  21                                         0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a};
  22          
  23          //基本变量定义
  24          //uchar cnt;
  25          // unsigned int d[3];
  26          /*
  27          hexstoascii2(unsigned int hex)
  28          {
  29          d[0]=table[hex/10];
  30          hex=hex%10;
  31          d[1]=table[hex]; 
  32          }
  33          
  34          hexstoascii3(unsigned int hex)
  35          {
  36          d[0]=table[hex/100];
  37          hex=hex%100;
  38          d[1]=table[hex/10];
  39          hex=hex%10;
  40          d[2]=table[hex];
  41          }
  42           */
  43          /**********************************lcd1602******************************************/
  44          
  45          /*********延时子程序**********/
  46          void delay(uchar dy)
  47          {
  48   1        while(--dy);
  49   1      } 
  50          
  51          /***********忙判断标志,返回一个位BF********************/
  52          bit lcd1602_busy(void)
  53          {
  54   1              uchar busy_flag;
  55   1              rs_1602=0;
C51 COMPILER V7.20   TEXT1                                                                 07/16/2007 22:00:06 PAGE 2   

  56   1              rw_1602=1;
  57   1              _nop_();
  58   1              e_1602=1;
  59   1              _nop_();
  60   1              lcd1602_bus=0xff;
  61   1              busy_flag=lcd1602_bus;   //e在高电平时读 
  62   1              e_1602=0;
  63   1              return (bit)(busy_flag&0x80);    //BF=1; BUSY  返回一个位
  64   1      }
  65          
  66          
  67          /********写命令,有两个参数,一个是要写的命令控制字,
  68          第二个是用来控制是否进行忙标志的判断。
  69          busyflag=1;
  70          判断: 为0 
  71          ***************/
  72          void lcd1602_wrcmd(unsigned char lcdcmd)
  73          {
  74   1              while(lcd1602_busy());     //等待空闲
  75   1              lcd1602_bus=lcdcmd;
  76   1              rs_1602=0;
  77   1              rw_1602=0;
  78   1              _nop_();
  79   1              e_1602=1;
  80   1              _nop_();
  81   1              _nop_();
  82   1              e_1602=0;      //产生一个下沿     
  83   1      }
  84          
  85          
  86          
  87          /***************向液晶写数据******************/
  88          void lcd1602_wrdata(uchar lcddata)
  89          {
  90   1       while(lcd1602_busy());       //等待空闲
  91   1       lcd1602_bus=lcddata;             //在下沿的时候写数据
  92   1       rs_1602=1;
  93   1       rw_1602=0;
  94   1       _nop_();
  95   1       e_1602=1;
  96   1       _nop_();
  97   1       _nop_();
  98   1       e_1602=0;
  99   1       //lcd_bus=0xff;
 100   1      }
 101          
 102          
 103          /************液晶的清屏************/
 104          void lcd1602_clear(void)
 105          {
 106   1        lcd1602_wrcmd(0x01);     //液晶清屏控制字     并延时>40us
 107   1        delay(100);
 108   1      }
 109          
 110          /***********1602液晶的初始化***************/
 111          void lcd1602_init(void)
 112          {
 113   1        lcd1602_wrcmd(0x38);          //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
 114   1        delay(100);
 115   1        lcd1602_wrcmd(0x0f);         //显示开关控制----显示开关开,光标开关关,闪烁开关关
 116   1        delay(100);
 117   1        lcd1602_wrcmd(0x06);         //输入方式设置,AC自增1, S=0;
C51 COMPILER V7.20   TEXT1                                                                 07/16/2007 22:00:06 PAGE 3   

 118   1        delay(100);              
 119   1        lcd1602_wrcmd(0x01);         //清屏
 120   1        delay(100);
 121   1      }
 122          
 123          
 124          /**********4*4矩阵键盘****************/
 125          /************
 126           矩阵键盘
 127          D---------P1.0
 128          C---------P1.1
 129          B---------P1.2
 130          A---------P1.3
 131          1---------P1.4
 132          2---------P1.5
 133          3---------P1.6
 134          4---------P1.7
 135          按键值的分布
 136             D   C  B  A
 137          1〔15 14 13 12〕
 138          2〔11 10  9  8〕
 139          3〔 7  6  5  4〕
 140          4〔 3  2  1  0〕
 141          利用已有的那个按键程序  
 142          *************/
 143          
 144          uchar getkey_ii()
 145          
 146          {
 147   1          unsigned char keycode=0xff,temp,i;
 148   1          P1=0x0f;
 149   1          temp=P1&0x0f;
 150   1          if(temp!=0x0f)        //判是否有键按下
 151   1          {
 152   2             // beep=0;
 153   2              P1=0xef;          //自第0行开始扫描输出,自列读入键值
 154   2              for(i=0;i<4;i++)
 155   2              {
 156   3                  temp=P1&0x0f;
 157   3                  if(temp==0x07)     //判断第0列是否有键按下
 158   3                  {    
 159   4                      keycode=i*4+0;
 160   4                      break;
 161   4                  }
 162   3                  else if(temp==0x0b)//判断第1列是否有键按下
 163   3                  {
 164   4                      keycode=i*4+1;
 165   4                      break;                                                                                    
 166   4                  }
 167   3                  else if(temp==0x0d)//判断第2列是否有键按下
 168   3                  {
 169   4                      keycode=i*4+2;
 170   4                      break;
 171   4                  }
 172   3                  else if(temp==0x0e)//判断第3列是否有键按下
 173   3                  {
 174   4                      keycode=i*4+3;
 175   4                      break;
 176   4                  }
 177   3                  P1=(P1<<1)|0x1;
 178   3              }
 179   2      
C51 COMPILER V7.20   TEXT1                                                                 07/16/2007 22:00:06 PAGE 4   

 180   2               while((P1&0x0f)!=0x0f)   //等待释放
 181   2               {
 182   3                   P1=0x0f;
 183   3               }
 184   2          //   beep=1;                                             
 185   2              
 186   2           }
 187   1           return keycode;
 188   1      }
 189          
 190          /**********lcd1602 测试程序**********************/
 191          //上电后lcd1602 显示  
 192          //            "System of P.H.Y"      
 193          //             "   Welcome!"
 194          //
 195          //分别按矩阵最右下角的三个按键 分别出现下面几个显示界面:
 196          //   key=0 显示
 197          //              "    2005/7/28";
 198          //                      "      20:27";
 199          //   key=1 显示
 200          //              "<>?+-*/()="    
 201          //              "`-=\[]/.,;"    
 202          //   key=2 显示
 203          //         "!@#$%^&*()_+|~"
 204          //         "!@#$%^&*()_+|~"
 205          
 206          void xianshi(unsigned long a)
 207          {          unsigned long c,p=0;
 208   1                                      if (a!=0) 
 209   1                              {       c=a/100000000;
 210   2                                      if(c!=0)
 211   2                      {lcd1602_wrdata(c+0x30);
 212   3                                   p=1;
 213   3                                       }
 214   2                      delay(100);
 215   2                                      c=(a%100000000)/10000000;
 216   2                                      if(c!=0  )
 217   2                      {lcd1602_wrdata(c+0x30);
 218   3                                   p=1;
 219   3                                       }
 220   2                      delay(100);
 221   2                                      c=(a%10000000)/1000000;
 222   2                                      if(c!=0 || p==1 )
 223   2                      {lcd1602_wrdata(c+0x30);
 224   3                                   p=1;
 225   3                                       }
 226   2                      delay(100);
 227   2                                      c=(a%1000000)/100000;
 228   2                                      if(c!=0 || p==1 )
 229   2                      {lcd1602_wrdata(c+0x30);
 230   3                                   p=1;
 231   3                                       }
 232   2                      delay(100);
 233   2                                      c=(a%100000)/10000;
 234   2                                      if(c!=0 || p==1 )
 235   2                      {lcd1602_wrdata(c+0x30);
 236   3                                    p=1;
 237   3                                       }
 238   2                      delay(100);
 239   2                      c=(a%10000)/1000;
 240   2                      if(c!=0 || p==1)
 241   2                       {lcd1602_wrdata(c+0x30);
C51 COMPILER V7.20   TEXT1                                                                 07/16/2007 22:00:06 PAGE 5   

⌨️ 快捷键说明

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