找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3303|回复: 0
收起左侧

51单片机按键控制数码管循环显示0~60源程序

[复制链接]
ID:700494 发表于 2020-11-21 12:30 | 显示全部楼层 |阅读模式
一个简单的小程序!!!
废话不多说,上代码,如果有看不懂的欢迎评论提问,附效果图&&原理图!!!// Header:
// File Name: 按键控制数码管循环显示
// Author: hhhmxk
// Date: 2020.10.25 21:20
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit key = P3^4;
sbit w1 = P3^0;
sbit w2 = P3^1; // 数码管位选端口
#define dx P2   // 数码管段选端口

u8 code seg_tab[] = {
        0x40, 0x79, 0x24, 0x30, 0x19,
        0x12, 0x02, 0x78, 0x00, 0x10
};  // encode

void display(u8 num);
void delay_ms(u16 num);
        
void main()
{
        u8 count;
        count = 0;
        while(1)
        {
                if(key == 0)
                {
                        delay_ms(10);
                        if(key == 0)
                        {
                                count = count==60? 0 : count+1;
                                while(!key); // 松手检测
                        }
                }
               
                display(count);
        }
}

void display(u8 num)
{
        u8 shiwei, gewei; // 数字的十位 个位
        shiwei = num/10; //取模   34/10 = 3
        gewei = num%10; //取余        34%10 = 4
        
        w1 = 1; //高位位选
        dx = seg_tab[shiwei] | 0x80; //去掉后面的小点  下面同理
        delay_ms(2);
        w1 = 0;
                                
        w2 = 1; //低位位选
        dx = seg_tab[gewei] | 0x80;
        delay_ms(2);
        w2 = 0;
}

void delay_ms(u16 num)
{
         u16 x, y;
        for(x = num; x > 0; x--)
                for(y = 110; y > 0; y--);
}


08e66f6a358c681df79f3e17c627c8b5a8b577e2.gif



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表