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