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

📄 t.lst

📁 AT89c51 使用 PC键盘 的 C源代码
💻 LST
字号:
C51 COMPILER V7.06   T                                                                     06/26/2008 12:00:36 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE T
OBJECT MODULE PLACED IN t.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE t.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <at89x51.h>
   3          #define uchar unsigned char
   4          
   5          void delay(unsigned int n)
   6          {
   7   1              unsigned int i,j;
   8   1              for(j=0;j<100;j++)
   9   1              for(i=0;i<n;i++);
  10   1      }
  11          uchar a,b,flag; 
  12          uchar q[10],p,pp;
  13          
  14          uchar func=0x00;
  15          void main() 
  16          {
  17   1      #if 0
                      TMOD=0x20;//0x20; //方式控制字 
              
                      SCON=0xD0;//0x50;//(receive mode)
                  PCON=0x0;//0x7F;(smod=0)
              
                      TH1=0xFE;//0xf6;//0xfd; //设置波特率为14400 
                      TL1=0xFE;//0xf6;//0xfd;
              
                      TR1=1; //开定时器1 
              #endif  
  28   1      
  29   1              EX0  = 0;
  30   1              EX1  = 1;
  31   1              ET0  = 0;
  32   1              ET1  = 0;
  33   1              ES   = 0;
  34   1      
  35   1              IT0=1;//edge trigger
  36   1              IT1=1;
  37   1              //IP=0x10;//interrupt precedence
  38   1              EA=1; //总中断允许 
  39   1      
  40   1              p=0;
  41   1              while(1)
  42   1              {
  43   2                      P2=0xFF;
  44   2                      if(P2_0==0)
  45   2                      {
  46   3                              func=(func+1)%4;
  47   3      
  48   3                              P1=~func;
  49   3                      }
  50   2                      
  51   2                      
  52   2                      if(func==0)
  53   2                      {
  54   3                              if(P2_1==0)     {pp=(pp+9)%10;P1=~q[pp];}//cur--
  55   3                              else if(P2_2==0)        {pp=(pp+1)%10;P1=~q[pp];}//cur++
C51 COMPILER V7.06   T                                                                     06/26/2008 12:00:36 PAGE 2   

  56   3                      }
  57   2                      else if(func==1)
  58   2                      {
  59   3                              if(P2_1==0)     {pp=0;P1=~q[pp];}//cur=0
  60   3                              else if(P2_2==0)        {pp=(pp+1)%10;P1=~q[pp];}//cur++
  61   3                      }
  62   2                      else if(func==2)
  63   2                      {
  64   3                              if(P2_1==0)     {pp=9;P1=~q[pp];}//cur=0
  65   3                              else if(P2_2==0)        {pp=(pp+9)%10;P1=~q[pp];}//cur--
  66   3                      }
  67   2                      else if(func==3)
  68   2                      {
  69   3                              if(P2_1==0)     {char i;for(i=0;i<10;i++)q[i]=0x00; P1=~0xAA; }//all set 0
  70   3                              else if(P2_2==0)        {char i;for(i=0;i<10;i++)q[i]=0xFF; P1=~0xFA;}// all set 1
  71   3                      }
  72   2                      
  73   2                      delay(200);
  74   2              }
  75   1      #if 0
                      {
                                      SBUF='5'; 
                                      while(!TI); 
                                      TI=0; 
                      
                              P0=table[a-0x30]; 
                              if(flag==1) 
                              { 
                                      ES=0; 
                                      flag=0; 
                                      SBUF=a; 
                                      while(!TI); 
                                      TI=0; 
                                      ES=1; 
                              } 
                      } 
              #endif
  93   1      } 
  94          #if 0
              void serial() interrupt 4 //not stable,some key reveived is broken,especially the last bit
              {
                      EA=0;
                      a=SBUF;
                      q[p]=a;
                      p++;pp=p;
                      if(p==10) p=0;
                      P1=~a; 
                      
                      RI=0; 
                      EA=1;
              }
              #endif
 108          #if 1
 109          #define sck P3_3//写义时钟线,选用中断口
 110          #define dat P3_4//定义数据线
 111          unsigned char keyvalue;//键码
 112          unsigned char intnum=0;//中断次数
 113          bit bf=0;//已经取得一个键码时为1
 114          /*------------------------------------------------------
 115          51单片机设为低电平触发中断
 116          当时钟线为低时,触发中断,然后读数,等待高电平退出中断
 117          ------------------------------------------------------*/
C51 COMPILER V7.06   T                                                                     06/26/2008 12:00:36 PAGE 3   

 118          void int1(void) interrupt 2//(INT1)中断处理
 119          {
 120   1              //EA=0;
 121   1              if( (intnum>0) && (intnum<9) )//只读取第1--8位,也就是键码位,抛弃起始位0,校验位9与停止位10
 122   1              {
 123   2                      keyvalue>>=1;//因为键盘先发送的是最低位,所以右移一位
 124   2                      if(dat)
 125   2                      {
 126   3                              keyvalue|=0x80;//当数据线为1时,将最高位置1
 127   3                      }
 128   2              }
 129   1              intnum++;//中断次数加1
 130   1              while(!sck);//当时钟线为低电平时循环至到时钟线为高电平
 131   1              if(intnum>10)//当中断11次后,表示一个字已经发完,禁止中断,等待处理,处理完后,清零bf
 132   1              {
 133   2                      intnum=0;
 134   2                      bf=1;
 135   2                      //EA=0;
 136   2      
 137   2                                      q[p]=keyvalue;
 138   2                                      p++;pp=p;
 139   2                                      if(p==10) p=0;
 140   2      
 141   2                                      P1=~keyvalue;
 142   2              }
 143   1              //EA=1;
 144   1      }
 145          
 146          //参考链接:http://www.picavr.com/news/2008-01/3417.htm
 147          
 148          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    294    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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