数码之家

 找回密码
 立即注册
搜索
查看: 1785|回复: 6

[STM] LED灯数码管如何电亮控制?使用STM32F103C8T6芯片,通过ULN2803进行驱动

[复制链接]
发表于 2023-10-27 11:21:26 | 显示全部楼层 |阅读模式
90家元
这样的灯板怎么进行电亮控制哇

e3f677e22772768e689477c15414c5a.jpg 42766b48e89549b45e2865e46cb4643.jpg
两条单独的线,分别接红色和绿色的灯,使用STM32F103C8T6芯片,通过ULN2803进行驱动,共阴极的数码管
  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"

  3. #define U4P1_PIN     GPIO_Pin_0
  4. #define U4P1_High()  GPIO_SetBits(GPIOB,U4P1_PIN)
  5. #define U4P1_Low()   GPIO_ResetBits(GPIOB,U4P1_PIN)

  6. #define U4P2_PIN     GPIO_Pin_1
  7. #define U4P2_High()  GPIO_SetBits(GPIOB,U4P2_PIN)
  8. #define U4P2_Low()   GPIO_ResetBits(GPIOB,U4P2_PIN)

  9. #define U4P3_PIN     GPIO_Pin_3
  10. #define U4P3_High()  GPIO_SetBits(GPIOB,U4P3_PIN)
  11. #define U4P3_Low()   GPIO_ResetBits(GPIOB,U4P3_PIN)

  12. #define U4P4_PIN     GPIO_Pin_4
  13. #define U4P4_High()  GPIO_SetBits(GPIOB,U4P4_PIN)
  14. #define U4P4_Low()   GPIO_ResetBits(GPIOB,U4P4_PIN)

  15. #define U4P5_PIN     GPIO_Pin_5
  16. #define U4P5_High()  GPIO_SetBits(GPIOB,U4P5_PIN)
  17. #define U4P5_Low()   GPIO_ResetBits(GPIOB,U4P5_PIN)

  18. #define U4P6_PIN     GPIO_Pin_6
  19. #define U4P6_High()  GPIO_SetBits(GPIOB,U4P6_PIN)
  20. #define U4P6_Low()   GPIO_ResetBits(GPIOB,U4P6_PIN)

  21. #define U4P7_PIN     GPIO_Pin_7
  22. #define U4P7_High()  GPIO_SetBits(GPIOB,U4P7_PIN)
  23. #define U4P7_Low()   GPIO_ResetBits(GPIOB,U4P7_PIN)


  24. #define U6P1_PIN     GPIO_Pin_8
  25. #define U6P1_High()  GPIO_SetBits(GPIOB,U6P1_PIN)
  26. #define U6P1_Low()   GPIO_ResetBits(GPIOB,U6P1_PIN)

  27. #define U6P2_PIN     GPIO_Pin_9
  28. #define U6P2_High()  GPIO_SetBits(GPIOB,U6P2_PIN)
  29. #define U6P2_Low()   GPIO_ResetBits(GPIOB,U6P2_PIN)

  30. #define U6P3_PIN     GPIO_Pin_10
  31. #define U6P3_High()  GPIO_SetBits(GPIOB,U6P3_PIN)
  32. #define U6P3_Low()   GPIO_ResetBits(GPIOB,U6P3_PIN)

  33. #define U6P4_PIN     GPIO_Pin_11
  34. #define U6P4_High()  GPIO_SetBits(GPIOB,U6P4_PIN)
  35. #define U6P4_Low()   GPIO_ResetBits(GPIOB,U6P4_PIN)

  36. #define U6P5_PIN     GPIO_Pin_12
  37. #define U6P5_High()  GPIO_SetBits(GPIOB,U6P5_PIN)
  38. #define U6P5_Low()   GPIO_ResetBits(GPIOB,U6P5_PIN)

  39. #define U6P6_PIN     GPIO_Pin_13
  40. #define U6P6_High()  GPIO_SetBits(GPIOB,U6P6_PIN)
  41. #define U6P6_Low()   GPIO_ResetBits(GPIOB,U6P6_PIN)

  42. #define U6P7_PIN     GPIO_Pin_14
  43. #define U6P7_High()  GPIO_SetBits(GPIOB,U6P7_PIN)
  44. #define U6P7_Low()   GPIO_ResetBits(GPIOB,U6P7_PIN)

  45. //red,green

  46. #define R_PIN     GPIO_Pin_2
  47. #define R_High()  GPIO_SetBits(GPIOA,R_PIN)
  48. #define R_Low()   GPIO_ResetBits(GPIOA,R_PIN)

  49. #define G_PIN     GPIO_Pin_3
  50. #define G_High()  GPIO_SetBits(GPIOA,G_PIN)
  51. #define G_Low()   GPIO_ResetBits(GPIOA,G_PIN)


  52. void SMG_Configuration(void)
  53. {
  54.   GPIO_InitTypeDef SMG_PIN;
  55.         
  56.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         
  57.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  
  58.         //U4  
  59.         SMG_PIN.GPIO_Mode = GPIO_Mode_Out_PP;
  60.         SMG_PIN.GPIO_Pin = U4P1_PIN | U4P2_PIN | U4P3_PIN | U4P4_PIN | U4P5_PIN | U4P6_PIN | U4P7_PIN;
  61.         SMG_PIN.GPIO_Speed = GPIO_Speed_50MHz;
  62.         GPIO_Init(GPIOB,&SMG_PIN);
  63.         
  64.         //U6
  65.         SMG_PIN.GPIO_Mode = GPIO_Mode_Out_PP;
  66.         SMG_PIN.GPIO_Pin = U6P1_PIN | U6P2_PIN | U6P3_PIN | U6P4_PIN | U6P5_PIN | U6P6_PIN | U6P7_PIN;
  67.         SMG_PIN.GPIO_Speed = GPIO_Speed_50MHz;
  68.         GPIO_Init(GPIOB,&SMG_PIN);        
  69.         
  70.         //RED,GREEN
  71.         SMG_PIN.GPIO_Mode = GPIO_Mode_Out_OD;
  72.         SMG_PIN.GPIO_Pin = R_PIN | G_PIN;
  73.         SMG_PIN.GPIO_Speed = GPIO_Speed_50MHz;
  74.         GPIO_Init(GPIOA,&SMG_PIN);

  75.   R_Low();
  76.         G_Low();
  77. }

  78. uint16_t table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  79. uint16_t disp[2];
  80. uint16_t temp,i;


  81. void zxm_Init(void)                                                        //字形码函数
  82. {
  83.         
  84.                         disp[1] = table[i/10];                                //数码管显示十位数字的字形码
  85.                         disp[0] = table[i%10];                                //数码管显示个位数字的字形码
  86.                         temp = (disp[1]<<8)|disp[0];        //十位数的字形码左移8位,然后与个位数的字形码合并
  87.                         GPIO_Write(GPIOB,temp);
  88.                         Delay_ms(300);
  89. }

  90. int main(void)
  91. {
  92.         SMG_Configuration();

  93.         
  94.         while (1)
  95.         {
  96.                 for(i=99;i>0;i--)                        //数码管从99开始自减,到0结束
  97.                 {
  98.                         if(i>=80)
  99.                         {
  100.                         zxm_Init();
  101.                         Delay_ms(300);        
  102.                         
  103.                         R_High();        //红亮
  104.                         Delay_ms(200);
  105.             G_Low(); //绿灭
  106.       Delay_ms(200);
  107.                
  108.                         
  109.                         }
  110.                         
  111.                         if(i<80)
  112.                         {
  113.                         zxm_Init();
  114.                         Delay_ms(300);
  115.                                 
  116.                         G_High(); //绿亮
  117.                         Delay_ms(200);
  118.                         R_Low(); //红灭
  119.       Delay_ms(200);
  120.                                        
  121.                         }
  122.                 }
  123.         }
  124. }

复制代码
为什么,我想对其进行80以上红灯亮,80以下绿灯亮,为什么我的这个全亮了,控制不了
并且个位数一直乱码,红绿灯全亮了
十位数是正常的,但是红绿灯全亮了
我检查了引脚是正常的,不知道哪里出错了

发表于 2023-10-27 12:26:52 | 显示全部楼层
呀,捡了个红绿灯?
回复

使用道具 举报

 楼主| 发表于 2023-10-27 15:51:07 | 显示全部楼层
我不是小连 发表于 2023-10-27 12:26
呀,捡了个红绿灯?

板子是红绿灯珠的,通过那两条线,给电平控制红灯亮还是绿灯亮,但是不知道为什么控制不了,全亮了,并且个位数还是乱码显示。
回复

使用道具 举报

发表于 2023-11-1 16:00:53 | 显示全部楼层
能发一下原理图吗?
回复

使用道具 举报

发表于 2023-11-1 17:40:53 | 显示全部楼层
你先别有程序点亮, 你就用电源点亮(做好限流), 可以用电源一笔一笔点亮, 记下这一笔一笔点亮时的引脚, 再去用程序.

再用程序测试, 先点亮个位A,延时(或等按键)再显示B,,,,,F,再显示10位的A/B/C...F. 看是否能完成.先测试一种颜色, 再测试另一种颜色.

这样大概知道是线没找好,还是代码的问题.
回复

使用道具 举报

发表于 2023-11-14 10:22:04 | 显示全部楼层
需要按段位进行编组,一个字分7个段,每个段再分红绿,这样应该有14组。
控制的话所有段位LED共阳,在驱动电压不超过7V的时候,只用74HC595即可,超过了,则需要74HC595+ULN2003/ULN2803进行控制
另外由于是红绿驱动电压不同,如果是采用以上控制,在电源设计时,要分两路电源分别给红绿供电,电压要可以微调,以便 亮度一致
回复

使用道具 举报

发表于 2023-12-15 13:26:31 | 显示全部楼层
这不就是大号的数码管吗,原理一样啊
回复

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-30 02:34 , Processed in 0.156000 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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