本文共 1496 字,大约阅读时间需要 4 分钟。
在数码管动态显示过程中,主要是在数码管位选和段选产生的瞬态造成的。数码管的不应该亮的地方有点微微发亮,这种现象就是“鬼隐”。
利用延时函数,使得数码管该亮的地方亮的时间久一点,那么不该亮的地方就不会再亮了。
关闭段:在改变值之前,使数码管全部熄灭。
关闭位:关闭数码管的位,等到赋值过程都做好了后,再重新打开。位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符号 | EA | – | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
复位值 | 0 | – | 0 | 0 | 0 | 0 | 0 | 0 |
位 | 符号 | 描述 |
---|---|---|
7 | EA | 总中断使能位,相当于总开关 |
6 | – | |
5 | ET2 | 定时器2中断使能 |
4 | ES | 串口中断使能 |
3 | ET1 | 定时器1中断使能 |
2 | EX1 | 外部中断1使能 |
1 | ET0 | 定时器0中断使能 |
0 | EX0 | 外部中断0使能 |
中断函数编号 | 中断名称 | 中断标志位 | 中断使能位 | 中断向量地址 | 默认优先级 |
---|---|---|---|---|---|
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 |
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
符号 | – | – | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
复位值 | – | – | 0 | 0 | 0 | 0 | 0 | 0 |
位 | 符号 | 描述 |
---|---|---|
7 | – | 保留 |
6 | – | 保留 |
5 | PT2 | 定时器2中优先级断控制位 |
4 | PS | 串口中断优先级断控制位 |
3 | PT1 | 定时器1中断优先级断控制位 |
2 | PX1 | 外部中断1优先级断控制位 |
1 | PT0 | 定时器0中断优先级断控制位 |
0 | PX0 | 外部中断0优先级断控制位 |
#include#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;}
转载地址:http://irrxi.baihongyu.com/