扫盲教程:深入浅出讲解单片机控制单只数码管循环显示0~F
最近有好多小伙伴留言说,我发的项目很难,他们都是刚入门的,希望我写一些入门级的教程,那么今天我就从硬件和软件两个方面来给大家讲一下最基本也是十分重要的电路 单片机驱动数码管显示电路。
要弄清楚单片机控制数码管显示字符的原理我们首先要知道:三个概念
单片机:通俗的讲单片机是一种集成电路芯片,利用一些特殊工艺把许多不同功能的模块集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。单片机可以烧进程序,然后从不同的IO口输出规定的电平信号。
七段数码管(如下图):
数码管是一类价格便宜 使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。一般的七段数码管拥有七个发光二极管(三横四纵)用以显示十进制0至9的数字外加小数点,也可以显示英文字母 A 至 F(b、d 为小写,其他为大写)。现时大部分的七段数码管会以斜体显示。
好了,上面是单片机和数码管的概念,下面说一下单片机的工作原理:
一个单片机要想能正常工作必须满足它工作的最小系统,这个最小系统包括,电源电路,晶振电路,复位电路等,当电源电路给单片机正常供电后,在上电的一瞬间会给复位电容充电从而完成上电复位的动作。单片机复位结束后,我们把需要控制数码管显示的代码烧进单片机,这时候单片机就会根据写的代码从不同的IO口输出不同的电平,从而控制七段数码管每一段的亮灭,而达到显示不同数字的目的。
好了说了半天理论了,下面我们开始实践一下吧!
首先用PROTEUS仿真软件画好单片机最小系统和LED数码管驱动原理图:本项目中用STC89C52
把程序烧进去以后,数码管开始从0到F显示,适当调整源代码参数可以修改显示不同的数字和不同的时间间隔。
51单片机参考源代码如下:
/*单只数码管循环显示0~F 作者 科技小伟1*/
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};
void delay(uint16 x)
{
uint16 i,j;
for(i = x; i > 0; i --)
for(j = 114; j > 0; j --);
}
void main()
{
uint8 i = 0;
while(1)
{
for(i = 0; i < 16; i ++) //i = (i + 1) % 16
{
P0 = LED_CODE[i];
delay(500);
}
}
}
好了以上就是单片机控制数码管显示的全部内容了,本文从软件和硬件两个角度分别讲解,如果有任何意见或者需要设计文件 欢迎留言或者私信,如果你也对单片机感兴趣,那么快点行动起来吧!我们下期再见!
详解中断程序的编写方法
在应用中断技术时,先要根据中断需实现的功能设计好电路,然后编写中断程序。下面首先分析一个中断程序,再总结出编写中断程序的一般规律。
从实例了解中断程序的编写
图5-2所示是一个已设计好的单片机电路,在这个电路中需要实现这样的中断控制:当按下按键S1时,单片机的外部中断INT0端(与P3.2引脚共用)输入中断请求信号,该信号进入内部中断系统,让CPU产生中断来执行中断子程序,程序运行的结果是让单片机的P1.2引脚输出低电平,发光二极管VD1发光。
图5-2 一个单片机应用电路
实现上述控制功能的程序如下:
程序执行过程说明如下。
① 程序从第2行指令开始执行(因为第1行是伪指令,不执行),执行第2行指令的结果是跳到第6行。
② 第6行~第11行指令用于进行中断前的设置。具体包括:在单片机内部存储器中设置一个区域当作堆栈(堆栈的栈底地址设为5FH);将I/O接口设置到初始状态;设置中断输入有效方式(下降沿有效),并开启总中断和外部中断0。
③ 第12行指令“LJMP $”是一条死循环指令。这条指令执行的结果就是再执行它,程序一直执行这条指令,无法执行下一条指令,就像是原地踏步。
④ 一旦按下按键S1,单片机的INT0端(P3.2)马上由高电平变为低电平,相当于该端输入一个下降沿信号,该信号使单片机内部的中断系统发生中断,由于外部中断0的中断入口地址为0003H,程序马上由“LJMP $”指令处跳到第4行指令“LJMP INT_0”处,第4行指令执行的结果是跳到标号“INT_0”处。
⑤ 从标号“INT_0”到指令“RETI”的这一段程序为中断子程序。为了避免执行中断子程序时破坏累加器ACC和寄存器PSW中的数据,先用“PUSH”指令将ACC、PSW中的数据送到先前设置好的堆栈中保存下来(保护现场),然后执行子程序中的关键部分“CPL P1.2”,执行完后,再用“POP”指令依次将堆栈中的数据送回到PSW、ACC中(恢复现场)。要注意的是,先保存到堆栈中的数据要后取出(先存后取),由于ACC中的数据先存入堆栈,所以要后取出,如果不按“先存后取”的顺序,就会造成数据恢复错误(如会将堆栈中ACC的数据送到PSW中)。
⑥ “ RETI”指令是一条中断子程序返回指令,该条指令执行的结果是返回到中断前的指令,这里是返回到指令“LJMP $”处,让程序又“原地踏步”,直到INT0端再输入中断请求信号。
中断程序的编写方法
中断程序的编写包括主程序的编写和中断子程序的编写。
1.编写主程序
主程序的一般编写过程如下。
① 设置中断源和中断触发方式。根据需要确定中断的性质,通过设置定时器/计数器控制寄存器TCON或串行通信口控制寄存器SCON相应位的值来选择是外部中断,还是定时器/计数器中断等;设置中断触发方式是低电平触发,还是下降沿触发。
② 设置中断优先顺序。根据中断紧急程度(当有多个中断源时)确定中断源的优先顺序,以此来设置中断优先级控制寄存器IP中相应位的值。
③ 打开中断。通过在中断允许寄存器IE中设置相应的值,打开各个中断。
2.编写中断子程序
中断子程序的编写过程如下。
① 关中断。进入中断后,一般先要将中断关闭,再进行现场保护,如在前面的实例中,可在“PUSH ACC”指令前加一条“CLR EA”指令,就能将总中断关闭。
② 保护现场。为了防止执行中断子程序的过程中改变ACC和PSW中的数据,要用“PUSH ”指令将ACC和PSW中的数据送入堆栈中保护起来。
③ 开启中断。现场保护好后,再开启中断,如在前面实例的“PUSH PSW”指令后加一条“SETB EA”指令,就能将总中断打开。
④ 执行中断服务。中断服务程序是中断子程序中的核心,前面实例中的“CPL P1.2”指令就是中断服务程序。
⑤ 关闭中断。中断服务程序执行后又要关闭中断,以恢复现场,如在前面的实例中,可在“CPL P1.2”指令后加一条“CLR EA”指令,就能将总中断关闭。
⑥ 恢复现场。恢复现场的方法是用“POP”指令将堆栈中的数据送还给ACC和PSW。
⑦ 退出中断子程序,返回主程序。在中断子程序的最后用“RETI”指令可以退出中断子程序,返回主程序。
相关问答
INT 1采用边沿触发方式,且 INT0 为中断优先级为高级_作业帮[最佳回答]voidINT_init()//初始化{\x05IT0=0;//外部中断0低电平触发\x05IT1=1;//外部中断1低电平触发\x05PX0=1;//外部中断0分配高优先级\x05PX...
c51 单片机 怎样用 int0 编程紧急制动按钮?一只10uF左右的电解电容和一只100nF...这需要在硬件和软件两个方面作处理。硬件上要将按钮的一端接地,另外一端通过10k左右的电阻上拉到电源Vcc,在按钮上还要...
外部中断 INT0 , INT 1头上加个横线是什么意思?INT0、INT1头上加个横线是表示低有效。引脚名字上面有一横线是代表低电平有效,如rest引脚上有横线就代表低电平才能复位,同理int上有横线则代表低电平或者下...
51 单片机 定时器0的中断响应过程?8051单片机有5个中断源和两个中断优先级,高优先级的中断源可以中断低优先级的服务程序,反之不行。INT0>T0>INT1>T1>串口中断。8051没有专门的开中断和关中断....
单片机 void Delay(unsigned int t) { while(--t); } 这个代码有什么用? 不是有while(1)循环了么?Delay是一个子函数,只有在主函数中调用时才会执行外面的while(1)是大循环,里面的程序一直循环执行先执行LED0=0;当执行到Delay(10000);时,将跳转去执行子函数...
为什么 int 在51 单片机 上是两字节?因为这是C51软件规定的。C51规定char是字节,int是字(双字节),long是双字(四个字节)。不同的软件环境规定int的长度是不同的,有的可能是双字节,也有可能...
单片机 exo是什么意思?应该是EX0吧。EX0(IE.0):外部中断INT0的中断允许EX0=1打开外部中断应该是EX0吧。EX0(IE.0):外部中断INT0的中断允许EX0=1打开外部中断
8051 单片机 的定时器0的中断程序入口地址为?000bH如:ORG0000HAJMPSTARTORG000bH;T0中断地址入口AJMPINT_T0;转到真正的处理程序处ORG30H51...000bH如:...
【 单片机 中into是什么意思】作业帮[最佳回答]MCS-51系列单片机的中断系统MCS-51系列单片机中不同型号芯片的中断源数量是不同的,最基本的8051单片机有5个中断源,分别是INTO、INT1、TO、Tl.MCS...
单片机 中的P是什么?单片机中单独的P指的是奇偶标标志位,是程序状态字PSW中的最低位。P1口和P2口以及P3口都可以做普通的I/O使用!其中P3口具有第二功能:P3.0RXD(串行输入口)...