找回密码
 立即注册

QQ登录

只需一步,快速开始

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

刚学了单片机静态数码管,想试试动态的,动态的不知道哪里出了问题,求大佬帮忙看看

[复制链接]
ID:717843 发表于 2020-4-1 00:26 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>

  2. void delay10ms(unsigned char i)             //延迟函数(for循环需要时间) 当第二层for函数为p=100时(经过测量),i为多少,延迟时间就是i*10ms
  3. {                                         //目的是在两次灯亮之间空出时间
  4.     int n,p;
  5.        for(n=0;n<i;n++)
  6.            for(p=0;p<200;p++);
  7. }

  8. void main()
  9. {
  10.   unsigned int i;
  11.   unsigned char s[12]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
  12.   
  13.   //以下两行为片选语句,不可以删除。否则无法操作LED
  14.     P2 = 0xa0;P0 = 0x00;P2 = 0;    //选中蜂鸣器,关闭蜂鸣器
  15.     P2 = 0xC0;P0 = 0xFF;P2 = 0; //位选全部选中
  16.     P2 = 0xE0;        //选中数码管
  17.    
  18.     while(1)
  19.     {
  20.       for(i=0;i<10;i++)
  21.       {      
  22.         P0=s[i];
  23.         delay10ms(50);
  24.       }
  25.     }
  26. }
复制代码

  1. #include<reg51.h>

  2. void delay10ms(unsigned char i)             //延迟函数(for循环需要时间) 当第二层for函数为p=100时(经过测量),i为多少,延迟时间就是i*10ms
  3. {                                         //目的是在两次灯亮之间空出时间
  4.     int n,p;
  5.        for(n=0;n<i;n++)
  6.            for(p=0;p<200;p++);
  7. }

  8. void main()
  9. {
  10.   unsigned int i;
  11.   unsigned char duanma[10]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
  12.   unsigned char weima[8]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
  13.   //以下两行为片选语句,不可以删除。否则无法操作LED
  14.     P2 = 0xa0;P0 = 0x00;P2 = 0;    //选中蜂鸣器,关闭蜂鸣器

  15.       while(1)
  16.       {
  17.         for(i=0;i<8;i++)
  18.         {
  19.           P2=weima[i];
  20.           P0=duanma[i+1];
  21.           delay10ms(100);
  22.           P0=0xff;
  23.         }
  24.       }
  25. }
复制代码



回复

使用道具 举报

ID:235200 发表于 2020-4-1 18:11 | 显示全部楼层
动态的一定要有一个位选控制信号,你程序中看不出有位选控制
回复

使用道具 举报

ID:475247 发表于 2020-4-1 19:33 | 显示全部楼层
你这种出来是满屏的8888888.每一个数字显示后是要关断的。建议再好好看看视频,深入了解一下,也可在坛子里找一个成功的例子看看
回复

使用道具 举报

ID:606493 发表于 2020-4-2 13:22 | 显示全部楼层
如果是只能显示一个数字的问题你可以把你的延迟时间缩短一些,数码管所谓的动态显示其实跟静态显示一个原理,就是一位一位的显示,然后延时缩短,根据人眼的视觉残留看起来好像是每一位的显示不一样,但是显示完一位之后以及要显示下一位之前你要把位选上一位的位选关闭,要不然显示会出现问题,每次只打开一个位选
回复

使用道具 举报

ID:717843 发表于 2020-4-3 22:14 | 显示全部楼层
还有谁? 发表于 2020-4-1 19:33
你这种出来是满屏的8888888.每一个数字显示后是要关断的。建议再好好看看视频,深入了解一下,也可在坛子里 ...

怎么关断?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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