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

📄 s51yk.lst

📁 基于89C52红外遥控解码数码管显示,用用红外遥控在数码管上显示
💻 LST
字号:
C51 COMPILER V6.12  S51YK                                                                  01/28/2003 20:03:39 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE S51YK
OBJECT MODULE PLACED IN .\s51yk.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE .\s51yk.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*红外遥控解码数码管显示实验
   2          程序说明:本程序要用数码管显示遥控接头解出来的码值,并配有蜂鸣器鸣叫
   3          作者:RF-X1开发板团队
   4          日期:2008-07-20
   5          */  
   6                #include <reg51.h>
   7                #define c(x) (x*120000/120000) 
   8          
   9                sbit Ir_Pin=P1^7;   //遥控接头接口	
  10          	   sbit beep=P3^7;		//蜂鸣器接口
  11                unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
  12                0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                        //共阳极数码显示码0-F.
  13                unsigned char code Led_Sel[]={0xfe,0xfd,0xfb,0xf7};
  14                unsigned char Led_Buf[4]; //显示缓冲区
  15                char Led_Index;                   //位选
  16                unsigned char Ir_Buf[4]; //用于保存解码结果
  17          
  18          /******************************************/ 
  19          /*              延时子程序                */ 
  20          /******************************************/ 
  21          		void delay_50ms(unsigned int t)
  22          		{
  23   1       		unsigned int j;   
  24   1       		for(;t>0;t--) 
  25   1        		  for(j=6245;j>0;j--) 
  26   1      			{;}
  27   1      		}
  28          
  29          /******************************************/ 
  30          /*          数码管定时扫描                */ 
  31          /******************************************/ 
  32                timer0() interrupt 1 using 1
  33                {
  34   1            TL0=65536-1000;
  35   1            TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
  36   1            P0=0xff;
  37   1            P2=Led_Sel[Led_Index];                            //位选
  38   1            P0=Led_Tab[Led_Buf[Led_Index]];                    //段选
  39   1      
  40   1            if(++Led_Index>3) Led_Index=0;                    //四个扫描完了,到第一个数码管
  41   1            }
  42          
  43          /******************************************/ 
  44          /*        获取码值的低位                  */ 
  45          /******************************************/ 
  46                unsigned int Ir_Get_Low()
  47                {
  48   1            TL1=0;
  49   1            TH1=0;
  50   1            TR1=1;
  51   1            while(!Ir_Pin && (TH1&0x80)==0);                
  52   1            TR1=0;           
  53   1            return TH1*256+TL1;
  54   1            }
  55          
C51 COMPILER V6.12  S51YK                                                                  01/28/2003 20:03:39 PAGE 2   

  56          /******************************************/ 
  57          /*        获取码值的高位                  */ 
  58          /******************************************/
  59                unsigned int Ir_Get_High()
  60                {
  61   1            TL1=0;
  62   1            TH1=0;
  63   1            TR1=1;
  64   1            while(Ir_Pin && (TH1&0x80)==0);
  65   1            TR1=0;
  66   1            return TH1*256+TL1;
  67   1            }
  68          
  69          /******************************************/ 
  70          /*            主函数		                  */ 
  71          /******************************************/
  72                main()
  73                {
  74   1            unsigned int temp;
  75   1            char i,j;
  76   1            Led_Index=1;
  77   1      
  78   1            TMOD=0x11;
  79   1            TL0=65536-1000;
  80   1            TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
  81   1            EA=1;
  82   1            ET0=1;
  83   1            TR0=1;
  84   1      
  85   1            Led_Buf[0]=0;
  86   1            Led_Buf[1]=0;
  87   1            Led_Buf[2]=0;
  88   1            Led_Buf[3]=0; //显示区设成0
  89   1            do{
  90   2            restart:
  91   2            while(Ir_Pin);
  92   2            temp=Ir_Get_Low();
  93   2            if(temp<c(8500) || temp>c(9500)) continue;//引导脉冲低电平9000
  94   2            temp=Ir_Get_High();
  95   2            if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲高电平4500
  96   2            for(i=0;i<4;i++) //4个字节
  97   2            for(j=0;j<8;j++) //每个字节8位
  98   2            {
  99   3            temp=Ir_Get_Low();
 100   3            if(temp<c(200) || temp>c(800)) goto restart;
 101   3            temp=Ir_Get_High();
 102   3            if(temp<c(200) || temp>c(2000)) goto restart;
 103   3            Ir_Buf[i]>>=1;
 104   3            if(temp>c(1120)) Ir_Buf[i]|=0x80;
 105   3            }
 106   2            Led_Buf[0]=Ir_Buf[2]&0xf;
 107   2            Led_Buf[1]=(Ir_Buf[2]/16)&0xf;
 108   2            Led_Buf[2]=Ir_Buf[3]&0xf;
 109   2            Led_Buf[3]=(Ir_Buf[3]/16)&0xf; //显示结果
 110   2      	  P1=Ir_Buf[2];
 111   2            beep=0;
 112   2      	  delay_50ms(2);
 113   2      	  beep=1;
 114   2            }
 115   1      
 116   1      	  while(1);
 117   1         
C51 COMPILER V6.12  S51YK                                                                  01/28/2003 20:03:39 PAGE 3   

 118   1            }
 119          	 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    495    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       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 + -