IO口拓展输入口
用2片74HC244扩展2个8位输入口PORTA、PORTB分别连接两个拨码开关。选中PORTA必须P2.2=0,
选中PORTB必须P2.3=0。设计2个共阳极数码管,P3.0连接一个开关接地,
当P3.0=0,动态显示PORTA读得的数据,当P3.0=1,动态显示PORTB读得的数据。
这个是老师给的程序让我们修改后在AT89C51上运行
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
xdata uchar PORTA _at_ 0xfeff; //A端口
xdata uchar PORTB _at_ 0xfdff; //B端口
data uchar i;
sbit P3_5=P3^5;
uchar code table[ ]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,~0x88,~0x83,~0xc6,~0xa1,~0x86,~0x8e,~0xff};
uchar code sled_bit[]={0xf1,0xf2,0xf4}; //定义点亮的数码管与数组的关系*/
uchar data disp[2];
void main( )
{ data uchar a;
TMOD=0x01; // 设置定时器T0为方式1定时
TH0=(65536-500)/256; // 给T0装入初值
TL0=(65536-500)%256; // 给T0装入初值
ET0=1; // 允许T0中断
EA=1; // CPU开中断
TR0=1;
i=0;
P2=0;
while(1)
{
if(P3_5) a=PORTB;
else a=PORTA;
disp[0]=a/16;
disp[1]=a%16;
}
}
void T0_int(void) interrupt 1 //T0中断函数
{ data uchar k;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
P3=0xfc;
k = disp;
P1 = table[k]; //显示数字
P3 = sled_bit;
i++;
if(i>=2)i=0;
}
我不是很理解 比如P3.5是控制什么 还有P3=0xfc
PORTA寄存器里是已经有数据 直接读出来输入单片机总线 通过数码管显示出来? 显示出来具体是什么也知道啊
能给我部分程序 和思路吗
在这个程序里,P3.5相当于你所要求的P3.0的作用,至于p3=0xfc,应该是程序原来有其他用,既然是让你用来修改的,与要求不相关的就都可以改掉
拓展的 porta 是数据寄存器从拓展口读入 可以直接把porta的值赋给一变量 再把变量传递给数码管显示吗
你需要先整理一个符合你要求的流程出来,把流程拆分成若干对立功能的小部分,然后再参考上面的程序进行修改,这个程序是给你参考的,看这个程序,有可能是三个的数码管的,所以现在没必要研究这个程序,先考虑好自己要做什么
厉害,感谢分享,谢谢