找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1935|回复: 7
收起左侧

51单片机74HC164芯片驱动数码管显示不全

[复制链接]
ID:898834 发表于 2021-7-31 11:42 | 显示全部楼层 |阅读模式
使用164芯片时,仿真能完全实现,但是实际电路上会出现显示不全现象,求指导为什么会出现在这情况?


1.png
回复

使用道具 举报

ID:161164 发表于 2021-7-31 15:05 来自手机 | 显示全部楼层
有没有加消隐?
回复

使用道具 举报

ID:898834 发表于 2021-7-31 15:39 | 显示全部楼层
我的程序如下,放到仿真上 是可以正常运行的
#include<regx51.h>
typedef unsigned char u8;
typedef unsigned int u16;

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管
//u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管

u8 smgbuff[]={0x00,0x00,0x00,0x00,0x00,0x00};   
u16 i,j,k,m,s,f,n,num;

sbit DAT=P3^0;
sbit CLK=P3^1;

void delay(u16 i)
{
        while(i--);
}

void Timer0Init()
{
        TMOD=0x01;       
        TL0=0x67;               
        TH0=0xFC;         //定时1ms
        EA=1;                       
        TR0=1;       
        ET0=1;       
}

void main()
{
        Timer0Init();
        while(1)
        {
                for(i=0;i<8;i++)
                {
                        num=smgbuff[i];
                        for(j=0;j<8;j++)
                        {
                                CLK=0;
                                DAT=num&0x01;
                                CLK=1;
                                num>>=1;
                        }
                }
                delay(50000);
        }       
}

void Timer0() interrupt 1
{
        TL0=0x67;               
        TH0=0xFC;
        k++;
        if(k>=1000)
        {       
                k=0;       
                if(m<60)
                {
                        m++;
                }
                if(m>=60)
                {       
                        m=0;
                        f++;
                }
                if(f>=60)
                {
                        s++;
                        f=0;
                }
        }
        switch(n)
        {
                case(0):
                        smgbuff[0]=smgduan[m%10];n++;break;
                case(1):
                        smgbuff[1]=smgduan[m/10%10];n++;break;
                case(2):
                        smgbuff[2]=smgduan[f%10];n++;break;
                case(3):
                        smgbuff[3]=smgduan[f/10%10];n++;break;
                case(4):
                        smgbuff[4]=smgduan[s%10];n++;break;
                case(5):
                        smgbuff[5]=smgduan[s/10%10];n=0;break;
                default:break;       
        }                       
}
回复

使用道具 举报

ID:898834 发表于 2021-7-31 15:39 | 显示全部楼层
lkc8210 发表于 2021-7-31 15:05
有没有加消隐?

应该没有加,用164芯片驱动的数码管动态显示消隐我不清楚如何加
回复

使用道具 举报

ID:332444 发表于 2021-7-31 17:35 | 显示全部楼层
回复

使用道具 举报

ID:161164 发表于 2021-7-31 23:07 | 显示全部楼层
zqz1345444061 发表于 2021-7-31 15:39
我的程序如下,放到仿真上 是可以正常运行的
#include
typedef unsigned char u8;

仿真图或接线图?
定时中断中的Switch有什么意义?不可以一起做吗?
段选接口呢?
回复

使用道具 举报

ID:507641 发表于 2021-8-1 21:44 | 显示全部楼层
数码管型号脚位是否一样?
回复

使用道具 举报

ID:934353 发表于 2021-8-2 10:28 | 显示全部楼层
我没有看到你对n的定义啊,那你的Switch函数有何用处呢,n初始值为0,也就是说只会执行switch(0),这样写的话,显示肯定会出问题的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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