请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2699|回复: 2

萌新求助 动态数码管第0位为什么显示8

[复制链接]

2

主题

2

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2021-4-9 19:17:30 | 显示全部楼层 |阅读模式
本帖最后由 吱吱 于 2021-4-9 19:21 编辑

萌新学习 51单片机A6板子

动态数码管章节 的教程视频 的课后作业 :动态数码管显示0~7

程序如下文所示,发现问题:数码管第0位显示数字8,即(8 1 2 3 4 5 6 7 )而非0~7

可以确定的是:
        1.板子上数码管的第0位是可以正常显示数字0的(使用该章节教程实验程序验证)
        2.该程序的位选没问题
        3.除第0位的其他1~7位的数码管可以正常显示
       4.将第0位要显示的数字由0改为1后,发现仍然显示数字8,但该位的8段数码管中,其中表示数字1的两段数码管   
          明显比其他5段数码管要亮
        5.接线未发现问题

程序代码如下:

#include"reg52.h"
#include"intrins.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit RC=P3^0; //控制595芯片 串转并扩展接口
sbit SC=P3^1;
sbit SE=P3^2;

u8 code smgduan[8]={0x06,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};  //数字0~7

u8 code duanxuan[8]={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0}; //位选控制

void delay(u16 i) //延时函数
{
        while(i--);
}

void read74HC595(u8 i) //读595芯片8位并口输出数据
{
     u8 a;
         
         RC=1,SC=1;
         
         for(a=0;a<8;a++)
         {
                 SE=i>>7;
                i<<=1;

                SC=0;
                _nop_();
                _nop_();
                SC=1;
         }

         RC=0;
         _nop_();
         _nop_();
         RC=1;
}

void main()
{
    u8 i;
        while(1)
        {
         for(i=0;i<8;i++)
             {           
            read74HC595(duanxuan); //数码管位选控制
                    P0=smgduan;            //数码管数字显示
                    delay(100);                    //延时
                    read74HC595(0x00);     //消隐
             }
        }
}
回复

使用道具 举报

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
发表于 2021-4-9 21:25:10 | 显示全部楼层
本帖最后由 liang123 于 2021-4-9 21:27 编辑

for(i=0;i<8;i++)  {                     
read74HC595(duanxuan); //数码管位选控制                    
P0=smgduan;            //数码管数字显示                     
delay(100);                    //延时                     
read74HC595(0x00);     //消隐              
}
循环的时候  read74HC595(duanxuan)  段选也循环  同理P0=smgduan;  
另外段选0 设置错了 应该是0x3f;
位选也错了一些 我的板子是共阳极的u8 code duanxuan[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //位选控制  参数是这个  你的板子我不知道是不是共阳极的  你自己看看   
回复 支持 反对

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2021-4-15 02:46:35 | 显示全部楼层
u8 code smgduan[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};  //数字0~7
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-19 10:17 , Processed in 0.080001 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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