[51单片机]for循环中,数组数据提取

学习代码,数码管动态显示。

案例说明:第一个数码管显示1,时间为0.5s,然后关闭它,立即让第二个数码管显示2,时间为0.5s,再关闭它……一直到最后一个数码管显示6,时间同样为0.5s,关闭它后再回来显示第一个数码管,一直循环下去。

案例中给出的是非循环的代码, 这里我需改成了for循环的形式。最开始将i=1放在了for循环的括号内部,总是报错。由于初学不是很了解具体的原因,特此记录。

全部代码:

#include           //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;     //申明U1锁存器的锁存端
sbit wela=P2^7;     //申明U2锁存器的锁存端

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

uchar code table2[]={
0xfe,0xfd,0xfb,0xff,0xef,0xdf};


void delayms(uint);

void main()
{
    while(1)
    {   
        int i=1;
        for(i;i<7;i++) 
        {
            dula=1;
            P0=table[i];        //送段选数据
            dula=0;
            P0=0xff;            //送位选数据前关闭所有显示,防止打开位选锁存器时, 
            wela=1;            //原来的段选位数据通过位选锁存器造成混乱送位选数据
            P0=table2[i];
            wela=0;
            delayms(500);      //延时          
        }


    }
}

void delayms(uint xms){
    uint i,j;
    for(i=xms;i>0;i--)      //i=xms即延时约xms毫秒
    {
        for(j=110;j>0;j--);

    
    }
}

你可能感兴趣的:([51单片机]for循环中,数组数据提取)