单片机数码管消隐及中断

来源:互联网 发布:php api接口开发 json 编辑:程序博客网 时间:2024/06/05 17:04

一.什么是“鬼隐”

在数码管动态显示过程中,主要是在数码管位选和段选产生的瞬态造成的。数码管的不应该亮的地方有点微微发亮,这种现象就是“鬼隐”。

二.消除“鬼隐”的办法

1.延时(简单却拙劣)

利用延时函数,使得数码管该亮的地方亮的时间久一点,那么不该亮的地方就不会再亮了。

2.关闭段、位

关闭段:在改变值之前,使数码管全部熄灭。
关闭位:关闭数码管的位,等到赋值过程都做好了后,再重新打开。

三.中断的应用

1.中断使能寄存器

a).中断使能寄存器的位分配(地址0xa8、可位寻址)

位 7 6 5 4 3 2 1 0 符号 EA – ET2 ES ET1 EX1 ET0 EX0 复位值 0 – 0 0 0 0 0 0

b).中断使能寄存器的位描述

位 符号 描述 7 EA 总中断使能位,相当于总开关 6 – 5 ET2 定时器2中断使能 4 ES 串口中断使能 3 ET1 定时器1中断使能 2 EX1 外部中断1使能 1 ET0 定时器0中断使能 0 EX0 外部中断0使能

c).中断查询序列

中断函数编号 中断名称 中断标志位 中断使能位 中断向量地址 默认优先级 0 外部中断0 IE0 EX0 0x0003 1(最高) 1 T0中断 TF0 ET0 0x000B 2 2 外部中断1 IE1 EX1 0x0013 3 3 T1中断 TF1 ET1 0x001B 4 4 UART中断 T1/R1 ES 0x0023 5 5 T2中断 TF2/EXF2 ET2 0x002B 6

2.中断优先级

a).中断优先级寄存器的位分配(地址0xB8、可位寻址)

位 7 6 5 4 3 2 1 0 符号 – – PT2 PS PT1 PX1 PT0 PX0 复位值 – – 0 0 0 0 0 0

b).中断优先级寄存器的位描述

位 符号 描述 7 – 保留 6 – 保留 5 PT2 定时器2中优先级断控制位 4 PS 串口中断优先级断控制位 3 PT1 定时器1中断优先级断控制位 2 PX1 外部中断1优先级断控制位 1 PT0 定时器0中断优先级断控制位 0 PX0 外部中断0优先级断控制位

3.中断程序的例子

#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit D1=P1^0;sbit wela=P2^7;sbit dula=P2^6;uint t=0;void main(){    D1=0;    TMOD=0x01;    EA=1;    ET0=1;    TR0=1;    TH0=(65536-50000)/256;    TL0=(65536-50000)%256;    while(1)    {        if(t==10)        {            t=0;            dula=1;            P0=0x7f;            dula=0;            wela=1;            P0=0xc0;            wela=0;        }    }}void temer() interrupt 1{    TH0=(65536-50000)/256;    TL0=(65536-50000)%256;    t++;    dula=1;    P0=0x00;    dula=0;    wela=1;    P0=0xc0;    wela=0;}
0 0