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 + -
显示快捷键?