void Delay1ms(unsigned int uiDelay)
{
unsigned int i;
for ( ; uiDelay > 0; uiDelay--)
{
/* 大约延时1ms */
for (i = 0; i <320; i++);
}
}
/* end file */
主函数其实也很简单:
int main(void)
{
/* 控制LED灯闪烁 */
unsigned char i;
/* 驱动无源蜂鸣器 */
unsigned int j;
/* 将P1.0、P1.1设置为IO口 */
P1SEL &= ~0x03;
/* 将P1.0、P1.1设置为IO口的输出 */
P1DIR |= 0x03;
/* 将P2.0设置为IO口 */
P2SEL &= ~0x01;
/* 将P2.0设置为IO口输出 */
P2DIR |= 0x01;
/* 主循环 */
while(1)
{

/* LED1,LED2闪烁10次 */
for (i = 0; i <10; i++)
{
/* P1.0----LED2,P1.1----LED1 */
/* P1.0,P1.1输出高电平,即点亮LED2,LED1 */
/* FC : 1111 1100*/
P1 = (P1 & 0xFC) | 0x03;
Delay1ms(1000);
/* P1.0,P1.1输出低电平,即熄灭LED2,LED1 */
/* FC : 1111 1100*/
P1 = (P1 & 0xFC) & (~0x03);
Delay1ms(1000);
}
/* 给出500HZ的方波驱动 */
for(j = 0; j <1000; j++)
{
/* P2.0----蜂鸣器 */
P2 = (P2 & 0xFE) & (~0x01);
Delay1ms(1);
P2 = (P2 & 0xFE) | 0x01;
Delay1ms(1);
}
}
}
/* end file */
这里需要注意的是,MT254X蓝牙4.0开发板使用的无源蜂鸣器,那么我们需要产生一个方波来驱动。如这代码:
/* 给出500HZ的方波驱动 */
for(j = 0; j <1000; j++)
{
/* P2.0----蜂鸣器 */
P2 = (P2 & 0xFE) & (~0x01);
Delay1ms(1);
P2 = (P2 & 0xFE) | 0x01;
Delay1ms(1);
}
如果是有缘蜂鸣器,则没有那么麻烦,直接给出低电平驱动。为什么是低电平,我们看下原理图:
使用的PNP三极管,并且使用续流二极管保护蜂鸣器。
第五节 LCD12864显示
上一节我们成功控制了LED和蜂鸣器,这一节我们马不停蹄接着LCD12864的控制。
为了系统能够稳定的工作,首先我们将系统时钟切换到32M的外部晶振,为了自由配置所需要的时钟,主要借助于CLKCONCMD.OSC选择系统主时钟,而借助于CLKCONCMD.OSC32K则用于选择芯片32K时钟源!而低功耗模式设置时,需要借助于SLEEPCMD寄存器,在《CC253x- CC2540-41Applications User‘s Guide.pdf>中并没有说明SLEEPCMD第二位功能,如下所示:
但是参考cc2430芯片的说明书可以发现,对应的SLEEP寄存器则有说明,如下所示,这个是TI有意隐藏芯片细节,当SLEEPCMD.OSC_PD为0时,32MHz晶振与16MHz RC振荡器都会起振:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-31732-4.html
不要一天都在自己近海训练