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

📄 zhts.lst

📁 51单片学习程序,里面有流水灯
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  ZHTS                                                                   11/28/2006 16:29:48 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE ZHTS
OBJECT MODULE PLACED IN .\zhts.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\zhts.c DEBUG OBJECTEXTEND

stmt level    source

   1          //flow light and beep 
   2          #include <reg51.h>
   3          #include <intrins.h>
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          sbit adrd=P3^7;                          //IO口定义
   7          sbit adwr=P3^6;
   8          sbit diola=P2^5;
   9          sbit dula=P2^6;
  10          sbit wela=P2^7;
  11          sbit csda=P3^2;
  12          
  13          
  14          sbit dawr=P3^6;
  15          
  16          unsigned char j,k;
  17          unsigned char a,b;
  18          sbit DS=P2^2;           //define interface
  19          uint temp;             // variable of temperature
  20          uchar flag1;            // sign of the result positive or negative
  21          sbit beep=P2^3;
  22          void dazhuanhuan();
  23          void adzhuanhuan();
  24          void jianpan();
  25          void display1(unsigned char);
  26          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,				//数码管编码
  27                                  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  28          unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
  29                                  0x87,0xff,0xef};
  30          
  31          
  32          void delay1(uint count)      //delay
  33          {
  34   1        uint i;
  35   1        while(count)
  36   1        {
  37   2          i=200;
  38   2          while(i>0)
  39   2          i--;
  40   2          count--;
  41   2        }
  42   1      }
  43          ///////功能:串口初始化,波特率9600,方式1///////
  44          void Init_Com(void)
  45          {
  46   1           TMOD = 0x20;
  47   1           PCON = 0x00;
  48   1           SCON = 0x50;
  49   1           TH1 = 0xFd;
  50   1           TL1 = 0xFd;
  51   1           TR1 = 1;
  52   1      }
  53          
  54          void dsreset(void)       //send reset and initialization command
  55          {
C51 COMPILER V6.12  ZHTS                                                                   11/28/2006 16:29:48 PAGE 2   

  56   1        uint i;
  57   1        DS=0;
  58   1        i=103;
  59   1        while(i>0)i--;
  60   1        DS=1;
  61   1        i=4;
  62   1        while(i>0)i--;
  63   1      }
  64          
  65          bit tmpreadbit(void)       //read a bit
  66          {
  67   1         uint i;
  68   1         bit dat;
  69   1         DS=0;i++;          //i++ for delay
  70   1         DS=1;i++;i++;
  71   1         dat=DS;
  72   1         i=8;while(i>0)i--;
  73   1         return (dat);
  74   1      }
  75          
  76          uchar tmpread(void)   //read a byte date
  77          {
  78   1        uchar i,j,dat;
  79   1        dat=0;
  80   1        for(i=1;i<=8;i++)
  81   1        {
  82   2          j=tmpreadbit();
  83   2          dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
  84   2        }
  85   1        return(dat);
  86   1      }
  87          
  88          void tmpwritebyte(uchar dat)   //write a byte to ds18b20
  89          {
  90   1        uint i;
  91   1        uchar j;
  92   1        bit testb;
  93   1        for(j=1;j<=8;j++)
  94   1        {
  95   2          testb=dat&0x01;
  96   2          dat=dat>>1;
  97   2          if(testb)     //write 1
  98   2          {
  99   3            DS=0;
 100   3            i++;i++;
 101   3            DS=1;
 102   3            i=8;while(i>0)i--;
 103   3          }
 104   2          else
 105   2          {
 106   3            DS=0;       //write 0
 107   3            i=8;while(i>0)i--;
 108   3            DS=1;
 109   3            i++;i++;
 110   3          }
 111   2      
 112   2        }
 113   1      }
 114          
 115          void tmpchange(void)  //DS18B20 begin change
 116          {
 117   1        dsreset();
C51 COMPILER V6.12  ZHTS                                                                   11/28/2006 16:29:48 PAGE 3   

 118   1        delay1(1);
 119   1        tmpwritebyte(0xcc);  // address all drivers on bus
 120   1        tmpwritebyte(0x44);  //  initiates a single temperature conversion
 121   1      }
 122          
 123          uint tmp()               //get the temperature
 124          {
 125   1        float tt;
 126   1        uchar a,b;
 127   1        dsreset();
 128   1        delay1(1);
 129   1        tmpwritebyte(0xcc);
 130   1        tmpwritebyte(0xbe);
 131   1        a=tmpread();
 132   1        b=tmpread();
 133   1        temp=b;
 134   1        temp<<=8;             //two byte  compose a int variable
 135   1        temp=temp|a;
 136   1        tt=temp*0.0625;
 137   1        temp=tt*10+0.5;
 138   1        return temp;
 139   1      }
 140          
 141          void readrom()          //read the serial
 142          {
 143   1        uchar sn1,sn2;
 144   1        dsreset();
 145   1        delay1(1);
 146   1        tmpwritebyte(0x33);
 147   1        sn1=tmpread();
 148   1        sn2=tmpread();
 149   1      }
 150          
 151          
 152          void delay10ms1()            //delay
 153            {
 154   1          uchar a,b;
 155   1          for(a=10;a>0;a--)
 156   1            for(b=60;b>0;b--);
 157   1         }
 158          
 159          void display2(uint temp)			//显示程序
 160          {
 161   1         uchar A1,A2,A2t,A3,ser;
 162   1         ser=temp/10;
 163   1         SBUF=ser;
 164   1         A1=temp/100;
 165   1         A2t=temp%100;
 166   1         A2=A2t/10;
 167   1         A3=A2t%10;
 168   1         dula=0;
 169   1         P0=table[A1];		//显示百位
 170   1         dula=1;
 171   1         dula=0;
 172   1      
 173   1         wela=0;
 174   1         P0=0x7e;
 175   1         wela=1;
 176   1         wela=0;
 177   1         delay1(1);
 178   1      
 179   1         dula=0;
C51 COMPILER V6.12  ZHTS                                                                   11/28/2006 16:29:48 PAGE 4   

 180   1         P0=table1[A2];		//显示十位
 181   1         dula=1;
 182   1         dula=0;
 183   1      
 184   1         wela=0;
 185   1         P0=0x7d;
 186   1         wela=1;
 187   1         wela=0;
 188   1         delay1(1);
 189   1      
 190   1         P0=table[A3];		//显示个位
 191   1         dula=1;
 192   1         dula=0;
 193   1      
 194   1         P0=0x7b;
 195   1         wela=1;
 196   1         wela=0;
 197   1         delay1(1);
 198   1      }
 199          
 200          
 201          void wendu()
 202          {
 203   1       uchar a,c;
 204   1       Init_Com();
 205   1        for(c=0;c<20;c++)
 206   1        {
 207   2          tmpchange();
 208   2         // delay(200);
 209   2         for(a=10;a>0;a--)
 210   2           {   display2(tmp());
 211   3           }
 212   2        }                
 213   1      }
 214          
 215          
 216          void delay10ms()
 217            {
 218   1          for(a=100;a>0;a--)
 219   1            for(b=225;b>0;b--);
 220   1         }
 221          
 222             //拧动AD旁边的电位器,会在数码管的前三位显示0-255之间的数值。这就是把模拟电压转换成数字信号。
 223          
 224          void delay(unsigned char i)		//延时程序
 225          {
 226   1        for(j=i;j>0;j--)
 227   1          for(k=125;k>0;k--);
 228   1      }
 229          
 230          
 231          void display(uchar bai_c,uchar sh_c,uchar g_c)			//显示程序
 232          {
 233   1         dula=0;
 234   1         P0=table[bai_c];		//显示百位
 235   1         dula=1;
 236   1         dula=0;
 237   1      
 238   1         wela=0;
 239   1         P0=0x7e;
 240   1         wela=1;
 241   1         wela=0;
C51 COMPILER V6.12  ZHTS                                                                   11/28/2006 16:29:48 PAGE 5   

 242   1         delay(5);
 243   1      
 244   1         dula=0;
 245   1         P0=table[sh_c];		//显示十位
 246   1         dula=1;
 247   1         dula=0;
 248   1      
 249   1         wela=0;
 250   1         P0=0x7d;
 251   1         wela=1;
 252   1         wela=0;
 253   1         delay(5);
 254   1      
 255   1         P0=table[g_c];		//显示个位
 256   1         dula=1;
 257   1         dula=0;
 258   1      
 259   1         P0=0x7b;
 260   1         wela=1;
 261   1         wela=0;
 262   1         delay(5);
 263   1      }
 264          
 265               da();//DA
 266          void main()
 267          { uchar liushui;
 268   1        k=0xfe;
 269   1        for(liushui=0;liushui<8;liushui++)
 270   1        {
 271   2            delay10ms();
 272   2            beep=0;
 273   2            delay10ms();
 274   2            beep=1;
 275   2            j=_crol_(k,1);
 276   2            k=j;
 277   2            P1=j;
 278   2         }
 279   1      dazhuanhuan();
 280   1      wendu();
 281   1      adzhuanhuan();
 282   1      jianpan();
 283   1      
 284   1      

⌨️ 快捷键说明

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