瘴锲如 发表于 2025-7-26 13:45:16

点亮点阵

点亮点阵中的一个点

#include <reg52.h>

sbit LED = P0 ^ 0;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main(void)
{
        ENLED = 0;
        ADDR0 = 0;//使能U4 74HC138
        ADDR1 = 0;
        ADDR2 = 0;
        ADDR3 = 0;//导通Q10

        LED = 0;//点亮一个
        while(1);       
}点亮点阵中的一行

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main(void)
{
        ENLED = 0;
        ADDR0 = 0;//使能U4 74HC138
        ADDR1 = 0;
        ADDR2 = 0;
        ADDR3 = 0;//导通Q10

        P0 = 0;//点亮一行
        while(1);       
}点阵全部点亮

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
       

        while (1);
}

void interruptTimer0() interrupt 1
{
        static char i = 0;//静态变量,保证每次进来的时候都是上一次调用结束的值
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = 0; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = 0; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = 0; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = 0; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = 0; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = 0; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = 0; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = 0; i = 0; break;//第八行
                default: break;
        }
}点阵显示心形图像

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

unsigned char code image[] =
{
        0xFF, 0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static char i = 0;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = image; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = image; i = 0; break;//第八行
                default: break;
        }

}图像纵向上移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

unsigned char code image[] =
{
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
        0xC3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3, 0xFF,
        0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7, 0xFF,
        0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3, 0xFF,
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned char sec = 0;
        static unsigned char iIndex = 0;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = image; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = image; i = 0; break;//第八行
                default: break;
        }

        sec++;
        if (sec >= 250)//250ms一次更新
        {
                sec = 0;
                iIndex++;
                if (iIndex >= 32)//最后一帧
                        iIndex = 0;
        }

}图像纵向下移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

unsigned char code image[] =
{
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
        0xC3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3, 0xFF,
        0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7, 0xFF,
        0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3, 0xFF,
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned char sec = 0;
        static char iIndex = 32;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = image; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = image; i = 0; break;//第八行
                default: break;
        }

        sec++;
        if (sec >= 250)//250ms一次更新
        {
                sec = 0;
                iIndex--;
                if (iIndex < 0)//最后一帧
                        iIndex = 0;
        }

}图像横向左移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

unsigned char code image =
{
        { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
        { 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F },
        { 0xFF, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F },
        { 0xFF, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F },
        { 0xFF, 0x0F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x0F },
        { 0xFF, 0x87, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0x87 },
        { 0xFF, 0xC3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3 },
        { 0xFF, 0xE1, 0x73, 0x73, 0x73, 0xF3, 0xF3, 0xE1 },
        { 0xFF, 0x70, 0x39, 0x39, 0x39, 0x79, 0xF9, 0xF0 },
        { 0xFF, 0x38, 0x1C, 0x1C, 0x1C, 0x3C, 0x7C, 0xF8 },
        { 0xFF, 0x9C, 0x0E, 0x0E, 0x0E, 0x1E, 0x3E, 0x7C },
        { 0xFF, 0xCE, 0x07, 0x07, 0x07, 0x0F, 0x1F, 0x3E },
        { 0xFF, 0x67, 0x03, 0x03, 0x03, 0x07, 0x0F, 0x9F },
        { 0xFF, 0x33, 0x01, 0x01, 0x01, 0x03, 0x87, 0xCF },
        { 0xFF, 0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7 },
        { 0xFF, 0xCC, 0x80, 0x80, 0x80, 0xC0, 0xE1, 0xF3 },
        { 0xFF, 0xE6, 0xC0, 0xC0, 0xC0, 0xE0, 0xF0, 0xF9 },
        { 0xFF, 0x73, 0x60, 0x60, 0x60, 0x70, 0x78, 0xFC },
        { 0xFF, 0x39, 0x30, 0x30, 0x30, 0x38, 0x3C, 0x7E },
        { 0xFF, 0x9C, 0x98, 0x98, 0x98, 0x9C, 0x1E, 0x3F },
        { 0xFF, 0xCE, 0xCC, 0xCC, 0xCC, 0xCE, 0x0F, 0x1F },
        { 0xFF, 0x67, 0x66, 0x66, 0x66, 0x67, 0x07, 0x0F },
        { 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x03, 0x87 },
        { 0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3 },
        { 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0xE1 },
        { 0xFF, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE0, 0xF0 },
        { 0xFF, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF0, 0xF8 },
        { 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF8, 0xFC },
        { 0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE },
        { 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF }
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned char sec = 0;
        static char iIndex = 0;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = image; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = image; i = 0; break;//第八行
                default: break;
        }

        sec++;
        if (sec >= 250)//250ms一次更新
        {
                sec = 0;
                iIndex++;
                if (iIndex >= 29)//最后一帧
                        iIndex = 0;
        }

}图像横向右移

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

unsigned char code image =
{
        { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
        { 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F },
        { 0xFF, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F },
        { 0xFF, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F },
        { 0xFF, 0x0F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x0F },
        { 0xFF, 0x87, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0x87 },
        { 0xFF, 0xC3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3 },
        { 0xFF, 0xE1, 0x73, 0x73, 0x73, 0xF3, 0xF3, 0xE1 },
        { 0xFF, 0x70, 0x39, 0x39, 0x39, 0x79, 0xF9, 0xF0 },
        { 0xFF, 0x38, 0x1C, 0x1C, 0x1C, 0x3C, 0x7C, 0xF8 },
        { 0xFF, 0x9C, 0x0E, 0x0E, 0x0E, 0x1E, 0x3E, 0x7C },
        { 0xFF, 0xCE, 0x07, 0x07, 0x07, 0x0F, 0x1F, 0x3E },
        { 0xFF, 0x67, 0x03, 0x03, 0x03, 0x07, 0x0F, 0x9F },
        { 0xFF, 0x33, 0x01, 0x01, 0x01, 0x03, 0x87, 0xCF },
        { 0xFF, 0x99, 0x00, 0x00, 0x00, 0x81, 0xC3, 0xE7 },
        { 0xFF, 0xCC, 0x80, 0x80, 0x80, 0xC0, 0xE1, 0xF3 },
        { 0xFF, 0xE6, 0xC0, 0xC0, 0xC0, 0xE0, 0xF0, 0xF9 },
        { 0xFF, 0x73, 0x60, 0x60, 0x60, 0x70, 0x78, 0xFC },
        { 0xFF, 0x39, 0x30, 0x30, 0x30, 0x38, 0x3C, 0x7E },
        { 0xFF, 0x9C, 0x98, 0x98, 0x98, 0x9C, 0x1E, 0x3F },
        { 0xFF, 0xCE, 0xCC, 0xCC, 0xCC, 0xCE, 0x0F, 0x1F },
        { 0xFF, 0x67, 0x66, 0x66, 0x66, 0x67, 0x07, 0x0F },
        { 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x03, 0x87 },
        { 0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3 },
        { 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0xE1 },
        { 0xFF, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE0, 0xF0 },
        { 0xFF, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF0, 0xF8 },
        { 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF8, 0xFC },
        { 0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE },
        { 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF }
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned char sec = 0;
        static char iIndex = 29;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = image; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = image; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = image; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = image; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = image; i = 0; break;//第八行
                default: break;
        }

        sec++;
        if (sec >= 250)//250ms一次更新
        {
                sec = 0;
                iIndex--;
                if (iIndex < 0)//最后一帧
                        iIndex = 29;
        }

}9 ~ 0倒计时

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;


unsigned char code num =
{
        { 0xE3, 0xDD, 0xDD, 0xDD, 0xC3, 0xDF, 0xDD, 0xE3 },
        { 0xFF, 0xC3, 0xBD, 0xBD, 0xC3, 0xBD, 0xBD, 0xC3 },
        { 0xFF, 0xC1, 0xDF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF },
        { 0xC7, 0xBB, 0xFB, 0xC3, 0xBB, 0xBB, 0xBB, 0xC7 },
        { 0x81, 0xFD, 0xFD, 0xC3, 0xBF, 0xBF, 0xBD, 0xC3 },
        { 0xDF, 0xCF, 0xD7, 0xDB, 0x03, 0xDF, 0xDF, 0x07 },
        { 0xFF, 0xE3, 0xDD, 0xDF, 0xE3, 0xDF, 0xDD, 0xE3 },
        { 0xC3, 0xBD, 0xBF, 0xBF, 0xCF, 0xF3, 0xFD, 0x81 },
        { 0xEF, 0xE3, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0x83 },
        { 0xC3, 0xBD, 0x7E, 0x7E, 0x7E, 0x7E, 0xBD, 0xC3 }
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned int sec = 0;
        static char iIndex = 0;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = num; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = num; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = num; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = num; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = num; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = num; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = num; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = num; i = 0; break;//第八行
                default: break;
        }

        sec++;
        if (sec >= 1000)//1s一次更新
        {                                          
                sec = 0;
                iIndex++;
                if (iIndex > 9)//最后一帧
                        iIndex = 0;
        }

}0 ~ 9正计时

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;


unsigned char code num =
{
        { 0xE3, 0xDD, 0xDD, 0xDD, 0xC3, 0xDF, 0xDD, 0xE3 },
        { 0xFF, 0xC3, 0xBD, 0xBD, 0xC3, 0xBD, 0xBD, 0xC3 },
        { 0xFF, 0xC1, 0xDF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF },
        { 0xC7, 0xBB, 0xFB, 0xC3, 0xBB, 0xBB, 0xBB, 0xC7 },
        { 0x81, 0xFD, 0xFD, 0xC3, 0xBF, 0xBF, 0xBD, 0xC3 },
        { 0xDF, 0xCF, 0xD7, 0xDB, 0x03, 0xDF, 0xDF, 0x07 },
        { 0xFF, 0xE3, 0xDD, 0xDF, 0xE3, 0xDF, 0xDD, 0xE3 },
        { 0xC3, 0xBD, 0xBF, 0xBF, 0xCF, 0xF3, 0xFD, 0x81 },
        { 0xEF, 0xE3, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0x83 },
        { 0xC3, 0xBD, 0x7E, 0x7E, 0x7E, 0x7E, 0xBD, 0xC3 }
};//通过取模软件获取

void main(void)
{
        ENLED = 0;
        ADDR3 = 0;//使能U4 74HC138

        EA = 1;//打开中断总开关
       
        TMOD = 1;//设置定时器0为模式1
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值       
        TR0 = 1;//启动定时器0

        ET0 = 1;//打开定时器0的中断
       
        while (1);
}

void interruptTimer0() interrupt 1
{
        static unsigned char i = 0;
        static unsigned int sec = 0;
        static char iIndex = 9;
        TH0 = 0xFC;
        TL0 = 0x67;//设置定时器0的初值

        P0 = 0xff;//显示消隐
        switch (i)
        {
                case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; P0 = num; i++; break;//第一行
                case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; P0 = num; i++; break;//第二行
                case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; P0 = num; i++; break;//第三行
                case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; P0 = num; i++; break;//第四行
                case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; P0 = num; i++; break;//第五行
                case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; P0 = num; i++; break;//第六行
                case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; P0 = num; i++; break;//第七行
                case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; P0 = num; i = 0; break;//第八行
                default: break;
        }

        sec++;
        if (sec >= 1000)//1s一次更新
        {                                          
                sec = 0;
                iIndex--;
                if (iIndex < 0)//最后一帧
                        iIndex = 9;
        }

}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 点亮点阵