📄 8255_pa.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 + -