找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 970|回复: 14
收起左侧

单片机+数码管为什么不亮?

[复制链接]
ID:1144680 发表于 2025-4-17 11:52 | 显示全部楼层 |阅读模式
用STC15W408AS搭建的电路,P2接数码管+,P3接—,一共8个数码管,全部都是a段亮。请大神帮忙看看哪里出了问题。

  1. #include <STC15F2K60S2.H>

  2. void main()
  3. {
  4.                         P2=1;                        
  5.                   P3=0;        
  6.         
  7.                 while(1)
  8.                 {
  9.                         
  10.                 }
  11. }        
复制代码



回复

使用道具 举报

ID:1109793 发表于 2025-4-17 12:16 | 显示全部楼层
电路图呢?
回复

使用道具 举报

ID:1144680 发表于 2025-4-17 13:29 | 显示全部楼层

如下图,把无关的电路删了

408.png

回复

使用道具 举报

ID:1121801 发表于 2025-4-17 13:38 | 显示全部楼层
P2=1??所以P2=01H,P2=0000,0001,那不是一个段亮吗??
回复

使用道具 举报

ID:1133081 发表于 2025-4-17 14:13 | 显示全部楼层
dcc60 发表于 2025-4-17 13:29
如下图,把无关的电路删了

P2=1当然只亮1个a点,电路图也有毛病,给你改了。下面是测试程序。
132943bojaax2rq7qjjoa9.png

  1. #include <STC15F2K60S2.H>

  2. unsigned char code table[]={
  3.         0x3f,0x06,0x5b,0x4f,
  4.         0x66,0x6d,0x7d,0x07,
  5.         0x7f,0x6f,0x77,0x7c,
  6.         0x39,0x5e,0x79,0x71};

  7. void Delay(unsigned int t)//1T@11.0592MHz
  8. {
  9.     unsigned int x;
  10.     while (t--)
  11.     {
  12.         x = 5000;
  13.         while (x--);
  14.     }
  15. }


  16. void main()
  17. {               
  18.         unsigned char i;
  19.         while(1)
  20.         {
  21.                 P2=0x00;
  22.                 P3=~(0x01<<i);
  23.                 P2=table[i];
  24.                 Delay(1);       
  25.                 i=++i%8;
  26.         }
  27. }
复制代码



回复

使用道具 举报

ID:1144680 发表于 2025-4-17 14:22 | 显示全部楼层
cyi8 发表于 2025-4-17 13:38
P2=1??所以P2=01H,P2=0000,0001,那不是一个段亮吗??

是这个意思啊?本意是让所有数码管点亮,P2输出高电平,P3低电平,后来试了一下,给每个数码管单独赋值0、1就可以。

现在把代码优化了一下,可以了。谢谢!
  1. #include <STC15F2K60S2.H>

  2. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  3.        
  4. void Nixie(unsigned char Location,Number)
  5. {
  6.         switch(Location)
  7.         {
  8.                 case 1:P30=0; break;
  9.                 case 2:P31=0; break;               
  10.                 case 3:P32=0; break;
  11.                 case 4:P33=0; break;               
  12.                 case 5:P34=0; break;
  13.                 case 6:P35=0; break;               
  14.                 case 7:P36=0; break;
  15.                 case 8:P37=0; break;                       
  16.         }
  17.                 P2=NixieTable[Number];               
  18. }

  19. void main()
  20. {
  21.        
  22. Nixie(2,6);
  23.        
  24.                 while(1)
  25.                 {
  26.                        
  27.                 }
  28. }       
复制代码



回复

使用道具 举报

ID:1144680 发表于 2025-4-17 14:28 | 显示全部楼层
WL0123 发表于 2025-4-17 14:13
P2=1当然只亮1个a点,电路图也有毛病,给你改了。下面是测试程序。

多谢!运行正常。已经超出了我的学习进度,下一节正好要学习这个。

回复

使用道具 举报

ID:996773 发表于 2025-4-17 15:08 | 显示全部楼层
过来人告诉楼主,新手学习单片机尽可能从标准的51开始,io口输出只是标准的弱上拉和强拉低
比较容易理解,15w408虽然先进些,io口有多种配置,有强拉高,悬空等多种状态需要定义相关
的寄存器,对新手不友好,循序渐进才是最好最省力的
回复

使用道具 举报

ID:60178 发表于 2025-4-18 08:01 | 显示全部楼层
我也刚学,要配置输出模式,端口要写明白,P2是指对一字节8位给1吗,不是写0XFF吗
回复

使用道具 举报

ID:402677 发表于 2025-4-18 10:20 | 显示全部楼层
WL0123 发表于 2025-4-17 14:13
P2=1当然只亮1个a点,电路图也有毛病,给你改了。下面是测试程序。

好好学习,谢谢热心的朋友
回复

使用道具 举报

ID:1144680 发表于 2025-4-18 10:25 | 显示全部楼层
hi等你 发表于 2025-4-17 15:08
过来人告诉楼主,新手学习单片机尽可能从标准的51开始,io口输出只是标准的弱上拉和强拉低
比较容易理解, ...

说的极是。
想着一边学习一边实践,增加自己的学习兴趣,这咱芯片也便宜,先做个小东东出来。
回复

使用道具 举报

ID:1144680 发表于 2025-4-18 10:31 | 显示全部楼层
xayh000 发表于 2025-4-18 08:01
我也刚学,要配置输出模式,端口要写明白,P2是指对一字节8位给1吗,不是写0XFF吗

没错。应该写为0xFF,想当然地认为P2=1就是对所有端口操作。惭愧惭愧。
回复

使用道具 举报

ID:1137639 发表于 2025-4-18 20:54 | 显示全部楼层
是这个意思啊?本意是让所有数码管点亮,P2输出高电平,P3低电平,后来试了一下,给每个数码管单独赋值0、1就可以。

现在把代码优化了一下,可以了。谢谢!
  1. #include <STC15F2K60S2.H>

  2. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  3.       
  4. void Nixie(unsigned char Location,Number)
  5. {
  6.         switch(Location)
  7.         {
  8.                 case 1:P30=0; break;
  9.                 case 2:P31=0; break;               
  10.                 case 3:P32=0; break;
  11.                 case 4:P33=0; break;               
  12.                 case 5:P34=0; break;
  13.                 case 6:P35=0; break;               
  14.                 case 7:P36=0; break;
  15.                 case 8:P37=0; break;                       
  16.         }
  17.                 P2=NixieTable[Number];               
  18. }

  19. void main()
  20. {
  21.       
  22. Nixie(2,6);
  23.       
  24.                 while(1)
  25.                 {
  26.                        
  27.                 }
  28. }      
复制代码
回复

使用道具 举报

ID:1152021 发表于 2025-5-28 19:06 来自触屏版 | 显示全部楼层
路过。
回复

使用道具 举报

ID:1152098 发表于 2025-5-29 11:05 | 显示全部楼层
没有段码吗和位码吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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