51单片机简易计算器(中断,按键扫描,数码管显示)【0】

这是个51单片机的小程序,是我接触单片机之初的一个小练习。
首先感谢学社的学长学姐指导,再感谢我自己虽然不是这个专业的学生,却仍在坚持。
里面运用了不少知识,其中比较重要的有外部中断,数码管动态显示,按键的扫描还有现在看起来极其啰嗦与智障的程序构思。 )要是想了解这些内容的可以康康这篇。
第一篇主要介绍中断,矩阵按键,数码管显示。
第二篇介绍以上原理的程序实现和计算器程序。

外部中断

这个非常重要,51单片机好像并不能完成多线程任务,有些事情用外部中断或计时器中断会大大提高效率。
先来谈谈外部中断是什么吧,其实顾名思义,就是当有一个外部的条件改变时(通常是电位变化)主程序就被迫暂停,转而运行中断里的程序,直到运行完再跳回主函数,这个触发的判断可以理解为与主函数并行,就是不论主程序运行到哪(前提是你打开了中断),都可以触发中断。
在这里插入图片描述

_

  • 接下来是寄存器的具体配置,为什么要配置寄存器呢,由上图不难看出,寄存器的作用就是一个一个的小开关,通过设置开关最终打开我们想要的那个功能。(好麻烦啊,没准可以去开源社区找一下头文件,没准已经有大佬提前封装好了呢?)
  • 下图展示了中断的开启方式,51单片机的中断有5个中断源和两个优先级。这里从左开始,TCON寄存器是中断请求标志,可以理解成中断的一层开关。
  • 中间是IE寄存器中断允许控制,是中断的另一层开关。
  • 最后是IP寄存器,它的作用是可以人为规定中断的优先级。如果不预先设计,单片机会自动规定优先级,(外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断)我的计算器程序只是用了一个中断,这里不再讨论IP的设定。
    在这里插入图片描述
    下图是TCON的相关寄存器。
    在这里插入图片描述
    在这里插入图片描述
    下图是IE的相关寄存器。
    在这里插入图片描述
    在这里插入图片描述
  • 了以上寄存器,便可以打开自己想要的中断。先来看一下中断响应的条件。
    在这里插入图片描述
  • 可以配置中断啦!比如我想要打开外部中断零的下降沿触发:
    EA=1;
    EX0=1;
    IT0=1;
    为了便于控制,写程序时一般会把有关中断的函数写在一个子程序里,在主程序里先初始化即可。
  • 中断触发后程序在哪运行呢, 我们还需要写一下中断服务函数。
void int() interrupt 0    {要运行的函数}

这个intreeupt 0 代表的就是外部中断0 其他的:
interrupt 1 定时器中断0
interrupt 2 外部中断1
interrupt 3 定时器中断1
interrupt 4 串行口中断

有关此段的程序我已在最后面的计算机程序中注释出来。那个程序中的中断作用是控制输入数字 的正负输入正数时灯不亮,按下 按键数值反转并且指示灯亮(本来是不想用中断的,但这部分内容是后加的,改程序太麻烦,干脆加个中断。。。)

矩阵按键扫描

矩阵按键是一个比较基础的算是51单片机结构。它的原理比较简单,相当于把4*4的按键标上X,Y坐标,用8个引脚分两次输入不同的电平并检测,最终确定你按下的键。
其原理图如下:
在这里插入图片描述
-首 先,我们可以人为设定1-4引脚全为高电平,5-8全为低电平(这是软件定义的)当你按下一个键时,高电平引脚还是高电平,但低电平引脚变为高电平。这样就能检测出是哪一行的按键按下,再将电平反转,可测出是哪一列的按键按下,最终确定按键。具体程序在下一篇。

  • 当设置引脚的点位时我们可以宏定义一组引脚用十六进制数进行控制(其实是二进制,1:高电平,0低电平。)
  • 延时消抖,开发板上的按键很灵,当按下时由于接触问题其实你已经按下很多次,避免这种问题的方法可以在当单片机第一次检测到电位变化时延时一小会,再检测一次,确定是否真的按下。

数码管动态显示

  • 需要用到38译码器,用三个引脚控制八个管。其原理也可以理解成是三位二进制数组成十位的一到八每个管上有8个段,这个用宏定义和十六进制数控制。这里不做详细解释。
    在这里插入图片描述

  • 码管动态显示,由于三个引脚每次只能确定1个管亮,想要让八个数码管看起来全亮就需要在短时间内让一到八位全亮一次,并且每个管的内容不一样,需要用到循环函数。
    具体程序会结合计算器的程序在下一篇讲。

——
内容参考:学长学姐们,普中单片机教程,电子发烧友。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值