4731|5

6040

帖子

203

TA的资源

版主

楼主
 

【PSOC4心得】IO口,PWM,点亮LED [复制链接]

不得不承认,PSOC的功能是非常强大的,主要归因于其内部丰富可配置的数字外设和模拟外设。以前没接触过PSOC,刚一入手的时候着实有些丈二和尚摸不着头脑,习惯与传统的MCU设计方式,对于这个不需要编程来配置外设的PSOC4,用IO口点亮个LED都不知道从何下手。PSOC4几乎都是使用原理图的方式来规划外设和IO口,虽然最终都是通过配置寄存器来实现的,但是寄存器操作的方式并没给用户提供友好的接口,所以使用外设模块编译生成的接口函数式首选方式,即使用一个IO口点亮LED,也要通过原理图来设计。
我今天只是初步了解了下IO口,IO的输入输出模式很多,高阻输入、上下拉输入、Push-pull输出、OD输出(OD居然还能输出高OD),IO配置是非常灵活的,一般数字功能可以随便映射到某个IO口,任何几个IO口都可以通过ControlRegStatusReg组成一组总线。
例如可以使用ControlReg模块同时控制三个LED
因此可以使用
    uint8 reg=0;
    for(;;)
    {
       Control_Reg_Write(reg++);
        CyDelay(500);
}
来循环显示7中颜色。
我还用PWM模块写了个LED颜色逐渐变化的程序,看起来还算漂亮,分享一下:
原理图:
主要代码:
void main()
{
    int red=65535, green=65535, blue=65535;
    uint8 r=0, g=0, b=0;

    Clock_1_Start();
    PWM_1_Start();
    PWM_2_Start();
    PWM_1_WriteCompare1(65535);
    PWM_1_WriteCompare2(65535);
    PWM_2_WriteCompare1(65535);
    for(;;)
    {
       if (r)
       {
           red += 30;
           if (red > 65535){ red = 65535; r = 0; }
       }
       else
       {
           red -= 30;
           if (red < 0) { red = 0; r = 1;}
       }
       if (g)
       {
           green += 20;
           if (green > 65535){ green = 65535; g = 0; }
       }
       else
       {
           green -= 20;
           if (green < 32768) { green = 32768; g = 1;}
       }
       if (b)
       {
           blue += 10;
           if (blue > 65535){ blue = 65535; b = 0; }
       }
       else
       {
           blue -= 10;
           if (blue < 32768) { blue = 32768; b = 1;}
       }
       CyDelay(1);
       PWM_1_WriteCompare1(red);
       PWM_1_WriteCompare2(green);
       PWM_2_WriteCompare1(blue);
    }
}

最后晒一晒我的业余工作场所照,业余时间主要是看电脑和听收音机了


[ 本帖最后由 lcofjp 于 2013-11-16 22:37 编辑 ]
此帖出自单片机论坛

最新回复

挺好的,谢谢分享!!!  详情 回复 发表于 2014-6-13 17:19

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

1453

帖子

18

TA的资源

纯净的硅(高级)

沙发
 
楼主好样的.
BTW,收音机看起来不错
此帖出自单片机论坛

点评

效果还说的过去,调台比较麻烦,换个台要转好几圈,常听的台在高低两个频段。  详情 回复 发表于 2013-11-17 09:53
 
个人签名http://weibo.com/u/1391449055
 

回复

6040

帖子

203

TA的资源

版主

板凳
 

回复 沙发sacq 的帖子

效果还说的过去,调台比较麻烦,换个台要转好几圈,常听的台在高低两个频段。
此帖出自单片机论坛

点评

第一个例子里说“ Control_Reg_Write(reg++);”undefined reference to `Control_Reg_Write',为什么呀  详情 回复 发表于 2014-5-6 15:54
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

4
 
lcofjp 发表于 2013-11-17 09:53
效果还说的过去,调台比较麻烦,换个台要转好几圈,常听的台在高低两个频段。

第一个例子里说“ Control_Reg_Write(reg++);”undefined reference to `Control_Reg_Write',为什么呀
此帖出自单片机论坛
 
 
 

回复

3

帖子

1

TA的资源

一粒金砂(初级)

5
 
挺好的,很适合初学者
此帖出自单片机论坛
 
 
 

回复

3

帖子

1

TA的资源

一粒金砂(初级)

6
 
挺好的,谢谢分享!!!
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表