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

📄 text1.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 22:47:27 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 uchar unsigned char
   4          #define uint unsigned int
   5          
   6          uchar tplsb,tpmsb;
   7          uint temp,tempx;
   8          sbit DQ=P2^0;
   9          uchar code table[1]=".";
  10          uchar code table1[10]="0123456789";
  11          
  12          
  13          void delay(uint t);
  14          bit lcd1602_busy(void);
  15          void lcd1602_wrcmd(unsigned char lcdcmd);
  16          void lcd1602_wrdata(uchar lcddata);
  17          void lcd1602_clear(void);
  18          void lcd1602_init(void);
  19          uchar keyscan(void);
  20          void chuli(uchar key);
  21          uchar zhuan(uchar key);
  22          
  23          
  24          //数据口定义
  25          #define lcd1602_bus P3                   
  26          
  27          //引脚定义
  28          sbit rs_1602=P2^5;           
  29          sbit rw_1602=P2^6;
  30          sbit e_1602=P2^7;
  31          
  32          /* 延时t毫秒 */
  33          void delay(uint t)
  34          {
  35   1              uint i;
  36   1              while(t--)
  37   1              {
  38   2                      /* 对于11.0592M时钟,约延时1ms */
  39   2                      for (i=0;i<125;i++)
  40   2                      {}
  41   2              }
  42   1      } 
  43          
  44          
  45          /***********忙判断标志,返回一个位BF********************/
  46          bit lcd1602_busy(void)
  47          {
  48   1              uchar busy_flag;
  49   1              rs_1602=0;
  50   1              rw_1602=1;
  51   1              _nop_();
  52   1              e_1602=1;
  53   1              _nop_();
  54   1              lcd1602_bus=0xff;
  55   1              busy_flag=lcd1602_bus;   //e在高电平时读 
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 22:47:27 PAGE 2   

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

 118          {
 119   1              uint i;
 120   1              DQ = 0;
 121   1      
 122   1              /* 拉低约900us */
 123   1              i = 100;
 124   1              while (i>0)     i--;    
 125   1              
 126   1              DQ = 1;                         // 产生上升沿
 127   1              i = 4;
 128   1              while (i>0)     i--;
 129   1      }
 130          
 131          /* 等待应答脉冲 */
 132          void RxWait(void)
 133          {
 134   1              uint i;
 135   1              while(DQ);
 136   1              while(~DQ);                     // 检测到应答脉冲 
 137   1              i = 4;
 138   1              while (i>0)     i--;
 139   1      }
 140          
 141          /* 读取数据的一位,满足读时隙要求 */ 
 142          bit RdBit(void)
 143          {
 144   1              uint i;
 145   1              bit b;
 146   1              DQ = 0;
 147   1              i++;
 148   1              DQ = 1;
 149   1              i++;i++;                        // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
 150   1              b = DQ;
 151   1              i = 8;
 152   1              while(i>0) i--;
 153   1              return (b);
 154   1      }
 155          
 156          /* 读取数据的一个字节 */
 157          uchar RdByte(void)
 158          {
 159   1              uchar i,j,b;
 160   1              b = 0;
 161   1              for (i=1;i<=8;i++)
 162   1              {
 163   2                      j = RdBit();
 164   2                      b = (j<<7)|(b>>1);
 165   2              }
 166   1              return(b);
 167   1      }
 168          
 169          /* 写数据的一个字节,满足写1和写0的时隙要求 */
 170          void WrByte(uchar b)
 171          {
 172   1              uint i;
 173   1              uchar j;

⌨️ 快捷键说明

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