单片机IO口扩展设计

更新时间:2023-05-22 06:43:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机IO口扩展设计

单片机I/O口扩展实验

摘要:本设计随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中流水灯的应用就是一个典型的例子,特别在商业广告领域有重要的应用,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

关键词:单片机,控制,8X8 LED点阵,流水灯,AT89C52,动态显示

1.引言

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

本设计所介绍的是单片机的一些简单的应用,最小系统的复位,INT0和INT1的一些应用来控制输出,达到控制彩灯(流水灯)。近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。本系统采用单片机AT89C52为中心器件,用8*8位LED显示元件XY1588ASR(24脚共阳管)来设计控制彩灯(流水灯),系统实用性强、操作简单、扩展性强。也可以为我们更好地了解单片机的应用加深我们对单片机的认识,对我们以后的学习都带来很大的帮助。

2.总体设计方案

2.1设计内容与设计思路及关键技术

单片机采用用AT89C52芯片,控制彩灯(流水灯)。8X8LED点阵流水灯设计将在8X8LED点阵显示上移流水灯显示,然后循环显示。

P1口涉及下载线,而P3口的P3.2和P3.3作用于外部中断,所以就用P0和P2口来控制滚动显示文字,通过P0口接8*8位LED阳极,P2口接8*8位LED负极来不断扫描显示。

单片机IO口扩展设计

2.2 设计方框图

流水灯设计总体设计方框图如图1所示,控制器采用单片机AT89C52,用8*8位LED显示元件XY1588ASR(24脚共阳管)。

图1 广告牌设计总体设计方框图

主控制器采用低功耗,高性能COMS 8位单片机AT89C52芯片;单片机复位则由最小系统决定,由电源复位产生;时钟振荡则由12MHz的晶振产生;LED显示则由用8*8位LED显示元件XY1588ASR(24脚共阳管)来设计。

2.3.8X8点阵LED工作原理说明

8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列(Y)置1电平,某一行(X)置0电平,则相应的二极管就亮。

单片机IO口扩展设计

图2.8X8点阵LED结构图

从图2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:

一根竖柱:对应的列置1,而行则采用扫描的方法来实现。

一根横柱:对应的行置0,而列则采用扫描的方法来实现。

2.5.流水灯设计的总电路图

流水灯设计的总电路图在最小系统的基础上加上了由9014三极管驱动的蜂鸣器、外部中断的两个开关(实现外部中断控制)、P0和P2口的跳线(实现外扩展)、还有用三极管驱动的8*8位LED显示元件XY1588ASR(24脚共阳管)。

单片机IO口扩展设计

图4. 总电路图

2.7.仿真运行效果图

最终调试仿真运行结果如下图:

图6.效果图

3.单片机I/O口扩展程序的主程序

#include <atmel\regx52.h>

#define int8 unsigned char

#define int16 unsigned int

#define int32 unsigned long

int8 code num_tab[][8]={

/*--8*8--阴码--逐行扫描--逆向(低位在前)--*/

{0x00,0x00,0x00,0x38,0x44,0x38,0x00,0x00},/*"0",0*/

{0x00,0x00,0x40,0x78,0x48,0x00,0x00,0x00},/*"1",1*/

{0x00,0x00,0x00,0x4C,0x54,0x6C,0x00,0x00},/*"2",2*/

{0x00,0x00,0x00,0x74,0x4C,0x6C,0x00,0x00},/*"3",3*/

{0x00,0x00,0x00,0x7C,0x28,0x10,0x00,0x00},/*"4",4*/

{0x00,0x00,0x00,0x74,0x54,0x7C,0x00,0x00},/*"5",5*/

{0x00,0x00,0x70,0x54,0x54,0x38,0x00,0x00},/*"6",6*/

{0x00,0x00,0x04,0x7C,0x04,0x00,0x00,0x00},/*"7",7*/

{0x00,0x00,0x00,0x6C,0x54,0x6C,0x00,0x00},/*"8",8*/

{0x00,0x00,0x00,0x3C,0x54,0x1C,0x00,0x00},/*"9",9*/

{0x00,0x00,0x00,0x38,0x44,0x38,0x00,0x00},/*"0",10*/

{0x00,0x00,0x40,0x78,0x58,0x68,0x00,0x00},/*"a",11*/

单片机IO口扩展设计

{0x00,0x00,0x78,0x48,0x7C,0x00,0x00,0x00},/*"b",12*/

{0x00,0x00,0x00,0x48,0x48,0x70,0x00,0x00},/*"c",13*/

{0x00,0x00,0x00,0x7C,0x48,0x78,0x00,0x00},/*"d",14*/

{0x00,0x00,0x58,0x58,0x70,0x00,0x00,0x00},/*"e",15*/

{0x00,0x00,0x00,0x4C,0x7C,0x48,0x00,0x00},/*"f",16*/

{0x00,0x08,0xD8,0xD8,0xF8,0x00,0x00,0x00},/*"g",17*/

{0x00,0x00,0x78,0x08,0x7C,0x00,0x00,0x00},/*"h",18*/

{0x00,0x00,0x40,0x7C,0x48,0x00,0x00,0x00},/*"i",19*/

{0x00,0x00,0x00,0xFC,0x88,0x00,0x00,0x00},/*"j",20*/

{0x00,0x00,0x48,0x78,0x7C,0x00,0x00,0x00},/*"k",21*/

{0x00,0x00,0x40,0x7C,0x44,0x00,0x00,0x00},/*"l",22*/

{0x00,0x00,0x00,0x78,0x78,0x78,0x00,0x00},/*"m",23*/

{0x00,0x00,0x78,0x08,0x78,0x00,0x00,0x00},/*"n",24*/

{0x00,0x00,0x30,0x48,0x48,0x30,0x00,0x00},/*"o",25*/

{0x00,0x00,0x78,0xC8,0xF8,0x00,0x00,0x00},/*"p",26*/

{0x00,0x00,0x00,0xF8,0xC8,0x78,0x00,0x00},/*"q",27*/

{0x00,0x00,0x08,0x48,0x78,0x48,0x00,0x00},/*"r",28*/

{0x00,0x00,0x68,0x68,0x58,0x00,0x00,0x00},/*"s",29*/

{0x00,0x00,0x00,0x40,0x7C,0x08,0x00,0x00},/*"t",30*/

{0x00,0x00,0x78,0x40,0x78,0x00,0x00,0x00},/*"u",31*/

{0x00,0x08,0x38,0x40,0x38,0x08,0x00,0x00},/*"v",32*/

{0x00,0x08,0x78,0x18,0x68,0x18,0x00,0x00},/*"w",33*/

{0x00,0x00,0x48,0x78,0x78,0x48,0x00,0x00},/*"x",34*/

{0x00,0x00,0x08,0x38,0xD8,0x88,0x00,0x00},/*"y",35*/

{0x00,0x00,0x48,0x78,0x68,0x00,0x00,0x00}/*"z",36*/

};

void delay(void);

int8 n;

int8 delta_p;

int8 *p;

void main(void){

int8 i;

int8 j;

p=&num_tab[0][0];

TMOD=0x01;

TH0=0xfc;

TL0=0x18;

ET0=1;

EA=1;

TR0=1;

while(1)

{

for(i=0;i<8;i++){

delay();

单片机IO口扩展设计

P0=*(p+delta_p);

P2=i|0x18;

p++;

if(p>&num_tab[0][7])

p=&num_tab[0][0];

}

}

}

void delay(void){

int16 i;

for(i=0;i<500;i++);

}

void timer0() interrupt 1 using 3

{

TF0=0;

TH0=0xfc;

TL0=0x18;

if(n<200)

{

n++;

}

else

{

n=0;

if(delta_p>240)

delta_p=0;

else

delta_p+=2;

}

}

4.系统硬件电路

4.1.芯片由AT89C52的主要特性

与MCS-51 兼容

寿命:>1000写/擦循环ISP FLASH ROM

32可编程I/O线

3个16位定时器/计数器

2个外部中断源

可编程串行通道

低功耗的闲置和掉电模式

片内振荡器和时钟电路

4.2.管脚说明

VCC:供电电压。

单片机IO口扩展设计

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚 备选功能

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1)

P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)

P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

单片机IO口扩展设计

5.总结与体会

本系统是以单片机AT89C52芯片为核心部件,完成8X8LED点阵流水灯设计在8X8LED点阵显示上移流水灯功能。我上网找资料,上图书馆,尽可能的了解有关于单片机的基本原理,8X8LED点阵显示技术和动态显示等这方面的知识。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能有了更进一步的提高。 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,也从中学会了很多。经过将近二周的单片机课程设计,终于完成了我的单片机I/O口扩展的设计,基本上达到实验的目的。希望这次的经验可以对以后的学习带来更好的帮助。

6.参考文献

[1]李朝青.单片机原理及接口技术(第3版).北京航天航空大学出版社,2005年10月.

[2]求是科技.单片机典型外围器件及应用实例.北京:人民邮电出版社,2006年2月

[3]辛友顺.单片机应用系统设计与实现.2005年3月

[4]戴胜华.单片机原理与应用. 2005年4月

本文来源:https://www.bwwdw.com/article/e8j4.html

Top