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

📄 remote1.c

📁 单片机做遥控器代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/**************************************************************************/
#include <remote.h>
void main( void )
{
       init_lcd( );
       system_init( );
       while( 1 )
       {
              key_value = kb_scan( );
              if(key_value)
                     key_handle( );
              if( (in_enable)&&(!TR0) )
              {
                     if( (key_value!=0x84)&&(key_value!=0x90) )
 			         {
			                if(cursor_y<3)
  				                   set_cursor(cursor_x,3);
                     }
			  }
       }
}

/**************************************************************************\
*
* 函数名   :void system_init( void )
*
* 功  能   :init system
*
* 参  数   :none
*			
* 返回值   : none
* 
\**************************************************************************/
void system_init( void )
{
       uchar nextpage;
       uint  readaddr;
       FLASH_read( KINDADDR, &kind_info1, 4 );//system kind infomation
       if( kind_info1.kind_num==0 )
       {
               roll_station = 0xff;
               dev_select( );
       }
       else
       {
	           readaddr = kind_info1.curr_kind_index * 256 + DEVICEBASE;//the kind device addr
               FLASH_read( readaddr, &device_info1, 12 );//the kind device infomation
               if( device_info1.device_num==0 )
               {
                        roll_station = 0xff;
                        dev_select( );
               }
               else
               {
	                     readaddr = readaddr + 12 + 20 * device_info1.curr_device_index;
                        FLASH_read( readaddr, &curr_device, 20 );//current device infomation

	                    readaddr = curr_device.param_addr;
	                    FLASH_read( readaddr, &curr_param_file_info, 7);//param file infomation

                        disp_base_addr = 20*curr_param_file_info.code_length + 7 + readaddr;//disp param base address
	                    param_size = (12+curr_param_file_info.code_length)*10 + 3;
                        //some variable initialize
	                    page_flag = 0;
	                    fun_ctrlH = 0;
	                    fun_ctrlL = 0xff;
	                    old_page_flag = 0;
	                    incept_state = 1;
                        roll_station = 0xff;
                        key_value = 0;
                        old_key_value = 0;
                        t0_counter = 0;
                        in_enable = 0;
                        curr_chan = 0;
                        clear( );
                        nextpage = 0;
                        if( curr_param_file_info.set_disp_num||curr_param_file_info.work_disp_num )
                        {
                                //search for the valid page or go to the input mode
                                while( !display( nextpage,0 ) )
                                {
                                        readaddr = page_flag * param_size + disp_base_addr + 10*(12+curr_param_file_info.code_length) + 1;
                                        nextpage = FLASH_read_B( readaddr );
                                        clear( );
                                        if(nextpage==0)
                                        {
                                                display( nextpage,1 );
                                                if(!page_kind)
                                                {
                                                        open_cursor();
                                                        set_cursor(0,3);
				                                        old_key_value = 0;
                                                        in_enable = 1;
                                                }
                                                break;
                                        }
                                        
                                }
                        }//when not valid page go to the device select for antother device
                        else
                        {
                                roll_station = 0xff;
                                dev_select( );
                        }
               }
       }
}
/**************************************************************************\
*
* 函数名   :void display( uchar dispNo )
*
* 功  能   :display 
*
* 参  数   :dispNo
*			
* 返回值   : uchar 
* 
\**************************************************************************/
uchar display( uchar dispNo,uchar mode )
{
       uchar i;
       uchar j;
       uchar k;
       uchar m;
	   uchar rsult;
       uint  readaddr;

	   rsult = 0;
       readaddr = dispNo*param_size + disp_base_addr + 10*(12+curr_param_file_info.code_length);
	   page_kind = FLASH_read_B( readaddr );
       readaddr = dispNo*param_size + disp_base_addr;
	   for(i=0; i<10; i++)
	   {
              FLASH_read( readaddr, param[i], 10 );
              for(j=0;j<10;j++)
              {
                     if( (param[i][j]!=0)&&(param[i][j]!=32) )
                            break;
              }
              if( j<10 )
              {
                     for(k=0;k<10;k++)
                     {
                            if( param[i][k]>=128 )
                                   break;
                     }
                     if( k<10 )
                            display_hanzi_str(param[i], i, 0, 0);//显示汉字
			         else
			         {
                            if(!page_kind)
                            {
                                   m = 0x30 + dispNo;
                                   disp_char(m, i, 0, 0 );
                                   m = 0x30 + i;
                                   disp_char(m, i, 1, 0 );
                                   disp_char('-', i, 2, 0 );
			                       disp_string( param[i], i, 3, 0);
                            }
                            else
                                   disp_string( param[i], i, 0, 0);
                     }                    
                     rsult = 1;
              }
              else
              {
                     if( (!page_kind)&&mode )
                     {
                            m = 0x30 + dispNo;
                            disp_char(m, i, 0, 0 );
                            m = 0x30 + i;
                            disp_char(m, i, 1, 0 );
                            disp_char('-', i, 2, 0 );
                     }
              }
			  readaddr = readaddr + 12 + curr_param_file_info.code_length;
	   }
       page_flag = dispNo;
	   return rsult;
}
/**************************************************************************\
*
* 函数名   :void  key_handle( void )
*
* 功  能   :key handle 
*
* 参  数   :page
*			
* 返回值   : none 
* 
\**************************************************************************/
void key_handle( void )
{ 
       if( in_enable )
              input_handle( );
       else
       {
              if( page_kind<2 )
                     disp_handle( );       
              else
              {      if( page_flag==100 )
                           dev_sel_handle( );
                     else if( page_flag==101 )
                           dev_watch_handle( );
                     else if( page_flag==102 )
                           R232_down_handle( );
              }
       }
}
/**************************************************************************\
*
* 函数名   :void disp_handle( void )
*
* 功  能   :display handle
*
* 参  数   :dispNo
*			
* 返回值   : none
* 
\**************************************************************************/
void disp_handle( void )
{
       uchar i;
       uchar j;
       uchar m;
       uchar nextpage;
	   uint  readaddr;
	   uint  funcodeaddr;
       uchar NumTab[10] = {0x21,0x22,0x24,0x28,0x30,0x41,0x42,0x44,0x48,0x50};
       //数字键处理
       for(i=0;i<10;i++)
       {
              if( key_value==NumTab[i] )
              {
                      for(j=0;j<10;j++)
                      {
                             if( (param[i][j]!=0)&&(param[i][j]!=32) )
                                    break;
                      }
                      if(j<10)  
                             NumKey_handle( i );
                      break;
              }
       }
       //功能键处理
       if(i==10)
       {
              funcodeaddr = curr_device.param_addr + 7;//function key code address
	          switch(key_value)
	          {
		              case 0x84://频道加
                      if( fun_ctrlL&1 )
                      {
                             readaddr = funcodeaddr;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;

                      case 0x88: //频道减
                      if( fun_ctrlL&2 )
                      {
                             readaddr = funcodeaddr + curr_param_file_info.code_length;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;

                      case 0x90: //声音加
                      if( fun_ctrlL&4 )
                      {
                             readaddr = funcodeaddr + 2*curr_param_file_info.code_length;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;

                      case 0xc1://声音减
                      if( fun_ctrlL&8 )
                      {
                             readaddr = funcodeaddr + 3*curr_param_file_info.code_length;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;

                      case 0xc2: //静音
                      if( fun_ctrlL&0x10 )
                      {
                             readaddr = funcodeaddr + 4*curr_param_file_info.code_length;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;

                      case 0xf0://关机
                      if( fun_ctrlL&0x20 )
                      {
                             readaddr = funcodeaddr + 5*curr_param_file_info.code_length;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;
      
                      case 0xc4://单双切换
                      if( fun_ctrlL&0x40 )
                      {
                             readaddr = funcodeaddr + 6*curr_param_file_info.code_length;
                             code_handle( readaddr, curr_param_file_info.code_type );
                      }
                      break;

                      case 0xe4://遥控器状态切换
                      if( page_kind == 1 )
                      {
                             clear( );
                             old_page_flag = page_flag;
                             nextpage = 0;

⌨️ 快捷键说明

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