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

📄 中断法.lst

📁 这是调串口的初学程序 蛮实用 通俗易懂值得一看
💻 LST
字号:
C51 COMPILER V6.12  _衉___                                                                 09/02/2007 23:23:36 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE _衉___
OBJECT MODULE PLACED IN .\中断法.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\中断法.c DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------函数声明,变量定义------------------------------------------
   2          #include <reg51.h>
   3          #define KEY P2
   4          sbit INT_0 =P3^2;    				    // 将p3.2外部中断0
   5          unsigned char key_code,scan,num;     //键值
   6          unsigned char code LEDCODE[]=
   7          {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  
   8          
   9          
  10          //-----------------------变量声明----------------------------------------------------
  11          void system_init(void );     		    //设定INT0的工作方式,供主程序调用
  12          void INT0_SCANkey();         		    //外部中断0处理程序
  13          void delay(void);            	       //延时程序
  14          unsigned char scan_key();    		    //扫描键盘,返回键值(高四位代表行,低四位代表列)
  15          void key_manage(unsigned char temp); //键盘散转
  16          //-----------------------------------------------------------------------------------
  17          void main(void)
  18          {
  19   1      while(1)	
  20   1      	{
  21   2      		system_init();				       //中断初始化
  22   2      	}
  23   1      }
  24          
  25          void delay(void)
  26          {
  27   1      	unsigned char j,k;
  28   1         for(j=20;j>0;j--)
  29   1         for(k=248;k>0;k--);
  30   1      }
  31          
  32          //-----------------------------------------------------------------------------------
  33          // 函数名称: system_init()
  34          // 函数功能: 初始化设置
  35          //  设定INT0的工作方式
  36          //-----------------------------------------------------------------------------------
  37          void system_init(void )  
  38             {
  39   1          IT0=0;     		    	//选择INT0为电平触发方式
  40   1          EX0=1;   	            //外部中断允许
  41   1          EA=1; 				      //系统中断允许
  42   1          KEY=0x0f;
  43   1      	}
  44          
  45          //------------------------------------------------------------------------------------
  46          // 函数名称: INT0_intrupt
  47          // 函数功能: 外部中断0处理程序
  48          //------------------------------------------------------------------------------------
  49          void INT0_SCANkey() interrupt 0 using 1
  50          { 
  51   1          key_code=0;    		               //键值
  52   1          EA=0;
  53   1          delay();               		  	   //消抖动
  54   1          if(INT_0==0)                  	   //再次判断是否有键按下
  55   1            {
C51 COMPILER V6.12  _衉___                                                                 09/02/2007 23:23:36 PAGE 2   

  56   2      			delay();
  57   2      			if(INT_0==0)
  58   2      				{
  59   3               		key_code=scan_key();   //有,就取键码,即:key_code=keycode
  60   3               		while(INT_0==0);       //如果按键仍然为按下状态,刚程序持续执行此语句:等待释放.
  61   3               		key_manage(key_code);  //按键处理
  62   3      				}
  63   2      	   }
  64   1          EA=1;
  65   1      }
  66          
  67          
  68          //--------------------------------------------------------------------------------------
  69          // 函数名称: scan_key
  70          // 函数功能: //扫描键盘,返回键值(高四位代表行,低四位代表列)
  71          //--------------------------------------------------------------------------------------------------
  72          unsigned char scan_key()    
  73          {
  74   1         scan=0xef;         				   //键盘扫描码,采用逐行扫描的方法
  75   1         while(scan!=0xff)  				   //四次扫描完毕之后退出
  76   1         {
  77   2         KEY=scan;   						   //输入扫描码,扫描P1.4对应的行
  78   2         num=KEY;   						      //读出数据,看是否在此行上的某列键盘被按下
  79   2         if((num&0x0f)!=0x0f){break;}     //扫描到按下的键,则退出  
  80   2         scan=(num<<1)|0x0f;              //否则,更新扫描码继续扫描  
  81   2         }  
  82   1         num=~num; 
  83   1         return(num);
  84   1      }
  85          
  86          //--------------------------------------------------------------------------------------------------
  87          // 函数名称: key_manage
  88          // 入口参数: keycode 扫描键盘返回的键值(高四位代表行,低四位代表列)
  89          // 函数功能: 键盘散转
  90          //--------------------------------------------------------------------------------------------------
  91          void key_manage(unsigned char temp)  //注:temp只不过是形式参数,当它被语句
  92          {	      							       //key_manage(key_code)调用时,实际参加处理的
  93   1        temp=num;							       //参数是key_code,即实际参数.
  94   1       switch(temp)						 							
  95   1          {
  96   2      	  case 0x11: temp=0;break;
  97   2      	  case 0x12: temp=1;break;
  98   2      	  case 0x14: temp=2;break;
  99   2      	  case 0x18: temp=3;break;
 100   2      	  case 0x21: temp=4;break;
 101   2      	  case 0x22: temp=5;break;
 102   2      	  case 0x24: temp=6;break;
 103   2      	  case 0x28: temp=7;break;
 104   2        	  case 0x41: temp=8;break;
 105   2        	  case 0x42: temp=9;break;
 106   2      	  case 0x44: temp=10;break;
 107   2      	  case 0x48: temp=11;break;
 108   2      	  case 0x81: temp=12;break;
 109   2      	  case 0x82: temp=13;break;
 110   2      	  case 0x84: temp=14;break;
 111   2      	  case 0x88: temp=15;break;
 112   2          }
 113   1        P1=LEDCODE[temp]; 
 114   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V6.12  _衉___                                                                 09/02/2007 23:23:36 PAGE 3   

   CODE SIZE        =    263    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       1
   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 + -