⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disp.c

📁 在Quick51实验开发板上51单片机在Keil编译环境下
💻 C
字号:
/*
	Disp.c
	数码管扫描显示驱动程序
*/


#include <reg51.h>
#include <absacc.h>
#include <Disp.h>


//定义显示缓冲区(由定时中断程序自动扫描)
unsigned char DispBuf[8];


/*
函数: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;
	TH1 = 0xFC;
	TL1 = 0x66;
	TR1 = 1;
	P1 = 0xFF;		//暂停显示
	XBYTE[0xE800] = ~DispBuf[n];	//更新扫描数据
	P1 = ~com[n];	//重新显示
	n++;
	n &= 0x07;
}


/*
函数:DispClear()
功能:清除数码管的所有显示
*/
void DispClear()
{
	unsigned char i;
	for ( i=0; i<8; i++ )
	{
		DispBuf[i] = 0x00;
	}
}


/*
函数:DispChar()
功能:在数码管上显示字符
参数:
	x:数码管的坐标位置(0~7)
	c:要显示的字符(仅限十进制数字和减号)
*/
void DispChar(unsigned char x, unsigned char c)
{
	//0123456789的数码管字型数据
	code unsigned char Tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
	x &= 0x07;
	x = 7 - x;
	if ( c == '-' )
	{
		DispBuf[x] = 0x40;
	}
	else if ( ( c >= '0' ) && ( c <= '9' ) )
	{
		DispBuf[x] = Tab[c-'0'];
	}
}


/*
函数: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(x,c);
		x++;
	}
}


/*
函数:DispDotOn()
功能:显示指定位的小数点
参数:x为数码管坐标
*/
void DispDotOn(unsigned char x)
{
	DispBuf[7-x] |= 0x80;
}


/*
函数:DispInit()
功能:数码管扫描显示初始化
*/
void DispInit()
{
	DispClear();
	EA = 0;
	TMOD &= 0x0F;
	TMOD |= 0x10;
	TH1 = 0xFC;
	TL1 = 0x66;
	TR1 = 1;
	ET1 = 1;
	EA = 1;
}

/*
函数:DispP()
功能:数码管显示字母“P”
*/
void DispP()
{  DispClear();
   DispBuf[0] =0x73;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -