hd7279_key.c
来自「开发环境为CCS。DSP12个典型例子源码」· C语言 代码 · 共 297 行
C
297 行
// TI File $Revision: /main/3 $
// Checkin $Date: July 2, 2007 11:33:22 $
//###########################################################################
//
// FILE: HD7279_KEY.c
//
// TITLE: DSP2812 Device Getting Started Program.
//
// ASSUMPTIONS:
//
// This program requires the DSP281x V1.00 header files.
// As supplied, this project is configured for "boot to H0" operation.
//
// Other then boot mode configuration, no other hardware configuration
// is required.
//
//
//###########################################################################
// $TI Release: DSP281x Header Files V1.11 $
// $Release Date: September 26, 2007 $
//###########################################################################
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
void long_delay(void);
void short_delay(void);
void delay10ms(unsigned char);
void Write7279(unsigned char, unsigned char);
unsigned char read7279(unsigned char);
void send_byte(unsigned char);
unsigned char receive_byte(void);
void Gpio_select(void);
void Led_init(void);
#define CS GpioDataRegs.GPBDAT.bit.GPIOB15
#define CLK GpioDataRegs.GPBDAT.bit.GPIOB14
#define DATA GpioDataRegs.GPDDAT.bit.GPIOD5
#define KEY GpioDataRegs.GPDDAT.bit.GPIOD6
#define CMD_RESET 0xa4 //复位指令
#define CMD_TEST 0xbf //测试指令
#define DECODE0 0x80 //下载数据并按0方式译码,需要与具体数据下在其它格式作位或运算
#define DECODE1 0xc8 //下载数据并按1方式译码,需要与具体数据下在其它格式作位或运算
#define CMD_READ 0x15 //读键盘
#define UNDECODE 0x90 //下载数据不译码,需要与具体数据下在其它格式作位或运算
#define RTL_CYCLE 0xa3 //循环左移指令
#define RTR_CYCLE 0xa2 //循环右移指令
#define RTL_UNCYL 0xa1 //左移指令
#define RTR_UNCYL 0xa0 //右移指令
#define ACTCTL 0x98 //消隐控制,后跟控制数据
#define SEGON 0xe0 //段点亮指令,后跟控制数据
#define SEGOFF 0xc0 //端关闭指令,后跟控制数据
#define BLINKCTL 0x88 //闪烁控制,后跟控制数据
unsigned char key_number,j,k;
unsigned char FLAG;
unsigned int tmr;
unsigned long wait_cnter;
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
Gpio_select();
IER |= M_INT1;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
send_byte(CMD_RESET);
/*按键按下时数码管显示数字信息*/
while(1)
{
if(!KEY)
{
key_number=0xff;
key_number=read7279(CMD_READ);
if( key_number==2)
{
Write7279(DECODE1,0x07);
delay10ms(1500);
}
else if(key_number==3)
{
Write7279(DECODE1+1,0x06);
delay10ms(1500);
}
else if(key_number==6)
{
Write7279(DECODE1+2,0x05);
delay10ms(1500);
}
else if(key_number==7)
{
Write7279(DECODE1+3,0x04);
delay10ms(1500);
}
else if(key_number==1)
{
Write7279(DECODE1+4,0x03);
delay10ms(1500);
}
else if(key_number==5)
{
Write7279(DECODE1+5,0x02);
delay10ms(1500);
}
else if(key_number==4)
{
Write7279(DECODE1+6,0x01);
delay10ms(1500);
}
else if(key_number==0)
{
Write7279(DECODE1+7,0x00);
delay10ms(1500);
}
else
{
}
}
}
}
//******************************************************
//
// 发送一个字节函数:send_byte()
//
//******************************************************
void send_byte( unsigned char out_byte)
{
unsigned char i;
CS=0;
EALLOW;
GpioMuxRegs.GPDDIR.bit.GPIOD5=1;
EDIS;
long_delay();
for (i=0;i<8;i++)
{
if (out_byte&0x80)
{
DATA=1;
}
else
{
DATA=0;
}
CLK=1;
short_delay();
CLK=0;
short_delay();
out_byte=out_byte*2;
}
DATA=0;
}
void long_delay(void)
{
unsigned char i;
for (i=0;i<0x30;i++);
}
void short_delay(void)
{
unsigned char i;
for (i=0;i<8;i++);
}
void Write7279(unsigned char command, unsigned char dta)
{
send_byte(command);
send_byte(dta);
}
unsigned char read7279(unsigned char command)
{
send_byte(command);
return(receive_byte());
}
//******************************************************
//
// 接收一个字节函数:receive_byte()
//
//******************************************************
unsigned char receive_byte(void)
{
unsigned char i, in_byte=0;
DATA=1;
EALLOW;
GpioMuxRegs.GPDDIR.bit.GPIOD5=0;
EDIS;
long_delay();
for (i=0;i<8;i++)
{
CLK=1;
short_delay();
in_byte=in_byte*2;
if (DATA)
{
in_byte=in_byte|0x01;
}
CLK=0;
short_delay();
}
DATA=0;
EALLOW;
GpioMuxRegs.GPDDIR.bit.GPIOD5=1;
EDIS;
return (in_byte);
}
void delay10ms(unsigned char time)
{
unsigned char i;
unsigned int j;
for (i=0;i<time;i++)
{
for(j=0;j<0x390;j++)
{
if (!KEY)
{
;
}
}
}
}
//******************************************************
//
// LED初始化函数:Led_init()
//
//******************************************************
void Led_init(void)
{
send_byte(CMD_RESET);
delay10ms(10);
Write7279(ACTCTL,0xFF);
delay10ms(10);
Write7279(DECODE1,0x00);
delay10ms(10);
Write7279(DECODE1+1,0x01);
delay10ms(10);
Write7279(DECODE1+2,0x02);
delay10ms(10);
Write7279(DECODE1+3,0x03);
delay10ms(10);
Write7279(DECODE1+4,0x04);
delay10ms(10);
Write7279(DECODE1+5,0x05);
delay10ms(10);
Write7279(DECODE1+6,0x06);
delay10ms(10);
Write7279(DECODE1+7,0x07);
delay10ms(10);
}
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPBMUX.bit.C6TRIP_GPIOB15=0;
GpioMuxRegs.GPBMUX.bit.C5TRIP_GPIOB14=0;
GpioMuxRegs.GPDMUX.bit.T3CTRIP_PDPB_GPIOD5=0;
GpioMuxRegs.GPDMUX.bit.T4CTRIP_SOCB_GPIOD6=0;
GpioMuxRegs.GPBDIR.bit.GPIOB15=1;
GpioMuxRegs.GPBDIR.bit.GPIOB14=1;
GpioMuxRegs.GPDDIR.bit.GPIOD6=0;
EDIS;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?