(学习笔记)手把手教你学51单片机:中断与数码管动态显示

一、c语言的数组

1.1数组的基本概念

数组是具有相同数据类型的有序数据的组合,一般来讲数组定义后满足以下三个条件:

(1)具有相同的数据类型

(2)具有相同的名字

(3)在存储器中是被连续存放的

1.2数组的声明

数据类型 数组名【数组长度】;

(1)同一个数组中的元素具有相同的数据类型。

(2)数组名必须为字母、数字、下划线组成且第一个字符必须是字母或者下划线。

(3)数组长度可以是常量或者常量表达式,且必须是正整数

1.3数组的初始化

数据类型 数组名【数组长度】={初值列表};

1.4数组的使用和赋值

(1)c语言程序中,是不能一次使用整个数组的,只能使用数组的单个元素。

(2)数组元素的方括号里的下标可以是整型常数、整型变量或者表达式,而数组初始化方括号里的数字必须是常熟而不能是变量。

(3)数组整体赋值只能在初始化的时候进行,程序执行代码中只能对单个数码赋值。

二、条件语句

2.1 if语句

 if……else

2.2 if……else if……else语句

2.3 switch语句

分支过多时可以采用switch语句,避免if……else配对出错。

switch(表达式)

{

     case 常量表达式1:语句1;

    case 常量表达式2:语句2;

    …

    default:语句n+1;

}

首先计算“表达式”的值,然后从第一个case开始,与“常量表达式x”进行比较,若于当前值不相等,不执行冒号后面的语句,一旦发现和某个常量表达式的值相等,则执行之后的所有语句

改进:

switch(表达式)

{

     case 常量表达式1:语句1;break;

    case 常量表达式2:语句2;break;

    …

    default:语句n+1;break;

}

break,跳出当前循环,包括for或者while,同时还可以用来结束switch语句块。

三、数码管的动态显示

3.1动态显示的基本原理

动态显示(动态扫描):多个数码管显示实际上是轮流点亮数码管,利用人眼的视觉暂留(余晖效应),看起来像是所有数码管同时亮了。

完成一次全部数码管的扫描需要10ms以内,只要刷新频率大于100Hz,即刷新时间小于10ms,就可以做到无闪烁。

3.2数码管显示消隐

在数码管位选和段选的瞬态会产生余晖,为了避免可采取以下措施:

(1)刷新之前关闭所有的段,改变位选后再打开段。

赋值语句前加上 P0=0xFF

(2)关闭数码管的位,赋值好之后再打开。

在赋值语句前加上 ENLED=1 ,赋值刷新语句完成后  ENLED=1

仍存在问题:亮度不一

例如在秒表倒计时程序中由于每个数码管的显示时间为1s, 实际显示时间为“1s+从上一次刷新值到这一次刷新值执行代码耗费的时间”,由于后者的时间差会导致几个数码管亮度不一。故需要采用其他思路解决这个问题。

四、单片机中断系统

4.1定时器中断的应用

明确定时器和中断不是一回事!

定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断则是单片机的一种运算机制。

标准的51单片机中控制中断的寄存器有两个,一个是中断使能寄存器,另一个是中断优先级寄存器

 

                                                IE----中断使能寄存器的位分配(地址0xA8 可位寻址 )

                   

                  

中断使能寄存器IE的位0~5控制了 6 个中断使能,第 6 位没用到,第 7 位是总开关。0~5位相当于分开关。故只要用到中断就必须先写 EA=1  。

                    

T0中断,要使用这个中断那么就要把它的中断使能为 ET0 置1。

中断函数写好后,每当满足中断条件而触发中断后,系统就会自动来调用中断函数。

4.2中断优先级

中断优先级有两种,一种是抢占优先级,一种是固有优先级。

                   

IP的每一位表示对应中断的抢占优先级,每一位的复位值都是0,当把某一位置1时,这一位的优先级就比其他位的优先级高。

当进入低优先级中断中执行时,如又发生了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级级中断后,再返回处理低优先级中断,这个过程就叫做 中断嵌套 ,也称为抢占。所以抢占优先级的概念就是,优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。当然反过来,优先级低的中断是不能打断优先级高的中断的。

既然有抢占优先级,自然也有非抢占优先级,也成为 固有优先级 。如表 6 - 5 中断优先级编号中,数字越小优先级越高,不具有抢占的特性。即使在低优先级中断执行过程中又发生了高优先级的中断,也只能等到低优先级执行完之后才能得到响应。

猜你喜欢

转载自blog.csdn.net/Wapiti_y/article/details/83472682