记数器实验

#include <reg52.h>

sbit led = P1^0; // LED连接的IO口

sbit key = P1^5; // 按键连接的IO口

sbit digit = P3^5; // 数码管连接的IO口

unsigned int count = 0; // 计数器

unsigned int digit_display = 0; // 数码管显示的数字

void delay(unsigned int t) // 延时函数

{

    while(t--);

}

void display(unsigned int num) // 显示数码管数字函数

{

    switch(num)

    {

        case 1: digit_display = 0x3F; break; // 0b00111111

        case 2: digit_display = 0x5B; break; // 0b01011011

        case 3: digit_display = 0x4F; break; // 0b01001111

        case 4: digit_display = 0x66; break; // 0b01100110

        case 5: digit_display = 0x6D; break; // 0b01101101

        case 6: digit_display = 0x7D; break; // 0b01111101

        case 7: digit_display = 0x07; break; // 0b00000111

        case 8: digit_display = 0x7F; break; // 0b01111111

        case 9: digit_display = 0x6F; break; // 0b01101111

        default: digit_display = 0x7F; break; // 默认显示数字8

    }

}

void main()

{

    TMOD = (TMOD & 0xF0) | 0x02; // 设置定时器T0工作模式2

    TH0 = (65536 - 50000) / 256; // 设置定时器初始值,定时间隔为1s

    TL0 = (65536 - 50000) % 256;

    EA = 1; // 全局中断使能

    ET0 = 1; // 定时器中断使能

    TR0 = 1; // 启动定时器T0

    while(1)

    {

        if(key == 0) // 如果按键按下

        {

            delay(5); // 去抖动延时

            if(key == 0) // 如果按键仍然按下

            {

                count++; // 计数器加一

                if(count >= 9) count = 0; // 如果超过9次则重新开始计数

                display(count); // 显示数码管上的数字

            }

        }

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值