眸胝 发表于 2025-6-9 11:01:19

定时器与数码管之代码

小灯以1s间隔闪烁

#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)
{
        unsigned char cnt;//溢出次数

        //74HC138使能
        ENLED = 0;
        ADDR3 = 1;
       
        //Q16导通
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;

        LED = 0;//点亮小灯

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0

        while (1)
        {
                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                LED = ~LED;//小灯状态相反
                                cnt = 0;
                        }
                }
        }
}流水灯左跑,间隔1s[写法1]

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;

sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

void main(void)
{
        unsigned char cnt;//溢出次数
        int count;

        //74HC138使能
        ENLED = 0;
        ADDR3 = 1;
       
        //Q16导通
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0
        count = 0;

        while (1)
        {

                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                if (8 == count)
                                        count = 0;

                                P0 = 0xFF ^ POW(count);

                                count++;
                                cnt = 0;
                        }
                }
        }
}流水灯左跑,间隔1s[写法2]

由于此板子上的P1口的默认值是0xFF,即每一位的默认值都是高电平
也就是说, 给板子重新上电时,P1的每一位都是高电平
故此时ADDR3、ADDR2以及ADDR1默认为高电平
故只需设置ENLED以及ADDR0为低电平即可
#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
//sbit ADDR1 = P1 ^ 1;
//sbit ADDR2 = P1 ^ 2;

//sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

void main(void)
{
        unsigned char cnt;//溢出次数
        int count;

        //74HC138使能
        ENLED = 0;
//        ADDR3 = 1;
       
        //Q16导通
//        ADDR2 = 1;
//        ADDR1 = 1;
        ADDR0 = 0;

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0
        count = 0;

        while (1)
        {

                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                if (8 == count)
                                        count = 0;

                                P0 = 0xFF ^ POW(count);

                                count++;
                                cnt = 0;
                        }
                }
        }
}流水灯左跑,间隔1s[写法3][不采用位寻址]

P1口有8位,每一位都是默认1,故P1初始值为0x11111111即0xFF
设置P1的第0位和第4位为0,则此时P1的值为0x11101110即0xEE
#include <reg52.h>

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

void main(void)
{
        unsigned char cnt;//溢出次数
        int count;

        //Q16导通
        P1 = 0xEE;

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0
        count = 0;

        while (1)
        {

                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                if (8 == count)
                                        count = 0;

                                P0 = 0xFF ^ POW(count);

                                count++;
                                cnt = 0;
                        }
                }
        }
}以下流水灯相关代码都有3种写法,同流水灯左跑一致,均采用第一种写法
流水灯右跑,间隔1s

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;

sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

void main(void)
{
        unsigned char cnt;//溢出次数
        int count;

        //74HC138使能
        ENLED = 0;
        ADDR3 = 1;
       
        //Q16导通
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0
        count = 7;

        while (1)
        {

                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                P0 = 0xFF ^ POW(count);

                                if (0 == count)
                                        count = 8;
       
                                count--;
                                cnt = 0;
                        }
                }
        }
}流水灯左跑后右跑[间隔1s]

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;

sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

void main(void)
{
        unsigned char cnt;//溢出次数
        int count;
        int iflag;//iflag = 0时,左跑,iflag = 1时,右跑

        //74HC138使能
        ENLED = 0;
        ADDR3 = 1;
       
        //Q16导通
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0
        count = 0;
        iflag = 0;

        while (1)
        {

                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                if(0 == iflag)
                                {
                                        if (8 == count)
                                        {
                                                count = 6;
                                                iflag = 1;
                                        }
                                }
                                else
                                {
                                        if (0 == count)
                                                iflag = 0;
                                }

                                P0 = 0xFF ^ POW(count);

                                if (0 == iflag)
                                        count++;
                                else
                                        count--;

                                cnt = 0;
                        }
                }
        }
}流水灯右跑后左跑[间隔1s]

#include <reg52.h>

sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;

sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

int POW(int m)
{
        int i;
        int iRet;
        iRet = 1;
        for (i = 0; i < m; i++)
        iRet = iRet * 2;
        return iRet;               
}

void main(void)
{
        unsigned char cnt;//溢出次数
        int count;
        int iflag;//iflag = 0时,左跑,iflag = 1时,右跑

        //74HC138使能
        ENLED = 0;
        ADDR3 = 1;
       
        //Q16导通
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;

        TMOD = 1;//设置T0为模式1

        //设置T0初始值
        TH0 = 0x4C;
        TL0 = 0x00;

        TR0 = 1;//启动T0

        cnt = 0;//设置溢出次数为0
        count = 7;
        iflag = 1;

        while (1)
        {

                //溢出
                if (1 == TF0)
                {
                        cnt++;

                        //T0初始化
                        TF0 = 0;

                        TH0 = 0x4C;
                        TL0 = 0x00;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                if(0 == iflag)
                                {
                                        if (8 == count)
                                        {
                                                count = 6;
                                                iflag = 1;
                                        }
                                }
                                else
                                {
                                        if (0 == count)
                                                iflag = 0;
                                }

                                P0 = 0xFF ^ POW(count);

                                if (0 == iflag)
                                        count++;
                                else
                                        count--;

                                cnt = 0;
                        }
                }
        }
}数码管显示数字0

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xC0;//数码管abcdef段亮,即显示0

        while(1)
                ;
}数码管显示数字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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xF9;//数码管bc段亮,即显示1

        while(1)
                ;
} 数码管显示数字2

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xA4;//数码管abged段亮,即显示2

        while(1)
                ;
} 数码管显示数字3

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xB0;//数码管abgcd段亮,即显示3

        while(1)
                ;
} 数码管显示数字4

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x99;//数码管fgbc段亮,即显示4

        while(1)
                ;
} 数码管显示数字5

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x92;//数码管afgcd段亮,即显示5

        while(1)
                ;
} 数码管显示数字6

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x82;//数码管afgcde段亮,即显示6

        while(1)
                ;
} 数码管显示数字7

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xF8;//数码管abc段亮,即显示7

        while(1)
                ;
} 数码管显示数字8

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x80;//数码管abcdefg段亮,即显示8

        while(1)
                ;
} 数码管显示数字9

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x90;//数码管abcdfg段亮,即显示9

        while(1)
                ;
} 数码管显示字母A

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x88;//数码管abcefg段亮,即显示A

        while(1)
                ;
} 数码管显示字母b

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x83;//数码管cdefg段亮,即显示b

        while(1)
                ;
} 数码管显示字母C

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xC6;//数码管afed段亮,即显示C

        while(1)
                ;
} 数码管显示字母d

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0xA1;//数码管bcdef段亮,即显示d

        while(1)
                ;
} 数码管显示字母E

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x86;//数码管adefg段亮,即显示E

        while(1)
                ;
} 数码管显示字母F

#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)
{
        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;


        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        P0 = 0x8E;//数码管aefg段亮,即显示F

        while(1)
                ;
}数码管正向计时[间隔1s][从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 LedChar[] =
{
        0xC0, 0xF9, 0xA4, 0xB0, 0x99,
        0x92, 0x82, 0xF8, 0x80, 0x90
};

void main(void)
{
        unsigned cnt;//溢出次数
        int sec;//秒

        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;

        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        TMOD = 1;//To设置为模式0

        //设置T0初始值
        TH0 = 0xB4;
        TL0 = 0x00;

        TR0 = 1;//启动T0
        cnt = 0;
        sec = 0;

        while(1)
        {
                if (1 == TF0)//溢出
                {
                        //设置T0初始值
                        TF0 = 0;
                        TH0 = 0xB4;
                        TL0 = 0x00;

                        cnt++;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                cnt = 0;

                                if (10 == sec)
                                        sec = 0;

                                P0 = LedChar;
                                sec++;
                        }
                }
        }
}数码管倒计时[间隔1s][从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 LedChar[] =
{
        0xC0, 0xF9, 0xA4, 0xB0, 0x99,
        0x92, 0x82, 0xF8, 0x80, 0x90
};

void main(void)
{
        unsigned cnt;//溢出次数
        int sec;//秒

        //74HC138使能
        ENLED = 0;
        ADDR0 = 1;

        //Q7导通
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        TMOD = 1;//To设置为模式0

        //设置T0初始值
        TH0 = 0xB4;
        TL0 = 0x00;

        TR0 = 1;//启动T0
        cnt = 0;
        sec = 9;

        while(1)
        {
                if (1 == TF0)//溢出
                {
                        //设置T0初始值
                        TF0 = 0;
                        TH0 = 0xB4;
                        TL0 = 0x00;

                        cnt++;

                        //溢出1s
                        if (cnt >= 20)
                        {
                                cnt = 0;

                                P0 = LedChar;

                                if (0 == sec)
                                        sec = 10;

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