?? keyled.c
字號:
/*************************************************************
*Copyright (c) 2005,北京精儀達(dá)盛科技有限公司研發(fā)部
*All rights reserved
*
*文件名稱:keyled.c
*文件標(biāo)示:
*摘 要:本文件內(nèi)容為tms320lf2407 dsp操作鍵盤LED接口器件HD7279
* 的練習(xí)
* * PFDATDIR&=0xFFBF; //7279cs低,iopf6
* * PEDATDIR&=0xFFF7; //7279clk低,iope3
* * PEDATDIR&=0xFFFB; //7279data低,iope2
* * PEDATDIR&=0xFFFD; //7279發(fā)數(shù)據(jù),iope1
* * PFDATDIR|=0x0040; //7279cs高,iopf6
* * PEDATDIR|=0x0008; //7279clk高,iope3
* * PEDATDIR|=0x0004; //7279data高,iope2
* * PEDATDIR|=0x0002; //7279收數(shù)據(jù),iope1
*
*當(dāng)前版本:1.0
*作 者:王飛
*完成日期:2005年2月17日
*
*取代版本:
*原作者 :
*完成日期:
*************************************************************/
/************************文件預(yù)處理***************************/
#include "exp3_2407.h"
/*************************************************************/
/********************全局變量定義與初始化*********************/
unsigned int p;
char send_buff=0x00;
char rece_buff=0x00;
unsigned int data_buff=0x0000;
/*************************************************************/
/*******************函數(shù)、子程序聲明與定義********************/
void sys_ini() //系統(tǒng)初始化子程序
{
/*關(guān)總中斷*/
asm(" setc INTM");
/*抑制符號位擴(kuò)展*/
asm(" clrc SXM");
/*累加器中結(jié)果正常溢出*/
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;
/*清除所有中斷標(biāo)志,"寫1清0"*/
* IFR=0xFFFF;
}
void pdpintb_ini() //int1中斷初始化子程序
{
/*清除所有中斷標(biāo)志*/
* IFR=0xFFFF;
/*使能中斷1*/
* IMR=0x0001;
/*清除pdpintb中斷標(biāo)志*/
* EVBIFRA=0xFFFF;
/*使能pdpintb中斷*/
* EVBIMRA=0x0001;
/*開總中斷*/
asm(" clrc INTM");
}
void delay_8us() //延時(shí)8us子程序
{
unsigned int i;
for(i=0;i<2;i++);
}
void delay_50us() //延時(shí)50us子程序
{
unsigned int j;
for(j=0;j<25;j++);
}
void delay_25ms() //延時(shí)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(); //延時(shí)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發(fā)數(shù)據(jù)*/
* PEDATDIR&=0xFBFD;
delay_50us();
for(s=0;s<8;s++)
{
* PEDATDIR|=0x0008; //7279clk高
delay_8us();
data_buff=data_buff|((* PEDATDIR&0x0004)<<(13-s));//讀iope2引腳數(shù)據(jù);
* PEDATDIR&=0xFFF7; //7279clk低
delay_8us();
}
rece_buff=data_buff>>8;
data_buff=0x0000; //清除data_buff
* PEDATDIR|=0x0402; //將iope2配置為輸出腳,7279收數(shù)據(jù)
}
/*************************************************************/
/*****************中斷服務(wù)子程序聲明與定義********************/
interrupt void nothing() //啞中斷子程序
{
return;
}
interrupt void pdpintb()
{
send_buff=0x15; //讀鍵值指令
send();
receive();
send_buff=0xA1; //數(shù)據(jù)左移指令
send();
send_buff=0xC8;
send();
send_buff=rece_buff;//將接收到的鍵值送顯示
send();
* EVBIFRA=0xFFFF; //清除PDPINTB中斷標(biāo)志
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++) //送出數(shù)據(jù)0x00~0x0F
{
send_buff=0xC8;
send();
send_buff=p;
send();
delay_long();
send_buff=0xA1; //數(shù)據(jù)左移指令
send();
}
send_buff=0xA4; //清除指令
send();
//cs_high();
for(;;)
{
}
}
/***************************結(jié)束******************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -