找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 786|回复: 3
收起左侧

我写了个程序是LED直驱共阳极数码管的可是共阴极的点阵居然和他显示一样的数据

[复制链接]
ID:1030798 发表于 2023-4-26 15:12 | 显示全部楼层 |阅读模式
这是为啥啊,给共阳数码管输入数字,共阴极点阵居然可以点亮相应的灯
回复

使用道具 举报

ID:584814 发表于 2023-4-26 17:48 | 显示全部楼层
人非圣贤,总会有人出错的
回复

使用道具 举报

ID:43720 发表于 2023-4-26 17:55 | 显示全部楼层
两个显示的硬件是连接在一起的吗
回复

使用道具 举报

ID:155507 发表于 2023-4-26 18:41 | 显示全部楼层
两个显示的硬件是连接在一起的接对吗?
51hei.jpg
程序改对吗?
  1. /*------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited -------------------------------*/
  3. /* --- STC 1T Series MCU RC Demo -----------------------------------*/
  4. /* If you want to use the program or the program referenced in the  */
  5. /* article, please specify in which data and procedures from STC    */
  6. /*------------------------------------------------------------------*/


  7. /*********************************************************/

  8. #define MAIN_Fosc        11059200L        //定义主时钟

  9. #include        "..\..\STC8Hxxx.h"

  10. /*************        功能说明        *************

  11. 同时驱动8段16个共阴数码管和8段16个共阳数码管自动扫描显示.

  12. P4.0~P4.7: 接SEG0~SEG7,  这8根SEG线跟LED连接要串联限流电阻(建议300欧姆以上).
  13. P0.0~P0.3: 接SEG8~SEG11, 这4根SEG线跟LED连接要串联限流电阻(建议300欧姆以上).
  14. P3.4~P3.7: 接SEG12~SEG15,这4根SEG线跟LED连接要串联限流电阻(建议300欧姆以上).
  15. P2.0~P2.7: 接COM0~COM7

  16.           P4.0 P4.1 P4.2 P4.3 P4.4 P4.5 P4.6 P4.7    P0.0 P0.1 P0.2  P0.3  P3.4  P3.5  P3.6  P3.7
  17.           SEG0 SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7    SEG8 SEG9 SEG10 SEG11 SEG12 SEG13 SEG14 SEG15
  18.            A    B    C    D    E    F    G    H       A    B     C     D     E     F     G     H     
  19. P2.0-COM0
  20. P21.-COM1
  21. P22.-COM2
  22. P23.-COM3
  23. P24.-COM4
  24. P25.-COM5
  25. P26.-COM6
  26. P27.-COM7


  27. ******************************************/


  28. /*************        本地常量声明        **************/

  29. /*************        本地变量声明        **************/



  30. /*************        本地函数声明        **************/
  31. void  delay_ms(u8 ms);

  32. /****************  外部函数声明和外部变量声明 *****************/


  33. u8 code T_LED_CODE[]={                                                //标准字库
  34. //代码            0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F
  35. //显示字符   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  36.             0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

  37. //代码            0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F
  38. //显示字符   0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   空
  39.             0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00};
  40.         


  41. //共阴数码管字库导入, i为LED位置0~15, dis为要显示的代码 0~9, A~F, 1.~9., 空
  42. void        LoadLED_A(u8 i, u8 dis)
  43. {
  44.         u8        xdata *px;
  45.         
  46.         px = &COM0_DCL + 15 - i;                //PCB布局低位数码管在右边, 所以用(15-i)反一下
  47.         *px = T_LED_CODE[dis & 0x0f];
  48. }

  49. //共阳数码管字库导入, i为LED位置0~15, dis为要显示的代码 0~9, A~F, 1.~9., 空
  50. void        LoadLED_B(u8 i, u8 dis)
  51. {
  52.         u8        xdata *px;
  53.         
  54.         px = &COM0_DAL + 15 - i;                //PCB布局低位数码管在右边, 所以用(15-i)反一下
  55.         *px = T_LED_CODE[dis & 0x0f];
  56. }


  57. /**********************************************/
  58. void main(void)
  59. {
  60.         u8        i;

  61.         P_SW2 |= 0x80;        //允许访问XSFR(扩展特殊功能寄存器)
  62. //        XOSCCR = 0xc0;           //启动外部晶振
  63. //        while (!(XOSCCR & 1));   //等待时钟稳定
  64. //        CLKDIV = 0x00;           //时钟不分频
  65. //        CKSEL = 0x01;            //选择外部晶振


  66.         P2n_push_pull(0xff);        //COM0~COM7线设置为推挽输出
  67.         P4n_push_pull(0xff);        //SEG0~SEG7(P4.0~P4.7)线设置为推挽输出
  68.         P0n_push_pull(0x0f);        //SEG8~SEG11(P0.0~P0.3)线设置为推挽输出
  69.         P3n_push_pull(0xf0);        //SEG12~SEG15(P3.4~P3.7)线设置为推挽输出

  70.         P2DR = 0x00;        //COM0~COM7线设置为强电流驱动
  71.         P4DR = 0x00;        //SEG0~SEG7线设置为强电流驱动
  72.         P0DR = 0xf0;        //SEG8~SEG11线设置为强电流驱动
  73.         P3DR = 0x0f;        //SEG12~SEG15线设置为强电流驱动

  74.         COMEN  = 0xff;        //允许8个COM
  75.         SEGENL = 0xff;        //允许8个SEG 低字节
  76.         SEGENH = 0xff;        //允许8个SEG 高字节
  77.         LEDCTRL = 0x80 + (2<<4) + 0;        //B7=1: ON,  B5 B4: 0共阴, 1共阳, 2共阴共阳, 3保留, B2 B1 B0: 0占空比100%, 1~7占空比7/8~1/8
  78.         LEDCKS = 4;                //数码管COM扫描显示的主频时钟数 = 160*9*LEDCKS, 每个COM显示时间=1440*LEDCKS/fosc(MHz) us, COM扫描频率=fosc/(1440*LEDCKS *COM数).
  79.                                         //例如 fosc = 11.0592MHz, 共阴共阳一共16个COM, LEDCKS = 4, 则每个COM显示时间=1440*4/11.0592 = 521 us, COM扫描频率=11059200/(1440*4*16)=120Hz.
  80.                                         //已知扫描时间t(us)计算 LEDCKS = t*fosc(MHz)/1440, 比如fosc = 24MHz, 要求1个COM扫描1ms, 则 LEDCKS = 1000*24/1440 = 16.7, 取整数17.

  81.         for(i=0; i<16; i++)        LoadLED_A(i,i);                //共阴,显示0123456789ABCDEF
  82.         for(i=0; i<16; i++)        LoadLED_B(i,15-i);        //共阳,显示FEDCBA9876543210
  83.         
  84.         
  85.         while (1)
  86.         {
  87.                 //刷新COM0_DCL~COM7_DCL, COM0_DCH~COM7_DCH,即可刷新共阴显示内容.
  88.                 //刷新COM0_DAL~COM0_DAL, COM0_DAH~COM0_DAH,即可刷新共阳显示内容.
  89.                
  90.         }
  91. }
  92. /**********************************************/
  93.   
复制代码

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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