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

📄 display.c

📁 51系列单片机实验课程:串口 (通过计算机与试验箱相连
💻 C
字号:
/*****************************************************
激情创造,精彩无限-------欢迎进入单片机的世界
*****************************************************/
/*****************************************************
程序说明:本程序是总线上扩展I/O口,完成动态扫描显示程序
硬件连接:总线连接方式,四联共阳数码管段码端573地址为
		 0xd000,位选端573地址为0xc000。
程序版本:
作者:ZJ
编写时间:2007年12月5日
修改记录:
备注:
*****************************************************/

/*包含头文件*/
#include <reg52.h>
#include <absacc.h>

/*定义数码管段码和位选码*/
code unsigned char LedCode[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
code unsigned char Posit[] = {0x08,0x04,0x02,0x01};

unsigned char DisBuf[4];			//定义显存空间
unsigned char sts,loopnum = 4;

/**********************************************
函数名称:Delay()
函数功能:实现一短暂的延时,时间长短由入口参数决定
入口参数:unsigned int
出口参数:void
备注:
**********************************************/
void Delay (unsigned int Dat)
{
	unsigned int i;
	for(i=0;i<Dat;i++);
}

/**********************************************
函数名称:Disbufchange()
函数功能:实现移位显存的功能,将入口参数送入显存最后一位,其余的显存内容依次左移一位
入口参数:unsigned char
出口参数:void
备注:
**********************************************/
void Disbufchange (unsigned char Da)
{
	DisBuf[0] = DisBuf[1];
	DisBuf[1] = DisBuf[2];
	DisBuf[2] = DisBuf[3];
	DisBuf[3] = Da;
}

/*********************************************
函数名称:Display()
函数功能:显示显存中的四个数据
入口参数:void
出口参数:void
备注:
*********************************************/
void Display (void)
{
	unsigned char n;
	for (n=0;n<4;n++)							//显示4个数据
	{
		XBYTE[0xd000] = LedCode[DisBuf[n]];		//将显存中的数据送入数码管段码端
		XBYTE[0xc000] = Posit[n];				//将对应该显存的数码管点亮
		Delay(200);								//显示延时
		XBYTE[0xc000] = 0x00;					//消隐
	}
}

/*********************************************
函数名称:main()
函数功能:
入口参数:void
出口参数:void
备注:
*********************************************/
void main (void)
{
	unsigned char i;
	TMOD = (TMOD & 0x0f) | 0x10;	//设置定时/计数器T1工作于方式1
	TL1 = (-50000);					//设定定时/计数器初值
	TH1 = (-50000) >> 8;			//定时50ms
	TR1 = 1;						//启动定时器
	ET1 = 1;						//开启定时器T1中断
	EA = 1;							//开启总的中断
	for (i=1;i<5;i++)				//预置数1234入显存
	{
		Disbufchange(i);
	}
	while(1)
	{
		Display();					//循环显示
	}
}

/*********************************************
函数名称:定时/计数器T1中断服务程序
函数功能:实现每一秒移位一次
入口参数:void
出口参数:void
备注:
*********************************************/
void T1_int (void) interrupt 3
{
	TL1 = (-50000);					//重新赋初值
	TH1 = (-50000) >> 8;
	if (++sts >= 20)				//判断一秒时间是否到达
	{
		if (++loopnum >= 10)		//判断移位数据是否超过10
			loopnum = 0;
		Disbufchange(loopnum);		//移位显存空间里的内容
		sts = 0;
	}
}

⌨️ 快捷键说明

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