找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2951|回复: 11
收起左侧

静态数码管和动态数码管用一块单片机不能同时驱动吗

[复制链接]
ID:869650 发表于 2021-2-9 12:21 | 显示全部楼层 |阅读模式
一个非常简单的小程序,利用外部中断控制静态数码管和动态数码管轮流显示数字0~7,可是无论是实际下载到开发板还是用protues仿真都只有动态显示,无法切换到静态显示,代码也检查了许多遍,刚刚开始学51,不知道是不是算法的问题,恳求大佬帮忙指点一点,下面是单片机代码。
  1. #include <reg52.h>
  2. #define LED1 P1//静态数码管
  3. #define LED2 P0//动态数码管
  4. sbit c=P2^7;
  5. sbit b=P2^6;
  6. sbit a=P2^5;
  7. sbit k1=P3^2;
  8. sbit k2=P3^3;
  9. unsigned char code num[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
  10. unsigned char M[8];
  11. unsigned char k;
  12. void displayLED1();
  13. void displayLED2();
  14. void zhong_duan_kai_qi();
  15. void delay(unsigned int time);
  16. void main()
  17. {
  18.         zhong_duan_kai_qi();//外部中断开启
  19.         while(1)
  20.         {        
  21.                 unsigned char i;
  22.                 if(k)
  23.                 {
  24.                         LED2=0x00;
  25.                         while(k)
  26.                         {
  27.                                 displayLED1();        
  28.                         }               
  29.                 }
  30.                 else
  31.                 {
  32.                         for(i=0;i<8;i++)
  33.                         {
  34.                                 M[i]=num[i];
  35.                         }
  36.                         LED1=0x00;               
  37.                         while(~k)
  38.                         {
  39.                                 displayLED2();
  40.                         }
  41.                 }
  42.         }        
  43. }

  44. void delay(unsigned int time)
  45. {
  46.         unsigned char i;
  47.         unsigned int j;               
  48.         for(i=0;i<time;i++)
  49.         {
  50.                 for(j=0;j<125;j++);
  51.         }
  52. }
  53. void zhong_duan_kai_qi()
  54. {
  55.         //设置INT0
  56.         IT0=1;//跳变沿出发方式(下降沿)
  57.         EX0=1;//打开INT0的中断允许。
  58.         //设置INT1
  59.         IT1=1;
  60.         EX1=1;
  61.         //打开总中断
  62.         EA=1;        
  63. }
  64. void displayLED1()
  65. {
  66.         unsigned char i;
  67.         for(i=0;i<8;i++)
  68.         {
  69.                 LED1=num[i];                        
  70.                 delay(500);
  71.         }
  72. }
  73. void displayLED2()
  74. {
  75.         unsigned char i;
  76.         unsigned int j;
  77.         for(i=0;i<8;i++)
  78.         {
  79.                 switch(i)
  80.                 {
  81.                         case 0:
  82.                                 c=0;b=0;a=0;break;
  83.                         case 1:
  84.                                 c=0;b=0;a=1;break;
  85.                         case 2:
  86.                                 c=0;b=1;a=0;break;
  87.                         case 3:
  88.                                 c=0;b=1;a=1;break;
  89.                         case 4:
  90.                                 c=1;b=0;a=0;break;
  91.                         case 5:
  92.                                 c=1;b=0;a=1;break;
  93.                         case 6:
  94.                                 c=1;b=1;a=0;break;
  95.                         case 7:
  96.                                 c=1;b=1;a=1;break;
  97.                 }
  98.                 LED2=M[i];
  99.                 j=500;
  100.                 while(j--);
  101.                 LED2=0x00;//消隐
  102.         }
  103. }
  104. void Int0()interrupt 0
  105. {
  106.         delay(1);//延时消抖
  107.         if(k1==0)
  108.         {
  109.                 k=0;        
  110.         }
  111. }
  112. void Int1()interrupt 2
  113. {
  114.         delay(1);
  115.         if(k2==0)
  116.         {
  117.                 k=1;        
  118.         }
  119. }
复制代码
下面是我接的图

XHYIKXM~I1Q1AKJ6CJ{$PE7.png
回复

使用道具 举报

ID:390416 发表于 2021-2-9 16:36 | 显示全部楼层
多位数码管 都是动态的
回复

使用道具 举报

ID:739545 发表于 2021-2-9 16:42 | 显示全部楼层
无图无真相,怎么连接也看不到,另就一个数码管显示,代码写的乱糟糟的,
回复

使用道具 举报

ID:824490 发表于 2021-2-9 18:42 | 显示全部楼层
静态与动态的电路不一样的。你把电路上传,让大家帮你看看
回复

使用道具 举报

ID:332444 发表于 2021-2-9 22:14 | 显示全部楼层
本帖最后由 xianfajushi 于 2021-2-10 07:20 编辑

看看下面连接内容
回复

使用道具 举报

ID:332444 发表于 2021-2-9 22:15 | 显示全部楼层
回复

使用道具 举报

ID:213173 发表于 2021-2-9 22:34 | 显示全部楼层
改为静态数码管和动态数码管同时显示

无标题.jpg



  1. #include <reg52.h>
  2. #define LED1 P1//静态数码管
  3. #define LED2 P0//动态数码管
  4. sbit c=P2^7;
  5. sbit b=P2^6;
  6. sbit a=P2^5;
  7. sbit k1=P3^2;
  8. sbit k2=P3^3;

  9. unsigned char code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  10. unsigned char i,j,k;
  11. bit t;
  12. void delay(unsigned int time)
  13. {
  14.         unsigned int i,j;
  15.         for(i=0;i<time;i++)
  16.                 for(j=0;j<125;j++);
  17. }

  18. void main()
  19. {
  20.         while(1)
  21.         {        
  22.                 if(!k1||!k2)
  23.                 {
  24.                         if(++k>=10 && t==0)//消抖10ms
  25.                         {
  26.                                 t=1;
  27.                                 if(!k1 && j<9)
  28.                                         j++;
  29.                                 if(!k2 && j>0)
  30.                                         j--;
  31.                         }
  32.                 }
  33.                 else//松手
  34.                 {
  35.                         k=0;
  36.                         t=0;
  37.                 }
  38.                 LED1=num[j];//1位静态显示
  39.                 //8位动态显示
  40.                 LED2=0x00;        //消隐
  41.                 P2&=0x1f;        //位清0
  42.                 P2|=(i<<5);        //送位码
  43.                 LED2=num[i];//送段码
  44.                 i=++i%8;                //位计数
  45.                 delay(1);        //延时
  46.         }        
  47. }
复制代码



回复

使用道具 举报

ID:869650 发表于 2021-2-10 21:00 | 显示全部楼层
人人学会单片机 发表于 2021-2-9 16:36
多位数码管 都是动态的

是的            
回复

使用道具 举报

ID:869650 发表于 2021-2-10 21:04 | 显示全部楼层
lovezjf234 发表于 2021-2-9 16:42
无图无真相,怎么连接也看不到,另就一个数码管显示,代码写的乱糟糟的,

图片现在上传了
回复

使用道具 举报

ID:869650 发表于 2021-2-10 21:05 | 显示全部楼层
wulin 发表于 2021-2-9 22:34
改为静态数码管和动态数码管同时显示

嗯嗯,我去试了一下,可以,谢谢
回复

使用道具 举报

ID:869650 发表于 2021-2-10 21:05 | 显示全部楼层
名字不是重点 发表于 2021-2-9 18:42
静态与动态的电路不一样的。你把电路上传,让大家帮你看看

图片现在上传了
回复

使用道具 举报

ID:824490 发表于 2021-2-14 11:46 | 显示全部楼层

动态显示:
1、消隐(可选)
2、送第一个数码管位段码
3、送第一个数码管位选码
4、延时、消隐
5、送送第二个数码管位段码
6.7.8.9直到8个数码管全选完
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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