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

📄 irqkeyread.lst

📁 用ch451的键盘显示程序,利用4*4键盘输入健值,在led数码管上显示结果
💻 LST
字号:
C51 COMPILER V8.02   IRQKEYREAD                                                            07/13/2007 11:49:08 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE IRQKEYREAD
OBJECT MODULE PLACED IN IRQKeyRead.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IRQKeyRead.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          #include"ch451.h"
   4          
   5          LEDDisplay(char MODE,uint data1)
   6          {
   7   1         uint i;
   8   1         void WriteCh451(uint da);
   9   1         void Delay();
  10   1         WriteCh451(CH451_SYSON2);
  11   1         WriteCh451(CH451_BCD);
  12   1         if(MODE==0)                //突发显示
  13   1         {   
  14   2            if(1)                   //如果条件成立时显示
  15   2            WriteCh451(data1);
  16   2          }
  17   1          if(MODE==1)               //定周期显示
  18   1          {
  19   2              for(i=0;i<10000;i++);   //定时周期
  20   2              WriteCh451(data1);
  21   2          }
  22   1      }
  23          
  24          void WriteCh451(uint da)
  25          {
  26   1         uint i;
  27   1         EX1=0;               //关闭键盘中断
  28   1         CH451_LOAD=0;        //复位LOAD信号
  29   1         for(i=0;i<12;i++)
  30   1         {
  31   2            if((da&0x1)==1)
  32   2               CH451_DIN=1;
  33   2            else
  34   2               CH451_DIN=0;
  35   2            CH451_DCLK=0;
  36   2            da>>=1;
  37   2            CH451_DCLK=1;     //上升沿读取数据
  38   2          }
  39   1          CH451_LOAD=1;       //加载数据
  40   1          Delay();
  41   1          EX1=1;              //打开键盘中断
  42   1      }
  43          
  44          
  45          void Delay()
  46          {
  47   1          _nop_();
  48   1          _nop_();
  49   1      }
  50          
  51          uint ReadCh451()
  52          {
  53   1          uchar i;
  54   1          uchar cmd ,keycode;
  55   1          EX1=0;             //禁止键盘中断
C51 COMPILER V8.02   IRQKEYREAD                                                            07/13/2007 11:49:08 PAGE 2   

  56   1          cmd=0x07;          //获取按键值
  57   1          CH451_LOAD=0;
  58   1          for(i=0;i<4;i++)
  59   1          {
  60   2            if((cmd&0x1)==1)
  61   2               CH451_DIN=1;
  62   2            else
  63   2               CH451_DIN=0;    
  64   2            CH451_DCLK=0;
  65   2            cmd>>=1;
  66   2            CH451_DCLK=1;  
  67   2          }
  68   1          CH451_LOAD=1;
  69   1          keycode=0;
  70   1          for(i=0;i<7;i++)
  71   1          {
  72   2             keycode<<=1;    //数据移入keycode
  73   2             keycode|=CH451_DOUT;//从高到低读入451的数据
  74   2             CH451_DCLK=0;       //时钟下降沿通知ch451输出下一位
  75   2                 Delay();
  76   2             CH451_DCLK=1;
  77   2           }
  78   1               
  79   1           IE=0;                //清除中断标志   
  80   1           EX1=1;
  81   1           return(keycode);
  82   1      } 
  83          
  84          void IRQKeyRead() interrupt 2
  85          {
  86   1          uchar key;
  87   1          uchar key0,key1;
  88   1          key=ReadCh451();
  89   1              key=key&0x3f;
  90   1          key0=key/10;
  91   1          key1=key%10;
  92   1          if(key0!=0)
  93   1              LEDDisplay(0,CH451_DIG1|key0);
  94   1          else
  95   1              LEDDisplay(0,CH451_DIG1|0x10);
  96   1          LEDDisplay(0,CH451_DIG0|key1);
  97   1      }
  98          
  99          
 100          void InitSys()
 101          {       
 102   1              EA=1;
 103   1              //LEDDisplay(0,CH451_DSP);
 104   1          WriteCh451(CH451_SYSON2);
 105   1          WriteCh451(CH451_BCD);
 106   1          EX1=1;
 107   1      }
 108          
 109          void main()
 110          {
 111   1         LEDDisplay(0,0x0800);
 112   1         LEDDisplay(0,0x0900);
 113   1         LEDDisplay(0,0x0a00);
 114   1         LEDDisplay(0,0x0b00);
 115   1         LEDDisplay(0,0x0c00);
 116   1         LEDDisplay(0,0x0d00);
 117   1         LEDDisplay(0,0x0e00);
C51 COMPILER V8.02   IRQKEYREAD                                                            07/13/2007 11:49:08 PAGE 3   

 118   1         LEDDisplay(1,0x0f00);
 119   1         for(;;)
 120   1         {
 121   2         InitSys();
 122   2         while(0);
 123   2         } 
 124   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    369    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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