[分享] 【CY8CKIT-149 PSoC 4100S测评】+新建空白工程(以Key-LED为例)

DDZZ669   2018-12-14 16:30 楼主
之前的探索都是在官方例程上进行修改,这次我们新建一个空白工程,并添加元件进行项目编写。
并以简单的按键控制LED的小例子进行介绍。

首先是新建一个空白工程,如下图:
1.png

完成后可以看到一个空白的原理图,左边项目列表也只有主函数,如下图:
2.jpg

我们可以打开主函数看一下,并先编译一下,如下图:
3.jpg

在原理图面部拉入一个输入Pin和一个输出Pin,输入作为按键的输入,输出作为控制LED亮灭,如下图:
4.png

板子上有一个用户按键(3.7)和一个用户LED(3.4),分配给引脚配置:
5.png

看一下板子原理图上用户按键和用户LED,按键按下是接地,LED需要高电平点亮:
6.png

先编译一下程序,报错,提升输出需要连接一个东西,如下图:
7.png

我们在原理图上不需要连接LED,可以将这个引脚去掉,双击进行,取消HW connection的勾选,如下图:
8.png

再次编译OK。
我们可以来写主函数了,想要实现的功能是按键按一下,LED的状态翻转一下,即按一下亮,再按一下灭。
写了一个延时函数用于按键消抖时使用。
定义bool变量控制LED的状态。
while(Pin_Key_Read()==0){}语句是等待按键松开。



  1. #include "project.h"

  2. void delay_ms(uint16 t)
  3. {
  4.         uint16 a,b,c;
  5.     for(a=100;a>0;a--)
  6.         for(b=114;b>0;b--)
  7.                    for(c=t;c>0;c--);
  8. }

  9. int main(void)
  10. {
  11.     CyGlobalIntEnable; /* Enable global interrupts. */

  12.     Pin_LED_Write(0);
  13.     /* Place your initialization/startup code here (e.g. MyInst_Start()) */
  14.     _Bool STATE=1;
  15.     for(;;)
  16.     {
  17.         /* Place your application code here. */
  18.         if(Pin_Key_Read()==0)
  19.         {
  20.             delay_ms(10);
  21.             if(Pin_Key_Read()==0)
  22.             {
  23.                 Pin_LED_Write(STATE);
  24.                 STATE=!STATE;
  25.                 while(Pin_Key_Read()==0){}
  26.             }
  27.         }
  28.     }
  29. }


编译下载,LED却常亮,按键无效???
仔细分析,忘了给按键加上拉,因为此时按键引脚位悬空状态。

研究了一下key中的函数,发现好像没有函数可以用于配置上拉模式,最后在原理图界面找到了。
双击Pin_Key,驱动模式Drive mode选择Open drain,drives high(需要取消HW connection勾选),初始状态选择High,如下图:
9.png

再次编译下测,测试OK。
没有录视频,两张测试图片如下:
10.jpg
11.jpg

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复