51单片机独立按键数码管(模块化) 您所在的位置:网站首页 独立按键控制数码管 51单片机独立按键数码管(模块化)

51单片机独立按键数码管(模块化)

2024-07-03 23:11| 来源: 网络整理| 查看: 265

51单片机独立按键数码管

基于普中51单片机开发板,运用定时器/计数器0。按键控制数码管,实现60秒计时,数值加减清零。

文章目录 51单片机独立按键数码管前言一、独立按键其他相关 二、代码1.MAIN2.硬件部分代码3.软件部分代码4.相关H文件程序代码

前言

本程序涉及中断,定时器的配置,数码管动态扫描,独立按键。程序基于模块化编写。详细的注解,适合小白服用。 原文件下载按键控制数码管实现显示数值加减]:按键控制数码管实现显示数值加减 哔哩哔哩演示视频按键+数码管

一、独立按键

在这里插入图片描述 独立按键比较简单,它们各自与独立的输入线相连接。在这里插入图片描述 4 条输入线接到单片机的 I/O 口上,当按键 K1 按下时,+5V 通过电阻 R1 然后再通过按键 K1 最终进入 GND 形成一条通路,那么这条线路的全部电压都加到了 R1 这个电阻上,KeyIn1 这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么 KeyIn1和+5V 就应该是等电位,是一个高电平。我们就可以通过 KeyIn1 这个 IO 口的高低电平来判断是否有按键按下。 在这里插入图片描述 在按键被按下的短暂一瞬间,由于硬件上的抖动,往往会产生几毫秒的抖动,在这时候若采集信号,势必导致误操作,甚至系统崩溃;同样,在释放按键的那一刻,硬件上会相应的产生抖动,会产生同样的后果。因此,在模拟或者数字电路中,我们要避免在最不稳定的时候采集信号,进行操作。因此需要对独立按键进行一个消抖处理。

其他相关

有关数码管,可以去看我的另一篇博文51单片机数码管显示60秒倒计时(C语言) 下面咱们直接上代码,我分为主函数部分硬件部分和软件部分代码

二、代码 1.MAIN #include "hardware.h" #include "software.h" void main() { timing(); //初始化定时函数 while(1) { tube();//数码管服务函数(不断对数码管进行扫描) KEY();//独立按键服务函数(不断对独立按键进行扫描) } } 2.硬件部分代码 //按键、数码管 #include "hardware.h" #include "software.h" //调用此函数的变量(因此包含此文件) //共阴数码管段码 uchar code block[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //定义无符号字符型类型数组来储存段码 void tube() //数码管扫描函数 { uchar i; //定义i变量 for(i=2;i0; a--) for(b=110; b>0; b--); } void timing() //初始化定时器函数 { TMOD = 0X01; TH0 = (65536-45872)/256; //装初值,11.0592M晶振,定时50ms,计数个数 N = 45872(在计数时需要预先填装初始计数个数) TL0 = (65536-45872)%256; EA = 1; ET0 = 1; } void Timer0_Rountine(void) interrupt 1 //中断号 定时器/计数器0中断 1为定时器/计数器0的中断号(重要) { TH0 = (65536-45872)/256; //方式1需要重装初值 TL0 = (65536-45872)%256; numm++; //mun变量自加1 if(numm == 20) //判断定时时间是否等于1s 为真之后 LED灯的电平状态转换 { numm = 0; //清零,好判断下次计时 LED =~ LED;//电平状态取反 num++; if(num == 60) num = 0; } } 4.相关H文件程序代码 #ifndef __HARDWARE_H__ #define __HARDWARE_H__ #include //51单片机头文件 //数码管 138译码器 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; //LED灯 sbit LED=P2^0; //独立按键 sbit K1 =P3^1; //定义按键1 sbit K2 =P3^0; sbit K3 =P3^2; sbit K4 =P3^3; typedef unsigned int uint; // typedef(类型定义) 用来给无符号整型类型数据 unsigned int 定义新名字 uint typedef unsigned char uchar; //用来给无符号字符型类型数据 unsigned char 定义新名字 uchar extern uint; //声明给外部函数使用 extern uchar; //声明给外部函数使用 extern void tube(void); //数码管扫描函数 extern void KEY(); #endif #ifndef __SOFTWARE_H__ #define __SOFTWARE_H__ #include //包含此头文件,以便在此C文件中调用 extern void delayms(uint xms); //简单延时 extern void timing(); //初始化定时器函数 extern uchar num; //声明给外部函数使用 #endif


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有