单片机原理及应用 第7章单片机并行扩展技术 第8章单片机串行扩展技术课件.pptx
第7章单片机并行扩展技术;;7.1单片机的最小系统;7.1.28031最小应用系统;7.2总线扩展及编址方法;7.2.1单片机的外总线结构;;;7.2.3地址译码方法;;;;;7.3存储器的扩展;7.3.1EPROM程序存储器的扩展;;;;;;;;;;;7.4并行I/O口的扩展;7.4.1简单I/O口扩展;7.4.2LED数码管显示接口;;;;;【例7-5】下图为用单片机P2口和P1口构成的动态显示的电路,共有6个共阳极LED数码显示器,P2口为字段口,输出字形码,P2.0~P2.7分别与“a、b、c、d、e、f、g、dp”对应相连,P1口为字位口,输出位码。编写程序,使下图的动态扫描显示电路从左到右显示l、2、3、4、5、6共六个字符,设晶振频率12MHz。;#include reg51.h //51系列单片机头文件
#include intrins.h //包含_crol_函数所在的头文件
#define ucharunsignedchar //宏定义
#define uintunsignedint //宏定义
uchar codeseg[]={0x0f9,0x0a4,0x0b0,0x99,0x92,0x82};
//1~6对应的字形码
voiddelaynms(uintn)
{
uinti,j;
for(i=0;in;i++)
for(j=0;j125;j++);
}
;void main() //主函数
{
uinti;
ucharlen,bitOffset;
while(1)
{
len=0x06; //程序循环计数器,6个字符一循环
bitOffset=0x20; //位码,首先令P1.5=1,然后依次移位
for(i=0;ilen;i++)
{
P2=seg[i];
P1=bitOffset;
bitOffset=_cror_(bitOffset,1);//右环移一次
delaynms(10);
}
}
};#include reg51.h //51系列单片机头文件
#include intrins.h //包含_crol_函数所在的头文件
#define ucharunsignedchar //宏定义
#define uintunsignedint //宏定义
uchar codeseg[]={0x0f9,0x0a4,0x0b0,0x99,0x92,0x82};//1~6对应的字形码
ucharlen,bitOffset;
uinti;
void main() //主函数
{
TMOD=0x01;
TL0=0x3c; //定时2.5ms的初值
TH0=0xf6;
ET0=1;
EA=1;
TR0=1;
i=0; //字偏移
len=0x06; //程序循环计数器,6个字符一循环
bitOffset=0x20; //位码,首先令P1.5=1,然后依次移位
while(1);
};void timer0()interrupt1
{
P2=seg[i];
i++;
P1=bitOffset;
bitOffset=_cror_(bitOffset,1); //右环移一次
if(i=6)
{
i=0;
len=0x06;
bitOffset=0x20;
}
TL0=0x3c;
TH0=0xf6;
};7.4.3键盘接口;;3.独立式按键接口电路;//按键扫描??数,返回扫描键值
#include reg51.h //51系列单片机头文件
#define ucharunsignedchar //宏定义
#define uintunsignedint //宏定义
#definekeyPortP3
voiddelaynms(uintn)
{
uinti,j;
for(i=0;in;i++)
for(j=0;j125;j++);
};ucharkeyScan()
{
ucharkeyval;
if((keyPort0xf0)!=0xf0)
{
delaynms(10);
if((keyPort0xf0)!=0xf0)
{
keyval=keyPort0xf0;
while((keyPort0xf0)!=0xf0);
switch(keyval)
{
case0xe0:return1;break;
case0xd0:return2;break;
case0xb0:return3;break;
case0x70:return4;break;
default:return0;brea