查看: 1183|回复: 0

[S08P-Lite体验]三.点个灯+呼吸

[复制链接]
  • TA的每日心情
    开心
    2021-6-16 07:43
  • 签到天数: 155 天

    [LV.7]常住居民III

    9

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1150
    最后登录
    2021-11-12
    发表于 2021-1-16 12:56:57 | 显示全部楼层 |阅读模式
    本帖最后由 alicekuonji 于 2021-1-22 22:29 编辑

    最开始,我们可以参考官方提供的例程,在里面寻找LED的定义,了解如何在官方的基础之上开发,官方如何设计对应的结构体。


    1. #define LED0_Init()                 PORT_PTEOE_PTEOE7 = 1
    2. #define LED0_Toggle()                    PORT_PTED_PTED7  ^= 1
    3. #define LED0_On()                    PORT_PTED_PTED7   = 0
    4. #define LED0_Off()                    PORT_PTED_PTED7   = 1
    复制代码
    1. <blockquote>/*** PORT_PTEOE - Port E Output Enable Register; 0x000030B4 ***/
    复制代码
    我们先通过宏定义,以便对控制LED的引脚进行操作
    1. #define LED0 PORT_PTED_PTED7
    2. #define LED1 PORT_PTGD_PTGD0
    3. #define LED2 PORT_PTGD_PTGD1
    4. #define LED3 PORT_PTGD_PTGD2
    5. #define LED4 PORT_PTGD_PTGD3
    6. #define LED5 PORT_PTHD_PTHD2
    7. #define LED6 PORT_PTHD_PTHD6
    8. #define LED7 PORT_PTHD_PTHD7
    复制代码
    然后可以根据已存的结构体进行对LED的初始化,也可以自行阅读参考手册用寄存器写法
    1. void LED_Init(void) {
    2.         
    3.         /* LED Initial */
    4.         PORT_PTEOE_PTEOE7 = 1;
    5.         PORT_PTGOE_PTGOE0 = 1;
    6.         PORT_PTGOE_PTGOE1 = 1;
    7.         PORT_PTGOE_PTGOE2 = 1;
    8.         PORT_PTGOE_PTGOE3 = 1;
    9.         PORT_PTHOE_PTHOE2 = 1;
    10.         PORT_PTHOE_PTHOE6 = 1;
    11.         PORT_PTHOE_PTHOE7 = 1;
    12.         
    13.         /* LED OFF */
    14.         PORT_PTED_PTED7 = 1;
    15.         PORT_PTGD_PTGD0 = 1;
    16.         PORT_PTGD_PTGD1 = 1;
    17.         PORT_PTGD_PTGD2 = 1;
    18.         PORT_PTGD_PTGD3 = 1;
    19.         PORT_PTHD_PTHD2 = 1;
    20.         PORT_PTHD_PTHD6 = 1;
    21.         PORT_PTHD_PTHD7 = 1;
    22. }

    23. void LED_Init(void) {

    24.         /* LED Initial */
    25.         PORT_PTEOE |= 0x80;
    26.         PORT_PTGOE |= 0x0f;
    27.         PORT_PTHOE |= 0xc4;
    28.         
    29.         /* LED OFF */
    30.         PORT_PTED |= 0x80;
    31.         PORT_PTGD |= 0x0f;
    32.         PORT_PTHD |= 0xc4;
    33. }
    复制代码
    最后写主函数
    1. void main(void) {
    2.         
    3.     EnableInterrupts;
    4.     LED_Init();
    5.     while(1)
    6.     {
    7.             PORT_PTED &= ~0x80;
    8.             PORT_PTGD &= ~0x0f;
    9.             PORT_PTHD &= ~0xc4;
    10.             delay_ms(1000);
    11.             PORT_PTED |= 0x80;
    12.             PORT_PTGD |= 0x0f;
    13.             PORT_PTHD |= 0xc4;
    14.             delay_ms(1000);
    15.     }
    16. }
    复制代码


    会点灯之后,我们可以加一个简易的呼吸灯,通过普通延时实现
    1. #define duty 1000

    2. void main(void) {
    3.         unsigned i = 0;
    4.     EnableInterrupts;
    5.     LED_Init();
    6.     Button_Init();
    7.     while(1) {
    8.             for(i=0; i<duty; i++) {
    9.                     LED0 = 0;
    10.                     delay(i);
    11.                     LED0 = 1;
    12.                     delay(duty-i);
    13.             }
    14.             for(i=duty; i>0; i--) {
    15.                     LED0 = 0;
    16.                     delay(i);
    17.                     LED0 = 1;
    18.                     delay(duty-i);
    19.             }            
    20.     }
    21. }
    复制代码


    效果图后面再补吧


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-25 13:43 , Processed in 0.104108 second(s), 18 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表