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

📄 keilulink

📁 EasyARM_Keil.zip
💻
字号:
/****************************************Copyright (c)*************************
**                      Guangzou ZLG-MCU Development Co.,LTD.
**                            graduate school
**                        http://www.zlgmcu.com
**
**---------------------------  File Info--------------------------------------
** File Name: 			LPC2200Demo.c
** Last modified Date:  2004-09-23
** Last Version: 
** Descriptions:
**
**-----------------------------------------------------------------------------
** Created By: 		梁伯福
** Created date: 	2004-09-23
** Version:   		1.0
** Descriptions:	demo uVision3 and EasyARM 2100
**
**-----------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*******************************************************************************/
#include "LPC2200Demo.h"
#include "I2CINT.h"
#include "zlg7290.h"

uint32 v1,v2,v3;
//cmd.exe /C copy LPC_IAP_128.axf ..\LPC_IAP_128.FLX
/****************************************************************************
* 函数名称:main()
* 功能描述:控制数码管、LED1-4、蜂鸣器和串口。
****************************************************************************/
int  main(void)
{
	const char *strHW = "Hello, World!\n";
	
	// 使用UART0,I2C,其它为GPIO
	PINSEL0 = 0x00000055;
	PINSEL1 = 0x00000000;

	IO0DIR |= SPI_IOCON | BEEP;	// 设置SPI等控制口为输出

	UART0_Init();
	I2C_Init(30000);

  	// 控制数码管显示, 使用7290,执行一次
	CtrlNumber();
	
	while(1)	
	{
		// 从串口发送字符串
		UART0_SendStr(strHW);				
		

		// 控制发光二极管显示
		CtrlLED();
		
		
		// 控制蜂鸣器报警
		IO0CLR = BEEP;
		DelayNS(20);
		IO0SET = BEEP;
		DelayNS(20);
	}
	
	return(0);
}


/****************************************************************************
* 函数名称:HC595_SendData()
* 功能描述:向74HC595发送一字节数据,高位先发送。
* 入口参数:data	要发送的数据
* 出口参数:无
****************************************************************************/
void  HC595_SendData(uint8 data)
{
	uint8 i;
	
	IO0CLR = SPI_CS;

	//发送8位数据
	for (i = 0; i < 8; i++)	
	{
		IO0CLR = SPI_CLK;

		// 设置SPI的DATA输出值
		if ((data & 0x80) != 0)
		{
			IO0SET = SPI_DATA;
		}
		else
		{
			IO0CLR = SPI_DATA;
		}
		
		data <<= 1;

		IO0SET = SPI_CLK;
	}
	
	IO0SET = SPI_CS;
}


/****************************************************************************
* 函数名称:CtrlLED()
* 功能描述:控制发光二极管显示
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CtrlLED()
{
	static uint8 data = 0;
	static int8  shiftBit = 8;
	static uint8 bLeftShift = TRUE;
	int8 i = 0;

	if (bLeftShift)
	{
		for (i = 0; i < shiftBit; i++)
		{
			HC595_SendData(~(data | 0x80 >> i));	// 低电平驱动,所以取反后再显示
			DelayNS(2);
		}

		if (--shiftBit < 0)
		{
			shiftBit = 8;
			data = 0;
			bLeftShift = !bLeftShift;
		}

		data |= 0x80 >> shiftBit;
		HC595_SendData(~data);
	}
	else
	{
		for (i = 0; i < shiftBit; i++)
		{
			HC595_SendData(~(data | 0x01 << i));	// 低电平驱动,所以取反后再显示
			DelayNS(2);
		}

		if (--shiftBit < 0)
		{
			shiftBit = 8;
			data = 0;
			bLeftShift = !bLeftShift;
		}

		data |= 1 << shiftBit;
		HC595_SendData(~data);
	}
}


/****************************************************************************
* 名称:I2C_Init()
* 功能:主模式I2C初始化,包括初始化其中断为向量IRQ中断。
* 入口参数:fi2c		初始化I2C总线速率,最大值为400K
* 出口参数:无
****************************************************************************/
void I2C_Init(uint32 fi2c)
{
	if(fi2c > 400000) fi2c = 400000;
	
	PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x50;	// 设置I2C控制口有效
	
	v1 = Fpclk/fi2c;
	v2 = (Fpclk/fi2c)/2;
	v3 = (Fpclk/fi2c + 1)/2;

	I2SCLH   = (Fpclk/fi2c + 1) / 2;			// 设置I2C时钟为fi2c
	I2SCLL   = (Fpclk/fi2c) / 2;
	I2CONCLR = 0x2C;
	I2CONSET = 0x40;							// 使能主I2C
	
	/* 设置I2C中断允许 */
	VICIntSelect = 0x00000000;					// 设置所有通道为IRQ中断
	VICVectCntl0 = 0x29;						// I2C通道分配到IRQ slot 0,即优先级最高
	VICVectAddr0 = (int)IRQ_I2C;				// 设置I2C中断向量地址	
	VICIntEnable = 0x0200;						// 使能I2C中断 
}


/****************************************************************************
* 函数名称:CtrlNumber()
* 功能描述:控制数码管显示
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CtrlNumber(void)
{
 	const uint8 dispBuf[] = {0x0F, 0x00, 0x00, 0x02, 0x02, 0x0c, 0x16, 0x14};

	DelayNS(10);						// 一定要延时一段时间
	ZLG7290_SendBuf(dispBuf, 8);		// 显示
	ZLG7290_SendCmd(ZLG7290, 0x1);  	// 闪烁
}


/****************************************************************************
* 函数名称:UART0_Init()
* 功能描述:初始化串口,9600波特率,8位数据位,1位停止位,无奇偶校验。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_Init(void)
{
	uint32 temp = Fpclk/16/9600;
	
	U0LCR = 0x83;				// DLAB = 1,可设置波特率
	U0DLL = temp % 256;
	U0DLM = temp / 256;
	U0LCR = 0x03;
}


/****************************************************************************
* 函数名称:UART0_SendData()
* 功能描述:发送一字节数据到串口
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_SendData(uint8 data)
{
	U0THR = data;					// 发送数据
	
	while ( (U0LSR & 0x20) == 0);	// 等待数据发送完毕	
}


/****************************************************************************
* 函数名称:UART0_SendStr()
* 功能描述:发送字符串到串口
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_SendStr(const char *str)
{
	if (str != 0)
	{
		while (*str != '\0')
		{
			UART0_SendData(*str++);
		}
	}
}


/****************************************************************************
* 函数名称:DelayNS
* 功能描述:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{
	uint32  i;

	for ( ; dly>0; dly--)
	{
		for (i=0; i<5000; i++)
		{}
	}	
}

⌨️ 快捷键说明

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