📄 keyled.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 + -