📄 disp.c
字号:
/*
Disp.c
数码管扫描显示驱动程序
*/
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#include "Disp.h"
//宏函数:向数码管位选寄存器(74HC573)加载数据
#define DIGLD(dat)\
{\
P0 = (dat);\
LE_DIG = 1;\
_nop_();\
LE_DIG = 0;\
}
//宏函数:向数码管段选寄存器(74HC573)加载数据
#define SEGLD(dat)\
{\
P0 = (dat);\
LE_SEG = 1;\
_nop_();\
LE_SEG = 0;\
}
//定义显示缓冲区(由定时中断程序自动扫描)
unsigned char DispBuf[8];
unsigned char DispX;
/*
函数:T1INTSVC()
功能:定时器T1的中断服务函数
*/
void T1INTSVC() interrupt 3
{
code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
static unsigned char n = 0;
TR1 = 0; //暂停T1(重新定时前应当暂停)
TH1 = 0xFC; //重新定时1ms
TL1 = 0x66;
TR1 = 1; //重启T1
SEGLD(0xFF); //暂停显示(重要操作)
DIGLD(com[n]); //更新位选信号
SEGLD(~DispBuf[n]); //更新段选数据
n++;
n &= 0x07;
}
/*
函数:DispClear()
功能:清除数码管的所有显示
*/
void DispClear()
{
unsigned char i;
for ( i=0; i<8; i++ )
{
DispBuf[i] = 0x00;
}
DIGLD(0x00);
SEGLD(0x00);
DispX = 0;
}
/*
函数:DispChar()
功能:在数码管上显示字符
参数:
x:数码管的坐标位置(0~7)
c:要显示的字符(仅限十进制数字和减号)
*/
void DispChar(unsigned char c)
{
//0123456789的数码管字型数据
code unsigned char Tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char t;
if ( c == '-' )
{
t = 0x40;
}
else if ( ( c >= '0' ) && ( c <= '9' ) )
{
t = Tab[c-'0'];
}
DispBuf[7-DispX] = t;
DispX++;
DispX &= 0x07;
}
/*
函数:DispStr()
功能:在数码管上显示字符串
参数:
x:数码管的坐标位置(0~7)
*s:要显示的字符串(字符仅限十进制数字和减号)
*/
/*
void DispStr(unsigned char x, unsigned char *s)
{
unsigned char c;
for (;;)
{
c = *s;
if ( c == '\0' ) break;
s++;
DispChar(c);
x++;
}
}
*/
/*
函数:DispDotOn()
功能:显示指定位的小数点
参数:x为数码管坐标
*/
void DispDotOn(unsigned char x)
{
DispBuf[7-x] |= 0x80;
}
/*
函数:DispInit()
功能:数码管扫描显示初始化
*/
void DispInit()
{
EA = 0;
LE_DIG = 0;
LE_SEG = 0;
LE_LED = 0;
DispClear();
TMOD &= 0x0F;
TMOD |= 0x10;
TH1 = 0xFC;
TL1 = 0x66;
TR1 = 1;
ET1 = 1;
EA = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -