关于动态数码管的显示

控制组 郑栋元 2024111099 2024-11-20 20:40:56

1.一定要记得需要消影:
位选 --段选  -(  中间容易出现篡位 )- 位选  。。。。。

2.利用数组来优化程序结构

 

改法:

显示一次后延时1ms(数字比较多可以延时几十us);
然后数码管清零,防止篡位。

下面的代码包含了延时x毫秒和x微秒的子函数。
代码如下:
#include <REGX52.H>
#include <INTRINS.H>

unsigned char arr[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delayus(unsigned int xus)    //@11.0592MHz
{
while(xus--){
    _nop_();
    _nop_();
    _nop_();
    }
}
void delayms(unsigned int xms)    //@11.0592MHz
{
    unsigned char data i, j;
while(xms--){
    _nop_();
    _nop_();
    _nop_();
    i = 11;
    j = 190;
    do
    {
        while (--j);
    } while (--i);
    }
}

void nixie(unsigned char location,number)
{
      switch(location)
        {
            case 1:P2_4=1;P2_3=1;P2_2=1;break;
            case 2:P2_4=1;P2_3=1;P2_2=0;break;
            case 3:P2_4=1;P2_3=0;P2_2=1;break;
            case 4:P2_4=1;P2_3=0;P2_2=0;break;
            case 5:P2_4=0;P2_3=1;P2_2=1;break;
            case 6:P2_4=0;P2_3=1;P2_2=0;break;
            case 7:P2_4=0;P2_3=0;P2_2=1;break;
            case 8:P2_4=0;P2_3=0;P2_2=0;break;
            
        }
        
        P0= arr[number];
        delayus(70);
        P2=0;
    }

void  main()
{
    
        while(1)
        {
            nixie(1,1);
            nixie(2,2);
            nixie(3,3);
            nixie(4,4);
            nixie(5,5);
            nixie(6,6);
            nixie(7,7);
            nixie(8,8);
            
            
        }
    
}
    

...全文
25 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

342

社区成员

发帖
与我相关
我的任务
社区描述
一个供Leaders学习交流的地方
c++javapython 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • 叫我胡萝北
  • CheungZzzc
  • szu_gexu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧