打印
[51单片机]

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

[复制链接]
879|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
吱吱|  楼主 | 2021-4-9 19:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 吱吱 于 2021-4-9 21:57 编辑

萌新求助  学习的是普中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]={0x3f,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);     //消隐
             }
        }
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝