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

📄 keyled.c

📁 TMS320LF2407试验箱的键盘操作的实验程序
💻 C
字号:
/*************************************************************
 *Copyright (c) 2005,北京精仪达盛科技有限公司研发部
 *All rights reserved
 *
 *文件名称:keyled.c
 *文件标示:
 *摘    要:本文件内容为tms320lf2407 dsp操作键盘LED接口器件HD7279     
 *          的练习
 *         * PFDATDIR&=0xFFBF; //7279cs低,iopf6
 *         * PEDATDIR&=0xFFF7; //7279clk低,iope3
 *         * PEDATDIR&=0xFFFB; //7279data低,iope2
 *         * PEDATDIR&=0xFFFD; //7279发数据,iope1
 *         * PFDATDIR|=0x0040; //7279cs高,iopf6
 *         * PEDATDIR|=0x0008; //7279clk高,iope3
 *         * PEDATDIR|=0x0004; //7279data高,iope2
 *         * PEDATDIR|=0x0002; //7279收数据,iope1
 *
 *当前版本:1.0
 *作    者:王飞
 *完成日期:2005年2月17日
 *
 *取代版本:
 *原作者  :
 *完成日期:
 *************************************************************/

/************************文件预处理***************************/
#include "exp3_2407.h"
/*************************************************************/

/********************全局变量定义与初始化*********************/
unsigned int p;
char send_buff=0x00;
char rece_buff=0x00;
unsigned int data_buff=0x0000;
/*************************************************************/

/*******************函数、子程序声明与定义********************/
void sys_ini()               //系统初始化子程序
{
 /*关总中断*/
  asm(" setc INTM");         
 /*抑制符号位扩展*/
  asm(" clrc SXM");          
 /*累加器中结果正常溢出*/
  asm(" clrc OVM");          
 /*禁止看门狗*/
  * WDCR=0x00E8;             
 /*CLKIN=10M,CLKOUT=40M,使能evb外围模块*/
  * SCSR1=0x0008;            
 /*将iope1,2,3配置为输出脚 ,且iope3初始值为0,iope1,iope2初始值为1*/
  * PEDATDIR=0x0E06;        
 /*将iopf6配置为输出脚,且iopf6初始值为1*/ 
  * PFDATDIR=0x4040;                                                 
 /*清除所有中断标志,"写1清0"*/ 
  * IFR=0xFFFF;                        
}   

void pdpintb_ini()              //int1中断初始化子程序
{
    /*清除所有中断标志*/
     * IFR=0xFFFF;     
    /*使能中断1*/         
     * IMR=0x0001;      
    /*清除pdpintb中断标志*/        
     * EVBIFRA=0xFFFF;   
    /*使能pdpintb中断*/       
     * EVBIMRA=0x0001;   
    /*开总中断*/       
     asm(" clrc INTM");          
}

void delay_8us()             //延时8us子程序
{
     unsigned int i;
     for(i=0;i<2;i++); 
}

void delay_50us()            //延时50us子程序
{
     unsigned int j;
     for(j=0;j<25;j++);
}

void delay_25ms()            //延时25ms子程序
{
     unsigned int k;
     for(k=0;k<12500;k++);
}

void delay_long()
{
     unsigned int n;
     for(n=0;n<60000;n++);
     for(n=0;n<60000;n++);
}

void cs_high()
{
          * PFDATDIR|=0x0040; //7279cs高 
}

void cs_low()
{
          * PFDATDIR&=0xFFBF; //7279cs低
}

void send()
{         
          unsigned int m;
          cs_low();
          delay_50us();                 //延时50us;
          for(m=0;m<8;m++)
          {
               switch(send_buff&0x80)
               {
                   case 0x00:* PEDATDIR&=0xFFFB;break; //7279data低
                   case 0x80:* PEDATDIR|=0x0004; //7279data高
               }
               * PEDATDIR|=0x0008; //7279clk高
               delay_8us();
               * PEDATDIR&=0xFFF7; //7279clk低
               delay_8us();
               send_buff<<=1;
           }

}

void receive()
{
         unsigned int s;
        /*将iope2配置为输入脚,7279发数据*/
         * PEDATDIR&=0xFBFD;
         delay_50us();
         for(s=0;s<8;s++)
         {
            * PEDATDIR|=0x0008; //7279clk高
            delay_8us();
            data_buff=data_buff|((* PEDATDIR&0x0004)<<(13-s));//读iope2引脚数据;  
            * PEDATDIR&=0xFFF7; //7279clk低
            delay_8us();
         }    
         rece_buff=data_buff>>8; 
         data_buff=0x0000;          //清除data_buff              
         * PEDATDIR|=0x0402; //将iope2配置为输出脚,7279收数据
}
/*************************************************************/

/*****************中断服务子程序声明与定义********************/
interrupt void nothing()     //哑中断子程序
{
  return;         
}

interrupt void pdpintb()
{
     send_buff=0x15;    //读键值指令
     send();
     receive();
     send_buff=0xA1; //数据左移指令
     send();
     send_buff=0xC8;
     send();
     send_buff=rece_buff;//将接收到的键值送显示
     send();
     * EVBIFRA=0xFFFF;  //清除PDPINTB中断标志 
     return;
}
/*************************************************************/

/**************************主程序*****************************/
void main()
{ 
          sys_ini();    
          pdpintb_ini();    
      
          delay_25ms();
          send_buff=0xBF;    //测灯指令
          send();
          delay_long();
          delay_long();
          send_buff=0xA4;    //清除指令
          send();  
          for(p=0;p<16;p++)  //送出数据0x00~0x0F
          {
             send_buff=0xC8;    
             send();
             send_buff=p;
             send();
             delay_long();
             send_buff=0xA1; //数据左移指令
             send();    
          }
          send_buff=0xA4;    //清除指令
          send(); 
          //cs_high();
          for(;;)
          {
          } 
}
/***************************结束******************************/

⌨️ 快捷键说明

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