注册 登录
编程论坛 单片机编程

刚学了静态数码管,想试试动态的,动态的不知道哪里出了问题,麻烦大佬帮忙看看;前一个是静态的,是可以的

张珂珂 发布于 2020-03-31 23:38, 5122 次点击
程序代码:
#include<reg51.h>

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

void main()
{
  unsigned int i;
  unsigned char s[12]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
  
  //以下两行为片选语句,不可以删除。否则无法操作LED
    P2 = 0xa0;P0 = 0x00;P2 = 0;    //选中蜂鸣器,关闭蜂鸣器
    P2 = 0xC0;P0 = 0xFF;P2 = 0; //位选全部选中
    P2 = 0xE0;        //选中数码管
   
    while(1)
    {
      for(i=0;i<10;i++)
      {      
        P0=s[i];
        delay10ms(50);
      }
    }
}


程序代码:
#include<reg51.h>

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

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

      while(1)
      {
        for(i=0;i<8;i++)
        {
          P2=weima[i];
          P0=duanma[i+1];
          delay10ms(100);
          P0=0xff;
        }
      }
}
3 回复
#2
xianfajushi2020-04-01 14:15
delay10ms(1);
#3
张珂珂2020-04-03 21:19
回复 2楼 xianfajushi
实现不了动态数码管
#4
nosnoy2020-09-15 12:13
P2=weima[i];
应该是这一句的问题吧
底层设计 没电路图很难帮忙解决问题的
1