📄 timer1captocontrolled.c
字号:
/********************************************************************************************
* 文 件 名:Timer1CapToControlLED.c
* 功 能:使用定时器1的输入捕获功能,获取延时参数(通过KEY2),用于控制LED8~LED1的闪烁频率。
* 注 意:根据ARMSKY-LPC213X/214X教学实验开发板原理图可知,LED1~LED8由74HC595_2控制。
* 用跳线帽短接P0.22和595_SI,P1.25和595_SCK,P1.20和595_CS2,P0.10和KEY2。
* 作 者:POWER
* 日 期:2006年7月30号
* 斯凯科技主页:www.armsky.net
* 斯凯科技论坛:www.armsky.net/bbs
*********************************************************************************************/
#include "config.h"
#define SPI_CS ((uint32)0x01<<20) // P1.20引脚模拟SPI的片选信号
#define SPI_DATA ((uint32)0x01<<22) // P0.22引脚模拟SPI的数据信号
#define SPI_CLK ((uint32)0x01<<25) // P1.25引脚模拟SPI的时钟信号
#define H_SPI_CS() IO1SET=SPI_CS // SPI的片选信号置高
#define L_SPI_CS() IO1CLR=SPI_CS // SPI的片选信号置低
#define H_SPI_DATA() IO0SET=SPI_DATA // SPI的数据信号置高
#define L_SPI_DATA() IO0CLR=SPI_DATA // SPI的数据信号置低
#define H_SPI_CLK() IO1SET=SPI_CLK // SPI的时钟信号置高
#define L_SPI_CLK() IO1CLR=SPI_CLK // SPI的时钟信号置低
/********************************************************************************************
* 函数名称:Delay()
* 功 能:软件延时
* 入口参数:count 延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
void Delay(uint32 count)
{
uint32 i;
for(;count>0;count--)
for(i=0;i<10;i++);
}
/********************************************************************************************
* 函数名称:SendDataTo74HC595()
* 功 能:向74HC595发送一字节数据
* 入口参数:data 要发送的数据
* 出口参数:无
* 注 意:发送数据时,高位先发送
*********************************************************************************************/
void SendDataTo74HC595(uint8 data)
{
uint8 i;
L_SPI_CS(); // SPI_CS=0
for(i=0;i<8;i++) // 发送8位数据(1个字节)
{
L_SPI_CLK(); // SPI_CLK=0
/* 设置SPI_DATA输出值 */
if((data & 0x80)!=0)
H_SPI_DATA(); // SPI_DATA=1
else
L_SPI_DATA(); // SPI_DATA=0
data<<=1; // 将要发送的1字节数据左移一位
H_SPI_CLK(); // SPI_CLK=1
}
H_SPI_CS(); // SPI_CS=1
}
/********************************************************************************************
* 函数名称:main()
* 功 能:使用定时器1捕获按键KEY2定时,控制LED8~LED1闪烁
*********************************************************************************************/
int main(void)
{
volatile uint32 i;
PINSEL1&=~((uint32)0x03<<12); // 设置P0.22引脚为GPIO
PINSEL2&=~((uint32)0x01<<3); // 设置P1.20和P1.25引脚为GPIO
IO0DIR|=SPI_DATA; // 设置P0.22,P1.20,P1.25引脚为输出
IO1DIR|=(SPI_CS | SPI_CLK);
/* 设置P0.10连接CAP1.0 */
PINSEL0&=~((uint32)0x03<<20);
PINSEL0|=((uint32)0x02<<20);
T1PR=99; // 分频
T1CCR=1<<1; // 设置CAP1.0下降沿捕获
T1TC=0; // 定时器1计数器清零
T1TCR=0x01; // 启动定时器1
while(1) // 死循环
{
i=T1CR0; // 读取捕获到的T1TC值,用作延时参数
SendDataTo74HC595(0x00); // LED8 ~LED1全灭
Delay(i); // 延时
SendDataTo74HC595(0xff); // LED8 ~LED1全亮
Delay(i);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -