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

📄 8255_pa.c

📁 在#MCU2的数码管上显示1
💻 C
字号:
/**************************************
函数功能:
		在#MCU2的数码管上显示1,2,3,4
		用定时器设置一个占空比不等的方波信号,
	在8255的PA口,用LED的亮灭来表示
***************************************/
#include<reg52.h>
#include<absacc.h>
/*******************************
	总线地址定义区
********************************/
#define X8255CTR XBYTE[0xE003]	//定义8255控制总线地址
#define X8255PA	 XBYTE[0xE000]	//定义8255D的PA总线地址
#define LED_DIG	 XBYTE[0xD000]	//定义数码管的段选总线地址
#define LED_SEL	 XBYTE[0xC000]	//定义数码管的位选总线地址
/*******************************
	全局变量定义区
********************************/
unsigned char code DisCode[] = {0x0C0,0xF9,0xA4,0xB0,0x99,0x92,
								0x82,0xF8,0x80,0x90,0xFF};
								//共阳极数码管码表,定位在ROM中
unsigned char Counter = 0;		//定义一全局变量
/********************************
	显示延时
*********************************/
void Delay()
{
	unsigned char i = 10;
	while(i--);
}
/********************************
	带参数传递的显示程序
*********************************/
void Display(unsigned char *Dat)
{
	LED_DIG = DisCode[*Dat];	//送段选
	LED_SEL = 0x01;				//选通第一个数码管
	Delay();
	LED_SEL = 0;				//消隐

	LED_DIG = DisCode[*(Dat+1)];
	LED_SEL = 0x02;				//选通第二个数码管
	Delay();
	LED_SEL = 0;

	LED_DIG = DisCode[*(Dat+2)];
	LED_SEL = 0x04;				//选通第三个数码管
	Delay();
	LED_SEL = 0;

	LED_DIG = DisCode[*(Dat+3)];
	LED_SEL = 0x08;				//选通第四个数码管
	Delay();
	LED_SEL = 0;
}
/********************************
	主函数
*********************************/
void main(void)
{

	unsigned char Disbuf[] = {1,2,3,4};	//存放欲显示的数据
	TMOD = 0x01;
	TH0 = 0XBC;
	TL0 = 0XF0;
	ET0 = TR0 = EA = 1;
	X8255CTR = 0x80;			//设置8255的工作方式
	while(1)
	{
		Display(Disbuf);
	}
}
/********************************
	定时器T0的中断服务子程序
*********************************/
void T0_Ser() interrupt 1
{
	TH0 = 0XBC;
	TL0 = 0XF0;
	if(Counter++==60)
	{
		X8255PA = 0x00;			//将8255的A口置低
	}
	else if(Counter == 150)
		{
			X8255PA = 0xff;		//将8255的A口置高
		}		
}

⌨️ 快捷键说明

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