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

📄 icetek-c6713-a.h

📁 交通指示灯程序,实现红绿信号灯转换,完成指示结果
💻 H
字号:
#include "scancode.h"
#define LCDDELAY 1
// emif  --------------------------------------------------------
#define EMIF_GCTL       0x01800000
#define EMIF_CE1        0x01800004
#define EMIF_CE0        0x01800008
#define EMIF_CE2        0x01800010
#define EMIF_CE3        0x01800014
#define EMIF_SDRAMCTL   0x01800018
#define EMIF_SDRAMTIM   0x0180001C
#define EMIF_SDRAMEXT   0x01800020
#define EMIF_CCFG       0x01840000;
// interrupt  --------------------------------------------------
#define IMH (*(unsigned int *)0x19c0000)
#define IML (*(unsigned int *)0x19c0004)
// timer  -------------------------------------------------------
#define TIMER1CTL (*(unsigned int *)0x01980000)
#define TIMER1PRD (*(unsigned int *)0x01980004)
// McBSP0  ------------------------------------------------------
#define SPCR0 (*(unsigned int *)0x018c0008)
#define PCR0 (*(unsigned int *)0x018c0024)
#define SPCR1 (*(unsigned int *)0x01900008)
#define PCR1 (*(unsigned int *)0x01900024)
// ICETEK-C6713-A -----------------------------------------------
#define LBDS (*(unsigned short int *)0x90100000)
// ICETEK-CTR  --------------------------------------------------
#define CTRGR (*(unsigned short int *)0x0901f0000)
#define CTRKEY (*(unsigned short int *)0x0901f0002)
#define CTRCLKEY (*(unsigned short int *)0x0901f0004)
#define CTRLA (*(unsigned short int *)0x0901f000a)
#define CTRLR (*(unsigned short int *)0x0901f000e)
#define CTRLCDCMDR (*(unsigned short int *)0x0901f0002)
#define CTRLCDCR (*(unsigned short int *)0x0901f0004)
#define CTRLCDLCR (*(unsigned short int *)0x0901f0006)
#define CTRLCDRCR (*(unsigned short int *)0x0901f0008)
// Special values -----------------------------------------------
#define LCDCMDTURNON 0x3f
#define LCDCMDTURNOFF 0x3e
#define LCDCMDSTARTLINE 0xc0
#define LCDCMDPAGE 0xb8
#define LCDCMDVERADDRESS 0x40
// C6713DSP Registers  ------------------------------------------
cregister unsigned int IER,IFR,CSR,ICR,ISTP;

// Variables
unsigned char ledbuf[8],ledx[8];

#define nMusicNumber 52
unsigned int music[nMusicNumber][2]=
{
	{101,1920},{121,1440},{114,480},{101,1920},{151,1920},
	{151,480},{135,480},{121,480},{101,480},{114,960},{121,960},{135,3840},
	{121,480},{114,480},{101,480},{91,480},{101,960},{101,960},
	{76,1920},{101,1920},{114,960},{121,960},{135,1440},{151,480},{151,1920},{0,1920},
	{101,1920},{121,1440},{114,480},{101,1920},{151,1920},
	{151,480},{135,480},{121,480},{101,480},{114,960},{121,960},{135,3840},
	{121,480},{114,480},{101,480},{91,480},{101,960},{101,960},
	{76,1920},{101,1920},{114,960},{121,960},{135,1440},{151,480},{151,1920},{0,1920}
};
unsigned int pwm[8]={ 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e };
unsigned char dbClearKey;

// Functions
void InitInterrupt(void);			// 初始化中断
void init_emif( void );				// 初始化emif接口寄存器
void InitCTR();						// 初始化ICETEK-CTR
void CloseCTR();					// 关闭ICETEK-CTR上各设备
void Delay(unsigned int nTime);		// 延时子程序
void Delay1(unsigned int nTime);	// 延时子程序(带LED显示刷新)
unsigned char GetKey();				// 读取键盘输入
void RefreshLEDArray();				// 刷新发光二极管阵列显示
void SetLEDArray(int nNumber);		// 修改发光二极管阵列显示内容
char ConvertScanToChar(unsigned char cScanCode);	// 将键盘扫描码转换成字符
void LCDCMD(unsigned char dbCommand);	// 向液晶显示器发送命令
void LCDWriteLeft(unsigned char dbData);	// 写液晶显示器左半屏
void LCDCLS();							// 清除液晶显示器显示
void TurnOnLCD();						// 打开液晶显示器

void init_emif( void )
{
	*(int *)EMIF_GCTL     = 0x00000078;
	*(int *)EMIF_CE0      = 0xffffbf93;  /* CE0 SDRAM 16-bit              */
	*(int *)EMIF_CE1      = 0xffffff13;  /* CE1 Flash 16-bit              */
	*(int *)EMIF_CE2      = 0xffffff23;  /* CE2 Daughtercard 32-bit async */
	*(int *)EMIF_CE3      = 0xffffff23;  /* CE3 Daughtercard 32-bit async */
	*(int *)EMIF_SDRAMCTL = 0x53115000;  /* SDRAM control                 */
	*(int *)EMIF_SDRAMTIM = 0x00000578;  /* SDRAM timing (refresh)        */
	*(int *)EMIF_SDRAMEXT = 0x000a8529;  /* SDRAM Extension register      */
}

void CloseCTR()
{
    CTRGR=0; 				 
    CTRLR=0; CTRLR=0x40;
    CTRLR=0x0c0;
	LCDCMD(LCDCMDTURNOFF);	
	dbClearKey=CTRCLKEY;
	LBDS=0;
}

void LCDCMD(unsigned char dbCommand)
{
	CTRLCDCMDR=dbCommand;		
	CTRLCDCR=0;
}

unsigned char GetKey()
{
	unsigned char dbReturn;
	
	dbReturn=CTRKEY;
	dbClearKey=CTRCLKEY;
	return dbReturn;
}

char ConvertScanToChar(unsigned char cScanCode)
{
	char cReturn;
	
	cReturn=0;
	switch ( cScanCode )
	{
		case SCANCODE_0: cReturn='0'; break;
		case SCANCODE_1: cReturn='1'; break;
		case SCANCODE_2: cReturn='2'; break;
		case SCANCODE_3: cReturn='3'; break;
		case SCANCODE_4: cReturn='4'; break;
		case SCANCODE_5: cReturn='5'; break;
		case SCANCODE_6: cReturn='6'; break;
		case SCANCODE_7: cReturn='7'; break;
		case SCANCODE_8: cReturn='8'; break;
		case SCANCODE_9: cReturn='9'; break;
		case SCANCODE_Plus: cReturn='+'; break;
		case SCANCODE_Minus: cReturn='-'; break;
	}
	return cReturn;
}

void InitCTR()
{
   int k;
	
	CTRGR=0;		// 初始化ICETEK-CTR
	CTRGR=0x80;
	CTRGR=0;
	CTRLR=0;		// 关闭东西方向的交通灯
	CTRLR=0x40;	// 关闭南北方向的交通灯
	CTRLR=0x0c1;	// 开启发光二极管显示阵列
	CTRLR=0xc8;    //使能外部中断
	for ( k=0;k<8;k++ )
	{
		ledbuf[k]=0x0ff;		// 显示为空白
		ledx[k]=(k<<4);	// 生成显示列控制字
	}
	k=CTRCLKEY;	// 清除键盘缓冲区
	TurnOnLCD();				// 打开显示
	LCDCLS();				// 清除显示内存
	CTRLCDCMDR=LCDCMDSTARTLINE;		// 设置显示起始行
	CTRLCDCR=0;
}



void Delay1(unsigned int nDelay)
{
	int ii,jj,kk=0;
	for ( ii=0;ii<nDelay;ii++ )
	{
		for ( jj=0;jj<64;jj++ )
		{
			RefreshLEDArray();
			kk++;
		}
	}
}


void InitInterrupt()
{
	// 设置中断控制寄存器
	CSR&=0xfffffffe;	// 关中断 GIE=0
	ISTP=0x00000c00;	// 重置中断向量表到0C00h
   	IMH=0x08000000;		// 指定Timer1产生int15中断
   	IML=0x0a0;			// 指定xint5中断
   	ICR=0xff;			// 清除等待的中断
	IER=0x8023;			// 使能int15、xint5中断
	// 设置定时器产生中断信号的频率
	TIMER1PRD=781250;	// 定时器1的周期=781250, 0.25s
	TIMER1CTL=0x3c0;	// 开始计数
	CSR=CSR|1; 			// 开中断
}


void TurnOnLCD()
{
	CTRLCDCMDR=LCDCMDTURNON;
	Delay(LCDDELAY);
	CTRLCDCR=0;
	Delay(LCDDELAY);  
	CTRLCDCMDR=LCDCMDSTARTLINE;
	Delay(LCDDELAY);
	CTRLCDCR=0;
	Delay(LCDDELAY);
}

void LCDCLS()
{
	int i,j;
	CTRLCDCMDR=LCDCMDSTARTLINE;
	Delay(LCDDELAY);
	CTRLCDCR=0;
	Delay(LCDDELAY);
	for ( i=0;i<8;i++ )
	{
		CTRLCDCMDR=LCDCMDPAGE+i;
		Delay(LCDDELAY);
		CTRLCDCR=0;
		Delay(LCDDELAY);
		CTRLCDCMDR=LCDCMDVERADDRESS;
		Delay(LCDDELAY);
		CTRLCDCR=0;
		Delay(LCDDELAY);
		for ( j=0;j<64;j++ )
		{
			CTRLCDLCR=0;
			Delay(LCDDELAY);
			CTRLCDCR=0;
			Delay(LCDDELAY);
		}
		CTRLCDCMDR=LCDCMDPAGE+i;
		Delay(LCDDELAY);
		CTRLCDCR=0;
		Delay(LCDDELAY);
		CTRLCDCMDR=LCDCMDVERADDRESS;
		Delay(LCDDELAY);
		CTRLCDCR=0;
		Delay(LCDDELAY);
		for ( j=0;j<64;j++ )
		{
			CTRLCDRCR=0;
			Delay(LCDDELAY);
			CTRLCDCR=0;
			Delay(LCDDELAY);
		}
	}
}


void LCDWriteLeft(unsigned char dbData)
{
	CTRLCDLCR=dbData;
	CTRLCDCR=0;
}

void LCDWriteRight(unsigned char dbData)
{
	CTRLCDRCR=dbData;
	CTRLCDCR=0;
}



⌨️ 快捷键说明

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