📄 smg_on.c
字号:
#include "AT89X52.h"
#include "ES51_II.h"
#include "ES51_II_LIB.h"
// 不带小数点 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code SMG_TABLE[16] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
// 带小数点 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code SMG_TABLE_DP[16] ={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
// 数码管显示缓冲区;
unsigned char SMG_BUFF[4];
// 开启数码管显示;
// 用定时器定时刷新实现数码管的动态显示,所以必须使总中断允许(EA = 1);
// 此函数中并没有使EA=1,需在其他地方加上此条语句,否则数码管不会显示;
void SMGDisplayON(void)
{
TMOD &= 0x0f; // 保持T0状态不变
TMOD |= 0x10; // 定时器1方式1
TH1 = 0xEC; // 定时初值
TL1 = 0x78; // 一次定时5ms
ET1 = 1; // 开定时器1溢出中断
//EA = 1; // 开总中断
TR1 = 1; // 启动定时器1
}
// 定时器1刷新数码管显示;5ms秒刷新一次;一秒钟,每个数码管被刷新50次;
// 假定时钟为12MHZ
void T1RefurbishSMG(void) interrupt 3 //using 1
{
// 进入溢出中断时,变量值代表当前应刷新那个数码管
//static unsigned char SMGENNUB = 0;
static unsigned char SMG_Nub = 0;
TH1=0xEC; // 重装定时初值
TL1=0x78;
SMGEN |= 0xf0; // 数码管片选全部禁止
SEGPORT = SMG_BUFF[SMG_Nub]; // 放置数据
SMGEN &= ~( bmSMGEN1 << SMG_Nub ); // 选择一个数码管
if( ++SMG_Nub > 3)
SMG_Nub = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -