📄 keilulink
字号:
/****************************************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 + -