IO口拓展输入口

2019-07-15 11:10发布

用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 charxdata 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寄存器里是已经有数据   直接读出来输入单片机总线 通过数码管显示出来?  显示出来具体是什么也知道啊
能给我部分程序 和思路吗



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。