多位数按键操作(闪烁)数码管显示

2023-09-18 18:37:42

/*-----------------------------------------------

  内容:按键加减数字,多个数码管显示
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit KEY_ADD=P3^3;  //定义按键输入端口
sbit KEY_DEC=P3^4;

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;//                 位锁存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量

void DelayUs2x(unsigned char t);//函数声明 
void DelayMs(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
unsigned char num=0;                  
KEY_ADD=1; //按键输入端口电平置高
KEY_DEC=1;
while (1)         //主循环
  {

  if(!KEY_ADD)  //如果检测到低电平,说明按键按下
    {
     DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY_ADD)     //再次确认按键是否按下,没有按下则退出
       {
        while(!KEY_ADD);//如果确认按下按键等待按键释放,没有释放则一直等待
           {
           if(num<99)    //加操作
              num++;

             }
       }
    }

 if(!KEY_DEC)  //如果检测到低电平,说明按键按下
    {
     DelayMs(10); //延时去抖,一般10-20ms
     if(!KEY_DEC)     //再次确认按键是否按下,没有按下则退出
       {
       while(!KEY_DEC);//如果确认按下按键等待按键释放,没有释放则一直等待
           {
           if(num>0)  //减操作
              num--;
             }
       }
    }
       TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
       TempData[1]=dofly_DuanMa[num%10];
       Display(0,8); //显示全部8位
     //主循环中添加其他需要一直工作的程序    
  }
}
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
     DelayUs2x(245);
 }
}
/*------------------------------------------------
 显示函数,用于动态扫描数码管
 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
 如输入0表示从第一个显示。
 Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
      unsigned char i;
      
      for(i=0;i<Num;i++)
       { 
       DataPort=0;   //清空数据,防止有交替重影
       LATCH1=1;     //段锁存
       LATCH1=0;

       DataPort=dofly_WeiMa[i+FirstBit]; //取位码 
       LATCH2=1;     //位锁存
       LATCH2=0;

       DataPort=TempData[i]; //取显示数据,段码
       LATCH1=1;     //段锁存
       LATCH1=0;
       
       DelayMs(2); // 扫描间隙延时,时间太长会闪烁,太短会造成重影

       }

}

 

更多推荐

多线程回顾、集合Collection、Set、List等基本知识

多线程回顾问:多线程的两种创建方式?继承Thread类实现Runnable接口线程池Callable问:多线程通常会遇到线程安全问题?什么情况下会遇到线程安全问题?答:一个数据被多个线程访问(有读有写)解决这个问题的方式?SE:同步锁synchronizedA:同步代码块B:同步方法同步锁的要求A:这多个线程必须使用同

详细介绍下路由器中的WAN口

路由器的WAN口(WideAreaNetworkport)是指用于连接广域网(WAN)的接口。它是路由器与外部网络(如互联网)之间的物理连接点,允许路由器与互联网服务提供商(ISP)或其他广域网设备进行通信。那么下面我们详细介绍下路由器的WAN口:功能:WAN口的主要功能是连接到广域网,将路由器与互联网相连。它提供了路

Amazon Lightsail——兼具亚马逊云科技的强大功能与 VPS 的简易性

对于开发者而言,当你想构建系统架构时,你的面前就出现了两种选择,选择一:花时间去亲手挑选每个亚马逊云科技组件(云服务器、存储、IP地址等),然后自己组装起来;选择二是只需要一个预先配置且预先组装的系统,就可以运行自己的Web应用程序,而不必自己费力去构建系统。在很多情况下,那些寻求预组装系统的人会求助于虚拟私有云服务器

景联文科技:数据供应商在新一轮AI热潮中的重要性

景联文科技是AI基础行业的头部数据供应商,可协助人工智能企业解决整个人工智能链条中数据标注环节的相对应问题。随着全球新一轮AI热潮来袭,大量训练数据已成为推动AI算法模型进步和演化的不可或缺的重要因素。数据的质量和数量直接影响了模型训练和性能优化的效果,高质量的AI数据有助于提升人工智能应用的服务能力。根据相关统计资料

LaTeX中的积分符号

这里写自定义目录标题一般的积分符号如何输出数值的积分符号?**cmupint**包**stix**包**esint**包其它包一般的积分符号LaTeX\LaTeXLATE​X中可以直接输入\int来得到积分符号,如果要用定积分则使用\int_{a}^{b}。语法输出\intint_{a}^{b}\iint\iint\l

2024年天津专升本文化课考试语文基础考试大纲(2023年9月修订)

天津市高等院校“高职升本科”招生统一考试语文基础考试大纲(2023年9月修订)一、考试性质天津市高等院校“高职升本科”招生统一考试是由合格的高职高专毕业生参加的选拔性考试。高等院校根据考生的成绩,按照已确定的招生计划,择优录取。因此,考试应该具有较高的信度、效度、适当的难度和必要的区分度。二、考试内容与基本要求(一)能

华为HC2023 专题演讲:openGauss 内核架构双引擎,全新打造数据底座

华为全联接大会2023专题演讲:openGauss内核架构双引擎,全新打造数据底座2023年9月22日14:00-15:40(UTC+08:00)上海世博中心430openGauss5.1(Preview)版的最新技术分享社区、技术、商业、生态等最新进展与数据库大咖共探数据库技术与前沿未来精彩议程14:00-14:10

LeetCode 394. 字符串解码

题目链接力扣(LeetCode)官网-全球极客挚爱的技术成长平台题目解析使用栈来很好的解决每一个中括号(包含前边的数字)的重复插入问题。我们首先创建一个栈,栈中的数据是一个个的键值对{count,ans.size()};分别是当前字符串重复的次数,和当前字符串在ans的其实下标。ans代表的是遍历到当前字符的正确答案。

【ES6知识】Iterator迭代器与 class类

文章目录一、Iterator迭代器1.1基础知识概述1.2工作原理1.3Symbol.iterator1.4Generator函数来实现Symbol.iterator接口二、ES6Class类2.1概述2.2ES6中的继承2.3面向对象应用-React一、Iterator迭代器1.1基础知识概述迭代器(Iterator

小节9:Python之numpy

numpy全称为NumericalPython,是很多数据或科学相关Python包的基础。1、numpy数组(NDarrayN维数组)numpy数组是更适合数据分析的列表。numpy的数组和Python的内置列表有相似之处,也有不同之处。相似之处:我们都可以通过索引去获得某个元素,可以通过切片获得某个范围的多个元素,也

Excel中的宏、VBA

一、宏是什么?EXCELMACRO是一种记录和播放工具,它仅记录您的Excel步骤,并且宏将根据需要播放任意多次。VBA宏可自动执行重复任务,从而节省了时间。这是一段可在Excel环境中运行的编程代码,但您无需成为编码器即可对宏进行编程。但是,您需要VBA的基础知识才能在宏中进行高级修改。作为人类,我们是习惯的产物。我

热文推荐