ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第四周周一

2022-02-08 17:31:22  阅读:191  来源: 互联网

标签:delayms LSB LSC LSA P0 table 周一 四周


3.3.2 数码管动态显示01234567

官方代码

#include "reg52.h"

typedef unsigned int u16;    
typedef unsigned char u8;

#define SMG_A_DP_PORT    P0   
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay_10us(u16 ten_us)
{
    while(ten_us--);    
}
void smg_display(void)
{
    u8 i=0;

    for(i=0;i<8;i++)
    {
           switch(i)
        {
            case 0: LSC=1;LSB=1;LSA=1;break;
            case 1: LSC=1;LSB=1;LSA=0;break;
            case 2: LSC=1;LSB=0;LSA=1;break;
            case 3: LSC=1;LSB=0;LSA=0;break;
            case 4: LSC=0;LSB=1;LSA=1;break;
            case 5: LSC=0;LSB=1;LSA=0;break;
            case 6: LSC=0;LSB=0;LSA=1;break;
            case 7: LSC=0;LSB=0;LSA=0;break;
        }
        SMG_A_DP_PORT=gsmg_code[i];
        delay_10us(100);
        SMG_A_DP_PORT=0x00;
    }
}


void main()
{    
    while(1)
    {
           smg_display();
    }        
}

修改代码

#include "reg52.h"

#define uint unsigned int
#define uchar unsigned char

sbit dula=P2^2;
sbit wela=P2^3;
sbit sela=P2^4;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delayms(uint);


void main()
{    
    while(1)
    {
        dula=1;
        wela=1;
        sela=1;
        P0=table[1];
        delayms(500);
        P0=0x00;
        
        dula=0;
        wela=1;
        sela=1;
        P0=table[2];
        delayms(500);
        P0=0x00;
        
        dula=1;
        wela=0;
        sela=1;
        P0=table[3];
        delayms(500);
        P0=0x00;
        
        dula=0;
        wela=0;
        sela=1;
        P0=table[4];
        delayms(500);
        P0=0x00;
        
        dula=1;
        wela=1;
        sela=0;
        P0=table[5];
        delayms(500);
        P0=0x00;
        
        dula=0;
        wela=1;
        sela=0;
        P0=table[6];
        delayms(500);
        P0=0x00;
        
        dula=1;
        wela=0;
        sela=0;
        P0=table[7];
        delayms(500);
        P0=0x00;
        
        dula=0;
        wela=0;
        sela=0;
        P0=table[8];
        delayms(500);
        P0=0x00;
      }        
}
void delayms(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
    for(j=110;j>0;j--);
}

动态数码管轮流显示1到8八位数字的修正实验基本完成。

经验教训

1.从官方代码中可以看出,普中51实验板用于控制动态数码管的锁存端有三个,这也代表着之前只使用了两个锁存端的修正实验从根本上就注定失败;

2.官方代码使用了更加高级而简练的函数,但是其功能与教程代码使用的更复杂但是也更基础的函数完全相同,这也是本次修正实验修改官方代码的目的,即从根本上理解动态数码管显示数字的基础原理。

标签:delayms,LSB,LSC,LSA,P0,table,周一,四周
来源: https://blog.csdn.net/qllll22/article/details/122810936

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有