之前的探索都是在官方例程上进行修改,这次我们新建一个空白工程,并添加元件进行项目编写。
并以简单的按键控制LED的小例子进行介绍。
首先是新建一个空白工程,如下图:
完成后可以看到一个空白的原理图,左边项目列表也只有主函数,如下图:
我们可以打开主函数看一下,并先编译一下,如下图:
在原理图面部拉入一个输入Pin和一个输出Pin,输入作为按键的输入,输出作为控制LED亮灭,如下图:
板子上有一个用户按键(3.7)和一个用户LED(3.4),分配给引脚配置:
看一下板子原理图上用户按键和用户LED,按键按下是接地,LED需要高电平点亮:
先编译一下程序,报错,提升输出需要连接一个东西,如下图:
我们在原理图上不需要连接LED,可以将这个引脚去掉,双击进行,取消HW connection的勾选,如下图:
再次编译OK。
我们可以来写主函数了,想要实现的功能是按键按一下,LED的状态翻转一下,即按一下亮,再按一下灭。
写了一个延时函数用于按键消抖时使用。
定义bool变量控制LED的状态。
while(Pin_Key_Read()==0){}语句是等待按键松开。
- #include "project.h"
- void delay_ms(uint16 t)
- {
- uint16 a,b,c;
- for(a=100;a>0;a--)
- for(b=114;b>0;b--)
- for(c=t;c>0;c--);
- }
- int main(void)
- {
- CyGlobalIntEnable; /* Enable global interrupts. */
- Pin_LED_Write(0);
- /* Place your initialization/startup code here (e.g. MyInst_Start()) */
- _Bool STATE=1;
- for(;;)
- {
- /* Place your application code here. */
- if(Pin_Key_Read()==0)
- {
- delay_ms(10);
- if(Pin_Key_Read()==0)
- {
- Pin_LED_Write(STATE);
- STATE=!STATE;
- while(Pin_Key_Read()==0){}
- }
- }
- }
- }
编译下载,LED却常亮,按键无效???
仔细分析,忘了给按键加上拉,因为此时按键引脚位悬空状态。
研究了一下key中的函数,发现好像没有函数可以用于配置上拉模式,最后在原理图界面找到了。
双击Pin_Key,驱动模式Drive mode选择Open drain,drives high(需要取消HW connection勾选),初始状态选择High,如下图:
再次编译下测,测试OK。
没有录视频,两张测试图片如下: