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

📄 1.lst

📁 c51下的一个键盘程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.10   1                                                                     05/24/2006 17:19:53 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe 1.c DB SB OE ROM(COMPACT) SMALL OT(6,SPEED) WL(2) RB(0)

line level    source

   1           
   2          #include <reg52.h>
   3          #include <intrins.h>
   4          #include <absacc.h>
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          sbit p2_4=P2^4;
   8          sbit p1_1=P1^1;
   9          sbit p1_2=P1^2;
  10          sbit p2_7=P2^7;
  11          sbit p2_5=P2^5;
  12          sbit p2_6=P2^6;
  13          sbit p3_3=P3^3;
  14          sbit p3_4=P3^4;
  15          sbit p3_5=P3^5;
  16          sbit scl=P3^6;
  17          sbit sda=P3^7;
  18          sbit le=P2^3; //锁存器控制位;
  19          
  20          
  21          uint idata AcH;
  22          uint idata ArH;
  23          uint  idata jpn=0; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  24          uchar idata clocknum0;/*200~1000HZ输出变量*/
  25          uchar idata clocknum1;
  26          uchar idata  buffer[3];
  27          bit idata flag; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
  28          
  29          
  30          void outmeasure(void) interrupt 3  //内中断2,输出200~1000HZ频率
  31          {
  32   1               uchar i=100;  //固定时间
  33   1               TH1=clocknum0;/*125ms*/
  34   1           TL1=clocknum1;
  35   1           p1_2=1;
  36   1               while(i>0)
  37   1               {
  38   2                       i--;
  39   2               }
  40   1           p1_2=0;
  41   1      }
  42          
  43               
  44          void delay() //延时n毫秒
  45          {
  46   1        static uchar k;
  47   1        for(k=0;k<100;k++)
  48   1        {}
  49   1      }
  50          void display0(uchar *p) //显示//p
  51          { 
  52   1          uchar code  codeled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极0~9
  53   1          p2_5 = 0;
  54   1          P0=codeled[*p];
  55   1          delay();
C51 COMPILER V7.10   1                                                                     05/24/2006 17:19:53 PAGE 2   

  56   1          p++;
  57   1              p2_5=1;
  58   1              p2_6= 0;
  59   1              P0=codeled[*p];
  60   1              delay();
  61   1              p++;
  62   1              p2_6=1;
  63   1              p2_7=0;
  64   1              P0=codeled[*p];
  65   1          delay();
  66   1          p2_7=1;
  67   1      }
  68          void comput2(float s)
  69          {
  70   1              float y0;
  71   1              uint y1;
  72   1              y0=s*200+200; //0%~4%CH4对应200~1000
  73   1              y1=65536-250000/y0;
  74   1              clocknum0=(y1&0xff);/*200HZ输出定时初值*/
  75   1          clocknum1=y1>>8;
  76   1      }
  77          void delay0(void) //时间不知道是否合适
  78          {
  79   1              _nop_();
  80   1              _nop_();
  81   1      }
  82          
  83          void DelayX1ms(uint s)
  84          {   
  85   1          uint j,k;
  86   1              for(j=0;j<s;j++)
  87   1              for(k=0;k<60;k++)
  88   1              {};
  89   1      }
  90          void I2cStart(void) //iic bus 起始信号 
  91          { 
  92   1              sda=1;
  93   1              scl=1;
  94   1              delay0();
  95   1              sda=0;
  96   1              delay0();
  97   1              scl=0;
  98   1      }
  99          void I2cStop(void) //iic bus 停止信号
 100          { 
 101   1              sda=0;
 102   1              delay0();
 103   1              scl=1;
 104   1              delay0();
 105   1              sda=1;
 106   1      }
 107          bit I2cSendChar(uchar bytedata) //传送一个char数据到I2c上
 108          {
 109   1              static uchar i;
 110   1              bit ack;
 111   1              for(i=0;i<8;i++)
 112   1              {
 113   2                      if(bytedata&0x80)
 114   2                      sda=1;
 115   2                      else
 116   2                      sda=0;
 117   2                      bytedata<<=1;
C51 COMPILER V7.10   1                                                                     05/24/2006 17:19:53 PAGE 3   

 118   2                      delay0();
 119   2                      scl=1;
 120   2                      delay0();
 121   2                      scl=0;
 122   2                      delay0();
 123   2              }
 124   1              sda=1;
 125   1              delay0();
 126   1              scl=1;
 127   1              delay0();
 128   1              ack=sda;
 129   1              scl=0;
 130   1              delay0();
 131   1              return ack;
 132   1      }
 133          uchar I2cReceiveChar(void) //从I2c上读一数据
 134          {
 135   1          static      uchar i;
 136   1              static uchar bytedata=0;
 137   1              for(i=0;i<8;i++)
 138   1              {
 139   2                      scl=1;
 140   2                      delay0();
 141   2                      bytedata<<=1;
 142   2                      if(sda)
 143   2                      bytedata|=0x01;
 144   2                      scl=0;
 145   2                      delay0();
 146   2              }
 147   1              return bytedata;
 148   1      }
 149          void SendAcknowledge(bit ack) //传送确认信号
 150          {
 151   1              sda=ack;
 152   1              scl=1;
 153   1              delay0();
 154   1              scl=0;
 155   1      }
 156          
 157          void EEprom24c02Write(uchar address,uchar bytedata) //向 24c02写数据
 158          {
 159   1              I2cStart();
 160   1              I2cSendChar(0xa0);
 161   1              I2cSendChar(address);
 162   1              I2cSendChar(bytedata);
 163   1              I2cStop();
 164   1              DelayX1ms(10);
 165   1              
 166   1      }
 167          uchar  EEprom24c02Read(uchar address) //从24c02读数据
 168          {
 169   1              uchar  bytedata;
 170   1              I2cStart();
 171   1              I2cSendChar(0xa0);
 172   1              I2cSendChar(address);
 173   1              I2cStart();             
 174   1              I2cSendChar(0xa1);
 175   1              bytedata=I2cReceiveChar();
 176   1              SendAcknowledge(1);
 177   1              I2cStop();
 178   1              return bytedata;
 179   1      }
C51 COMPILER V7.10   1                                                                     05/24/2006 17:19:53 PAGE 4   

 180          //--------------------------------------------------------------------------//
 181          void WriteK0(float s)
 182          {
 183   1              uchar i,addr=0x13,m;
 184   1              uint y[4];
 185   1              y[0]=s;
 186   1              y[1]=s*10-y[0]*10;
 187   1              y[2]=s*100-y[0]*100-y[1]*10;
 188   1              y[3]=s*1000-y[0]*1000-y[1]*100-y[2]*10;
 189   1              for(i=0;i<4;i++)
 190   1              {
 191   2                       m=y[i];
 192   2                       EEprom24c02Write(addr,m);
 193   2                       addr++;
 194   2               }
 195   1       }
 196                  
 197          
 198          //-----------------------------------------------------------------//
 199          
 200          void oldbjz (void)  //显示存储的报警值
 201          {       
 202   1              uchar add=0x10;//#10h,#11h存报警值 
 203   1              uchar i; //p
 204   1              uint j=200;
 205   1          uchar *q=buffer; //p
 206   1          for(i=0;i<3;i++)                                //读出报警值
 207   1              {
 208   2                  buffer[i]=EEprom24c02Read(add);//二进制数需转换成bcd,送显示
 209   2              add+=1;
 210   2           }
 211   1         
 212   1          while(j)
 213   1              {
 214   2                      display0(q);
 215   2              j--;
 216   2           }  
 217   1      
 218   1      }
 219          //----------------------------------------------------------------------------//
 220          
 221          void shuzi(uint count)
 222          {
 223   1          
 224   1          bit j=1;
 225   1          uchar a;
 226   1          uchar  *p;
 227   1          uint num;
 228   1          uchar code codeled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极0~9
 229   1          while(j) 
 230   1          {
 231   2              if(p3_5==0)
 232   2              {
 233   3                 j=0;
 234   3                 if(num>9)
 235   3                     num=0;
 236   3                 p=buffer+count;
 237   3                 DelayX1ms(100);
 238   3                 a=num;
 239   3                     le=1;
 240   3                 num++;
 241   3                 if(count==0)
C51 COMPILER V7.10   1                                                                     05/24/2006 17:19:53 PAGE 5   

 242   3                 {
 243   4                       p2_4 = 0;
 244   4                   buffer[0]=a;
 245   4                   P0=codeled[*p];
 246   4                   DelayX1ms(10);
 247   4                   p2_4 = 1;
 248   4                 }
 249   3                           

⌨️ 快捷键说明

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