找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1652|回复: 4
收起左侧

单片机代码下到板子上数码管亮度低怎么办?

[复制链接]
ID:1084057 发表于 2023-6-14 15:10 | 显示全部楼层 |阅读模式
这个代码下到板子上数码管亮度低怎么办

单片机源程序如下:
  1. #include <REGX52.H>
  2. #define smg P0
  3. typedef unsigned int U16;
  4. sbit S18=P2^0;
  5. sbit S19=P2^1;
  6. sbit S20=P2^2;
  7. void delay(U16 i)
  8. {
  9. while(i--);
  10. }
  11. int i;
  12. void an()
  13. {
  14.         if(S18==0)
  15.         {
  16.         delay(5);
  17.         if(S18==0)
  18.         {
  19.                 i++;
  20.                 if(i==9999)
  21.         {
  22.         i=0;
  23.         }
  24.         }
  25.         while(!S18);
  26.         }        
  27. if(S19==0)
  28.         {
  29.         delay(5);
  30.         if(S19==0)
  31.         {
  32.                 i--;
  33.                 if(i==0)
  34.         {
  35.         i=9999;
  36.         }
  37.         }
  38.         while(!S19);
  39.         }
  40.         if(S20==0)
  41.         {
  42.         delay(5);
  43.         if(S20==0)
  44.         {
  45.                 i=0;
  46.         }
  47.         while(!S20);
  48.         }
  49. }
  50. void main()
  51. {
  52.         
  53.         int q,b,s,g;
  54.         int sz[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  55.         i=0;
  56. while(1)
  57. {

  58.   an();
  59.   q=i/1000;
  60.   b=i%1000/100;
  61.   s=i%100/10;
  62.   g=i%10;
  63.         delay(5);
  64.         P0_0=1;
  65.         P0_1=1;
  66.   P0_2=1;
  67.         P0_3=1;
  68.         
  69.         
  70.         P0_0=0;
  71.         P1=sz[q];
  72.         P0_0=1;
  73.         P1=0xff;
  74.         delay(5);
  75.         
  76.         P0_1=0;
  77.         P1=sz[b];
  78.         P0_1=1;
  79.         P1=0xff;
  80.         delay(5);
  81.         
  82.         P0_2=0;
  83.         P1=sz[s];
  84.         P0_2=1;
  85.         P1=0xff;
  86.         delay(5);
  87.         
  88.         P0_3=0;
  89.         P1=sz[g];
  90.         P0_3=1;
  91.         P1=0xff;
  92.         delay(5);        
  93. }
  94. }
复制代码

回复

使用道具 举报

ID:712097 发表于 2023-6-14 16:46 | 显示全部楼层
单片机IO驱动能力不足,加三极管或MOS管驱动。
回复

使用道具 举报

ID:332444 发表于 2023-6-14 16:48 | 显示全部楼层
调节数码段显示时间到合适
回复

使用道具 举报

ID:883242 发表于 2023-6-14 17:06 | 显示全部楼层
74行消隐和75行延迟显然搞反了,下面一大堆类似错误。

正常流程是:
显示
延迟
消隐(防止本段显示数据漏到下一段,关闭显示)
显示下一个
延迟
消隐
…………

你刚刚显示就关闭了,然后延迟,反复循环,到底是几个意思???
回复

使用道具 举报

ID:213173 发表于 2023-6-14 20:46 | 显示全部楼层
数码管显示时间太短,消隐时间太长。改一下。
  1. #include <REG52.H>
  2. #define smg P0
  3. typedef unsigned int U16;

  4. sbit S18=P2^0;
  5. sbit S19=P2^1;
  6. sbit S20=P2^2;

  7. unsigned char sz[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  8. unsigned char qbsg[4];
  9. unsigned char i;
  10. int num;

  11. void delay(U16 i)
  12. {
  13.         while(i--);
  14. }

  15. void an()
  16. {
  17.         static unsigned char count=0;
  18.         static bit sign=0;
  19.         if(!S18||!S19||!S20)
  20.         {
  21.                 if(++count>=20 && sign==0)
  22.                 {
  23.                         sign=1;
  24.                         if(!S18)
  25.                         {
  26.                                 num++;
  27.                                 if(num>9999)num=0;
  28.                         }
  29.                         if(!S19)
  30.                         {
  31.                                 num--;
  32.                                 if(num<0)num=9999;
  33.                         }
  34.                         if(!S20)
  35.                         {
  36.                                 num=0;
  37.                         }
  38.                 }
  39.         }
  40.         else
  41.         {
  42.                 count=0;
  43.                 sign=0;
  44.         }
  45. }
  46. void main()
  47. {        
  48.         while(1)
  49.         {
  50.                 an();
  51.                 qbsg[0]=sz[num/1000%10];
  52.                 qbsg[1]=sz[num/100%10];
  53.                 qbsg[2]=sz[num/10%10];
  54.                 qbsg[3]=sz[num%10];

  55.                 P1=0xff;
  56.                 P0=0x01<<i;
  57.                 P1=qbsg[i];
  58.                 i=++i%4;
  59.                 delay(100);
  60.         }
  61. }
复制代码

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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