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

📄 ir.c.bak

📁 买板子时赠的实验例子
💻 BAK
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char

/*******************************************
函数定义声明区
*******************************************/
uchar m ;

void delay(unsigned char m) ;
bit k_scan_estimate(void) ;     //flag 为1时表明有按键 ;按下否则无 ;
     bit flag ;                   //按键有无按下标志位 ;
  uchar key_initialization ;   //按键初始化值 ;
  uchar key_prevenvient ;      //按键前一状态值

uchar key_dispose() ;
     uchar key_h ;        
  uchar key_l ;
  uchar key ;  
     uchar key_before ;//键值前一状态 ;



  uchar key_word(uchar key_m) ;//由键码值得出按键所对应的状态值 ;
     uchar code digital_val[]={0xc0,0xf9,0xa4,0xb0,//0123
                               0x99,0x92,0x82,0xf8,//4567
                               0x80,0x90,0x88,0x00,//89AB
                               0x46,0x40,0x86,0x8e} ;//CDEF
    uchar word_inx_before ;
    uchar word_inx ;

uchar data display_buffer[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff} ;
uchar buffer_i ;//计数变量
uchar f ;//位码变量
uchar r ;//段码变量
uchar k ;


void buzzer(void) ;//响片驱动程序
  uchar buzzer_i ;
  sbit buzzer_voice=P3^7 ;
  uchar buzzer_ii ;



/********************************************/


void main(void)
{
  f=0 ;
  r=0xfe ;
  TMOD=0x01 ;
  EA=1 ;
  ET0=1 ;
  TH0=-2000/256 ;
  TL0=-2000%256 ;
  

  TR0=1 ;
while(1)
   {
   k_scan_estimate() ;
   if(flag)
   {
    key_dispose() ;
 if(flag)
 {     buzzer() ;
    if(buffer_i==0)
      {
   for(k=0; k<8 ;k++)
     {display_buffer[k]=0xff ;}
    }
 display_buffer[buffer_i]=digital_val[key_word(key_dispose())] ;
 buffer_i++ ;
 buffer_i&=0x07 ;
    flag=0 ;
}
}
}
}

/*******************************
定时器0中断入口
********************************/

void timer0(void) interrupt 1
{
   TR0=0 ;
   TH0=-2000/256 ;
   TL0=-2000%256 ;
   P0=display_buffer[f] ;
   f++ ;
   f&=0x07 ;
   P2=r ;
   r=_crol_(r,1) ;
   TR0=1 ;
 }



bit k_scan_estimate(void) //键盘状态判断,当有按下时标志位置位否则标志位为0 ;
{
   key_initialization=0xf0 ;
   P1=key_initialization ;
   key_initialization=P1 ;

   if(key_initialization^key_prevenvient)
      {
       delay(50) ;

   if(key_initialization^key_prevenvient)
     {
     key_prevenvient=key_initialization ;
     return(flag=1) ;
     }
  }
  else return(flag=0) ;
       
}




 uchar key_dispose()//按键处理,当有按键按下时将返回键码值
 {key_before=key ;
    key_l=0xfe ;

    while(1)
 {
    P1=key_l ;
 key_h=key_l=P1 ;
 if((key_l&0xf0)!=0xf0)
    {
     key_l&=0x0f ;
  key_h=P1&0xf0 ;
  key=key_l|key_h ;
  return(key) ;
  }
   else
   {
    key_l=_crol_(key_l,1) ;
    if((key_l&0x0f)==0x0f)
        {
       flag=0 ;
          return(key_before) ;
     }
    }
  }
  }


  uchar key_word(uchar key_m)//输入键码值返回段码值 ;
  {


  uchar data key_val[]={0xee,0xed,0xeb,0xe7,//0,1,2,3
                         0xde,0xdd,0xdb,0xd7,//4,5,6,7
                         0xbe,0xbd,0xbb,0xb7,//8,9,A,B
                         0x7e,0x7d,0x7b,0x77} ;//C,D,E,F ;
  uchar *pp=key_val ;
         word_inx=0 ;
for( ;*pp!=key_m ;pp++)
  {   word_inx++ ;
    if(pp>(key_val+0x0f)){return(word_inx_before) ;}
  }
 word_inx_before=word_inx ;
  return(word_inx) ;
  }



  void delay(uchar m)  //延时程式
  {
  uchar n ;
  while(m--)
  {
  for(n=250 ;n>0 ;n--) ;
  }

  }




  void buzzer(void)
  {
   
  
  for(buzzer_ii=150 ;buzzer_ii>0 ;buzzer_ii--)
  {
     for(buzzer_i=250 ;buzzer_i>0 ;buzzer_i--)
     { 
      buzzer_voice=~buzzer_voice ;
   }
   }
   
   }

⌨️ 快捷键说明

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