[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】+ 点亮功能扩展板

[复制链接]
1068|11
 楼主| jinglixixi 发表于 2022-11-6 12:50 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2022-11-6 12:53 编辑

最近得到一个一件法器,它有点类似于风火轮,本是用来进行触摸操作的,但不妨用做一个LED的阵列来使用,见图1所示。
1触摸功能板
MCC不给力的情况下,直接选个例程在上面码代码就可完成功能的设计。
该功能扩展板的原理图,见图2所示。
2原理图
开发板的引脚分布如图3所示,在使用时应避开被占用引脚的使用。
3引脚分布
LED灯与开发板的引脚连接关系如下:
LED16---PF4
LED15---PF3
LED14---PF2
LED13---PD7
LED9---PD6
LED10---PD3
LED11---PD2
LED12---PD1
LED17---PA2
LED18---PA3
LED19---PA4
LED20---PA5
为便于控制,所做的语句定义如下:
  1. #define LED0_init() do { PORTF.OUTSET = PIN4_bm; PORTF.DIRSET = PIN4_bm; } while (0)
  2. #define LED0_turnOn() do { PORTF.OUTCLR = PIN4_bm; } while (0)
  3. #define LED0_turnOff() do { PORTF.OUTSET = PIN4_bm; } while (0)

  4. #define LED1_init() do { PORTF.OUTSET = PIN3_bm; PORTF.DIRSET = PIN3_bm; } while (0)
  5. #define LED1_turnOn() do { PORTF.OUTCLR = PIN3_bm; } while (0)
  6. #define LED1_turnOff() do { PORTF.OUTSET = PIN3_bm; } while (0)

  7. #define LED2_init() do { PORTF.OUTSET = PIN2_bm; PORTF.DIRSET = PIN2_bm; } while (0)
  8. #define LED2_turnOn() do { PORTF.OUTCLR = PIN2_bm; } while (0)
  9. #define LED2_turnOff() do { PORTF.OUTSET = PIN2_bm; } while (0)

  10. #define LED3_init() do { PORTD.OUTSET = PIN7_bm; PORTD.DIRSET = PIN7_bm; } while (0)
  11. #define LED3_turnOn() do { PORTD.OUTCLR = PIN7_bm; } while (0)
  12. #define LED3_turnOff() do { PORTD.OUTSET = PIN7_bm; } while (0)

  13. #define LED4_init() do { PORTD.OUTSET = PIN6_bm; PORTD.DIRSET = PIN6_bm; } while (0)
  14. #define LED4_turnOn() do { PORTD.OUTCLR = PIN6_bm; } while (0)
  15. #define LED4_turnOff() do { PORTD.OUTSET = PIN6_bm; } while (0)

  16. #define LED5_init() do { PORTD.OUTSET = PIN3_bm; PORTD.DIRSET = PIN3_bm; } while (0)
  17. #define LED5_turnOn() do { PORTD.OUTCLR = PIN3_bm; } while (0)
  18. #define LED5_turnOff() do { PORTD.OUTSET = PIN3_bm; } while (0)

  19. #define LED6_init() do { PORTD.OUTSET = PIN2_bm; PORTD.DIRSET = PIN2_bm; } while (0)
  20. #define LED6_turnOn() do { PORTD.OUTCLR = PIN2_bm; } while (0)
  21. #define LED6_turnOff() do { PORTD.OUTSET = PIN2_bm; } while (0)

  22. #define LED7_init() do { PORTD.OUTSET = PIN1_bm; PORTD.DIRSET = PIN1_bm; } while (0)
  23. #define LED7_turnOn() do { PORTD.OUTCLR = PIN1_bm; } while (0)
  24. #define LED7_turnOff() do { PORTD.OUTSET = PIN1_bm; } while (0)

  25. #define LED8_init() do { PORTA.OUTSET = PIN2_bm; PORTA.DIRSET = PIN2_bm; } while (0)
  26. #define LED8_turnOn() do { PORTA.OUTCLR = PIN2_bm; } while (0)
  27. #define LED8_turnOff() do { PORTA.OUTSET = PIN2_bm; } while (0)

  28. #define LED9_init() do { PORTA.OUTSET = PIN3_bm; PORTA.DIRSET = PIN3_bm; } while (0)
  29. #define LED9_turnOn() do { PORTA.OUTCLR = PIN3_bm; } while (0)
  30. #define LED9_turnOff() do { PORTA.OUTSET = PIN3_bm; } while (0)

  31. #define LED10_init() do { PORTA.OUTSET = PIN4_bm; PORTA.DIRSET = PIN4_bm; } while (0)
  32. #define LED10_turnOn() do { PORTA.OUTCLR = PIN4_bm; } while (0)
  33. #define LED10_turnOff() do { PORTA.OUTSET = PIN4_bm; } while (0)

  34. #define LED11_init() do { PORTA.OUTSET = PIN5_bm; PORTA.DIRSET = PIN5_bm; } while (0)
  35. #define LED11_turnOn() do { PORTA.OUTCLR = PIN5_bm; } while (0)
  36. #define LED11_turnOff() do { PORTA.OUTSET = PIN5_bm; } while (0)
实现LED灯闪烁效果的主程序为:
  1. int main(void) {
  2.     int i,j;
  3.     //Setup LED
  4.     LED_init();
  5.     LED0_init();
  6.     LED1_init();
  7.     LED2_init();
  8.     LED3_init();
  9.     LED4_init();
  10.     LED5_init();
  11.     LED6_init();
  12.     LED7_init();
  13.     LED8_init();
  14.     LED9_init();
  15.     LED10_init();
  16.     LED11_init();
  17.     dark();
  18.     while (1)
  19.     {
  20.         light();
  21.         for(j=0;j<1000;j++)
  22.          for(i=0;i<1000;i++);
  23.         dark();
  24.         for(j=0;j<1000;j++)
  25.          for(i=0;i<1000;i++);
  26.     }
  27. }
所用到的2个辅助函数为:
  1. void dark(void) {
  2.     LED_turnOff();
  3.     LED0_turnOff();
  4.     LED1_turnOff();
  5.     LED2_turnOff();
  6.     LED3_turnOff();
  7.     LED4_turnOff();
  8.     LED5_turnOff();
  9.     LED6_turnOff();
  10.     LED7_turnOff();
  11.     LED8_turnOff();
  12.     LED9_turnOff();
  13.     LED10_turnOff();
  14.     LED11_turnOff();
  15. }

  16. void light(void) {
  17.     LED_turnOn();
  18.     LED0_turnOn();
  19.     LED1_turnOn();
  20.     LED2_turnOn();
  21.     LED3_turnOn();
  22.     LED4_turnOn();
  23.     LED5_turnOn();
  24.     LED6_turnOn();
  25.     LED7_turnOn();
  26.     LED8_turnOn();
  27.     LED9_turnOn();
  28.     LED10_turnOn();
  29.     LED11_turnOn();
  30. }
实现LED灯顺时针旋转的程序段为:
  1. while (1)  {
  2.       for(k=0;k<12;k++)
  3.       {
  4.           if(k==0) LED0_turnOn();
  5.           if(k==1) LED1_turnOn();
  6.           if(k==2) LED2_turnOn();
  7.           if(k==3) LED3_turnOn();
  8.           if(k==4) LED4_turnOn();
  9.           if(k==5) LED5_turnOn();
  10.           if(k==6) LED6_turnOn();
  11.           if(k==7) LED7_turnOn();
  12.           if(k==8) LED8_turnOn();
  13.           if(k==9) LED9_turnOn();
  14.           if(k==10) LED10_turnOn();
  15.           if(k==11) LED11_turnOn();
  16.           for(j=0;j<1000;j++)
  17.          for(i=0;i<1000;i++);
  18.       }
  19.       dark();
  20.       for(j=0;j<1000;j++)
  21.          for(i=0;i<1000;i++);
  22. }

经程序的编译和下载,其显示效果如图4至图6所示。
4效果1
5效果2
6效果3
视频:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
tpgf 发表于 2022-12-6 08:58 | 显示全部楼层
什么样的屏幕可以用来当做led阵列使用呢
qcliu 发表于 2022-12-6 10:14 | 显示全部楼层
这是一个全屏幕触摸的 还是在特定点位可以的啊
drer 发表于 2022-12-6 10:25 | 显示全部楼层
这触屏很不错 可以全部点亮吗  一般功率是多少啊
coshi 发表于 2022-12-6 10:36 | 显示全部楼层
前端触屏和单片机的通讯方式是哪种啊
kxsi 发表于 2022-12-6 10:58 | 显示全部楼层
感觉这种连接方式有点费单片机的引脚啊
wiba 发表于 2022-12-6 11:29 | 显示全部楼层
kxsi 发表于 2022-12-6 10:58
感觉这种连接方式有点费单片机的引脚啊

啥情况啊 难道是几个灯就是几个引脚吗
 楼主| jinglixixi 发表于 2022-12-6 21:47 | 显示全部楼层
wiba 发表于 2022-12-6 11:29
啥情况啊 难道是几个灯就是几个引脚吗

没错!
 楼主| jinglixixi 发表于 2022-12-6 21:48 | 显示全部楼层
kxsi 发表于 2022-12-6 10:58
感觉这种连接方式有点费单片机的引脚啊

是呀!
 楼主| jinglixixi 发表于 2022-12-6 21:48 | 显示全部楼层
coshi 发表于 2022-12-6 10:36
前端触屏和单片机的通讯方式是哪种啊

一对一
 楼主| jinglixixi 发表于 2022-12-6 21:50 | 显示全部楼层
tpgf 发表于 2022-12-6 08:58
什么样的屏幕可以用来当做led阵列使用呢

?  , LED发光二极管
小明的同学 发表于 2024-7-27 17:50 | 显示全部楼层
看起来很好玩。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部