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

📄 keyled.c

📁 dap下键盘控制程序,很有用哦,希望有所帮助.
💻 C
📖 第 1 页 / 共 2 页
字号:
{

      *MCRC = *MCRC & 0xfff1;    /* 配置PWM9、8、7为IO
/*
 bit 15        0:      reserved
 bit 14        0:      0=IOPF6,     1=IOPF6
 bit 13        0:      0=IOPF5,     1=TCLKINB
 bit 12        0:      0=IOPF4,     1=TDIRB
 bit 11        0:      0=IOPF3,     1=T4PWM/T4CMP
 bit 10        0:      0=IOPF2,     1=T3PWM/T3CMP
 bit 9         0:      0=IOPF1,     1=CAP6
 bit 8         0:      0=IOPF0,     1=CAP5/QEP4
 bit 7         0:      0=IOPE7,     1=CAP4/QEP3
 bit 6         0:      0=IOPE6,     1=PWM12
 bit 5         0:      0=IOPE5,     1=PWM11
 bit 4         0:      0=IOPE4,     1=PWM10
 bit 3         0:      0=IOPE3,     1=PWM9
 bit 2         0:      0=IOPE2,     1=PWM8
 bit 1         0:      0=IOPE1,     1=PWM7
 bit 0         1:      0=IOPE0,     1=CLKOUT    
*/ 

    *PEDATDIR = 0x0e0d; /*** ConfigurePWM9、8、7 pin as an OUTPUT ***/
                                            /****output pwm9\8 = high  pwm7=low**********/
/*
 bit 15-8        0:      EnDIR  1 = output, 0 = input
 bit 7-0         0:      IOPEn  in--1=high,0=low; out--1=high,0=low
 
*/         
}

//--------------------------------------------------------------------
// 函数名称 : void delay_25ms(void)             
// 函数说明 : 25ms延迟
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void delay_25ms()
{
   UINT16 i,j;
   
   for(i=0;i<=1000;i++);
     for(j=0;j<=250;j++);  //延迟250*1000*CLKOUT=250000*CLKOUT
                           //1/CLKOUT=0.1us 
}     
     
//--------------------------------------------------------------------
// 函数名称 : void cs_high(void)             
// 函数说明 : 片选置高
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------    
void cs_high()
{

   asm(" setc xf");
   
}   

//--------------------------------------------------------------------
// 函数名称 : void cs_low(void)             
// 函数说明 : 片选置低
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------    
void cs_low()
{

   asm(" clrc xf");
   
} 

//--------------------------------------------------------------------
// 函数名称 : void send(void)             
// 函数说明 : 发送一个字节 8BIT,高位在前 
// 输入参数 : 发送数据在全局变量send_buff中
// 输出参数 : 无
//-------------------------------------------------------------------- 
void send()
{         
          UINT16  i;
          
          cs_low();                     //片选CS=0
          delay_50us();                 //延时50us
          
          for(i=0;i<8;i++)
          {
               switch(send_buff&0x80)
               {
                   case 0x00:* PEDATDIR = * PEDATDIR & 0xfffb;  //7279data低
                               break;                          
                   case 0x80:* PEDATDIR = * PEDATDIR | 0x0004;  //7279data高
               }
               
               * PEDATDIR=* PEDATDIR | 0x0002;   //7279clk高
               delay_8us();
               * PEDATDIR=* PEDATDIR & 0xfffd;    //7279clk低
               delay_8us();
               send_buff<<=1;
           }
             
          // cs_high();                     //片选CS=1  
                                          //这时,7279CS=1,7279CLK=0
}

//--------------------------------------------------------------------
// 函数名称 : void receive(void)             
// 函数说明 : 接收一个字节 8BIT,高位在前 
// 输入参数 : 接收到的数据在全局变量rece_buff中
// 输出参数 : 无
//-------------------------------------------------------------------- 

void receive()
{
         UINT16 i;
         
         * PEDATDIR = * PEDATDIR & 0xFBF7; //iope2   配置为输入脚,7279发数据
                                         //iope3 = '0',准备接收数据
         delay_50us();

         for(i=0;i<8;i++)
         {
            * PEDATDIR=* PEDATDIR|0x0002; //7279clk高
            
            delay_8us();
            
            data_buff=data_buff|((* PEDATDIR & 0x0004)<<(13-i));//读iope2引脚数据; 
                                                                //把接收到数据放在BIT15~8
            * PEDATDIR=* PEDATDIR & 0xFFFD; //7279clk低
            
            delay_8us();
            
         }
         
         asm(" nop ");                          //在这里设置断点观察data_buff中的值  
         rece_buff=(data_buff>>8) & 0x00ff;     //接收到的数据右移给rece_buff   
          
         data_buff=0x0000;                     //清除data_buff
                       
         * PEDATDIR=* PEDATDIR | 0x040c;      //iope2配置为输出脚=1,7279收数据
                                              //iope3配置为'1',接收7279的数据
         
}

//--------------------------------------------------------------------
// 函数名称 : void int1(void)
// 函数说明 : 中断1的子程序
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
interrupt void int1()           //中断1中断子程序
{         
      UINT16 temp;
    
      temp = *PVIR;
     
     * IFR=0xFFFF;                  //清除所有中断标志,"写1清0" 
     
     if(temp = 0x0001)
     
     {
     
      * XINT1CR=*XINT1CR | 0x8000; //清xint1中断标志
      
     send_buff = CMD_READ;         //读键值指令
     send();

     receive();
     asm(" nop ");
     send_buff = RTL_UNCYL;         //数据左移指令
     send();
     
     send_buff = DECODE1;
     send();
     send_buff = rece_buff;        //将接收到的键值送显示
     send();
     
     show = ~show;
        
     }
       
     cs_high();                   //7279CS置高   
     asm(" clrc INTM");           //开总中断
     
     return;
}


/*
***********************************************************
- 函数名称 : void Delay(int numbers)
- 函数说明 : 延时
- 输入参数 : numbers
- 输出参数 : 无
***********************************************************
*/
void Delay(UINT16 numbers)
{
  	UINT16 i,j;
  	for(i=0;i<40000;i++);
 
  		for(j=0;j<numbers;j++);

  	
  		
} 
	
/*
***********************************************************
- 函数名称 : interrupt void PHANTOM(void)
- 函数说明 : 伪中断子程序
- 输入参数 : 无
- 输出参数 : 无
***********************************************************
*/


interrupt void nothing(void)
{
  
  * IFR=0xFFFF;              //清除所有中断标志,"写1清0"
  asm(" clrc INTM");         //开总中断
  return;
}

/*
************************************************************
	****************** 主函数 *******************
************************************************************
*/


void main()
{

   UINT16  temp;
   
//----------系统初始化-------------------------------  
   asm(" nop ");
   cpu_init();              //初始化CPU
   asm(" nop ");
   iope_init();             //初始化IOPE设置寄存器
   asm(" nop ");
//---------------------------------------------------   
//while(1)                 //用于测试延迟脉冲宽度的程序
//{

//  asm(" clrc xf");
  
//  delay_50us();
  
//  asm(" setc xf");
  
//  delay_50us();
  
//}  
  
   
   
//-----------7279复位--------------------------------
   asm(" nop ");
   send_buff = CMD_RESET;   //复位指令
   send();
   delay_25ms();            //25ms延迟 --复位延迟
   Delay(100);
   asm(" nop ");
//-----------7279测试--------------------------------   
   send_buff = CMD_TEST;    //测试指令
   send();
   Delay(90000);
   Delay(90000);
   Delay(90000);
   asm(" nop ");
//-----------7279复位--------------------------------   
   send_buff = CMD_RESET;   //复位指令
   send();
   delay_25ms();            //25ms延迟 --复位延迟
   Delay(100);
   asm(" nop ");
//-----------7279显示  0\1\2---f----------------------

   for(temp=0;temp<16;temp++)  //送出数据0x00~0x0F
          
          {
             send_buff = DECODE1;    
             send();
             send_buff = temp;
             send();
             Delay(90000);
             send_buff = RTL_UNCYL; //数据左移指令
             send(); 
             Delay(90000);   
          }
//-----------7279复位--------------------------------        
      send_buff = CMD_RESET;   //复位指令
      send(); 
//-----------7279CS='1'-----------------------------
      cs_high();
//-----------外部中断1初始化------------------------           
      xint1_init();            //外部中断1初始化子程序
      asm(" nop ");
//----------- 等待键盘中断--------------------------  
           while(1)
          {
            port8001 = show; 
          }
      
}


⌨️ 快捷键说明

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