18155的8LED串口通信Word文档格式.docx
- 文档编号:7741297
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:33
- 大小:304.02KB
18155的8LED串口通信Word文档格式.docx
《18155的8LED串口通信Word文档格式.docx》由会员分享,可在线阅读,更多相关《18155的8LED串口通信Word文档格式.docx(33页珍藏版)》请在冰点文库上搜索。
图2-2
第三步:
将新创建的.c文件添加到Target1中,如图2-3。
图2-3
这样我们就可以在keil4的环境下对单片机的程序进行编译和运行了。
2.51单片机AT89C51
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
需要注意的是52系列的单片机一般不具备自编程能力。
当前常用的51系列单片机主要产品有:
*Intel的:
80C31、80C51、87C51,80C32、80C52、87C52等;
*ATMEL的:
89C51、89C52、89C2051等;
89C51单片机的内部结构为:
单一+5V电源供电;
CPU:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:
用以存放程序、一些原始数据和表格;
I/O口:
四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:
两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一对全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M。
3.RS-232电平转换芯片MAX232
第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;
DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
完成连接之后的电路图如图2-4所示。
图2-4
11和12口分别连接51单片机的RxD(P3.0)、TxD(P3.1)。
4.三态输出的8D透明锁存器74HC373
74HC373的输出端Q0~Q7可直接与总线相连。
当三态允许控制端OE为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,Q随数据D而变。
当LE为低电平时,Q被锁存在已建立的数据电平。
5.二线制I2CCMOS串行EEPROM24C08
6.8155引脚以及功能。
8155是一个有40引脚的塑封芯片,功能较强,广泛的应用在计算机电路中。
它有两个8位口A、B和一个6位口C,总共可以扩展出22条接线。
它含一个可预置的计数器,计数范围从2到16383,可用于延时、计数或分频。
它内部还有256字节的RAM,可以补充CPU内存的不足。
为了能够设置芯片的工作方式和了解芯片的状态,内部还有命令寄存器和状态寄存器。
8155各引脚功能说明如下:
RST:
复位信号输入端,高电平有效。
复位后,3个I/O口均为输入方式。
AD0~AD7:
三态的地址/数据总线。
与单片机的低8位地址/数据总线(P0口)相连。
单片机与8155之间的地址、数据、命令与状态信息都是通过这个总线口传送的。
:
读选通信号,控制对8155的读操作,低电平有效。
写选通信号,控制对8155的写操作,低电平有效。
片选信号线,低电平有效。
IO/:
8155的RAM存储器或I/O口选择线。
当IO/=0时,则选择8155的片内RAM,AD0~AD7上地址为8155中RAM单元的地址(00H~FFH);
当IO/=1时,选择8155的I/O口,AD0~AD7上的地址为8155I/O口的地址。
ALE:
地址锁存信号。
8155内部设有地址锁存器,在ALE的下降沿将单片机P0口输出的低8位地址信息及,IO/的状态都锁存到8155内部锁存器。
因此,P0口输出的低8位地址信号不需外接锁存器。
PA0~PA7:
8位通用I/O口,其输入、输出的流向可由程序控制。
PB0~PB7:
8位通用I/O口,功能同A口。
PC0~PC5:
有两个作用,既可作为通用的I/O口,也可作为PA口和PB口的控制信号线,这些可通过程序控制。
TIMERIN:
定时/计数器脉冲输入端。
TIMEROUT:
定时/计数器输出端。
VCC:
+5V电源。
2、8155的地址编码及工作方式
在单片机应用系统中,8155是按外部数据存储器统一编址的,为16位地址,其高8位由片选线提供,=0,选中该片。
当=0,IO/=0时,选中8155片内RAM,这时8155只能作片外RAM使用,其RAM的低8位编址为00H~FFH;
当=0,IO/=1时,选中8155的I/O口,其端口地址的低8位由AD7~AD0确定,如表6-6所示。
这时,A、B、C口的口地址低8位分别为01H、02H、03H(设地址无关位为0)。
表6-68155芯片的I/O口地址
AD7~AD0
选择I/O口
A7
A6
A5
A4
A3
A2
A1
A0
×
1
命令/状态寄存器
A口
B口
C口
定时器低8位
定时器高6位及方式
8155的A口、B口可工作于基本I/O方式或选通I/O方式。
C口可工作于基本I/O方式,也可作为A口、B口在选通工作方式时的状态控制信号线。
当C口作为状态控制信号时,其每位线的作用如下:
PC0:
AINTR(A口中断请求线)
PC1:
ABF(A口缓冲器满信号)
PC2:
(A口选通信号)
PC3:
BINTR(B口中断请求线)
PC4:
BBF(B口缓冲器满信号)
PC5:
(B口选通信号)
8155的I/O工作方式选择是通过对8155内部命令寄存器设定控制字实现的。
命令寄存器只能写入,不能读出,命令寄存器的格式如图6-16所示。
在ALT1~ALT4的不同方式下,A口、B口及C口的各位工作方式如下:
ALT1:
A口,B口为基本输入/输出,C口为输入方式。
ALT2:
A口,B口为基本输入/输出,C口为输出方式。
ALT3:
A口为选通输入/输出,B口为基本输入/输出。
PC0为AINTR,PC1为ABF,PC2为,PC3~PC5为输出。
ALT4:
A口、B口为选通输入/输出。
PC0为AINTR,PC1为ABF,PC2为,PC3为BINTR,PC4为BBF,PC5为。
7.LED液晶显示器件7seg-mpx8-ca
7SEG-MPX8-CA八个共阳二极管显示器12345678是阳公共端
图三LED液晶显示器件7seg-mpx8-ca
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
(1)静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都有个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5*8=40跟I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时需要增加译码驱动进行驱动,增加了硬件电路的复杂性。
(2)动态显示驱动:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的八个显示比划“a,b,c,d,e,f,g,h”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立I/O线控制,当单片机输出字形码时,所有数码管都接受到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通恐慌只打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动,在轮流显示过程中,每位数码管的点亮时间为1—2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就使一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
第三部分实验原理图及程序代码
1.硬件部分电路设计
电路图如图:
2.软件部分设计
这部分的程序如下:
#include<
reg51.h>
stdio.h>
absacc.h>
string.h>
#defineucharunsignedchar
#defineuintunsignedint
#definepaXBYTE[0x0001]//定义8155口地址
#definepbXBYTE[0x0002]
#definecontrol8155XBYTE[0x0000]
sbitSCK=P1^0;
sbitSDA=P1^1;
sbitE=P3^7;
sbitSEND=P3^1;
sbitREV=P3^0;
sbitK1=P3^2;
sbitK2=P3^3;
sbitK3=P2^3;
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0123456789存码表
ucharpos[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//位选,选中数码管
dataunsignedcharstr1[16]={"
Starting...."
};
dataunsignedcharstr2[16]={"
Recieved:
"
dataunsignedcharsend[16]={"
testnumber"
uchartemp;
inti;
voiddelay(unsignedintt)
{
unsignedinti,j;
for(i=0;
i<
t;
i++)
for(j=0;
j<
10;
j++)
;
}
voiddelayXus(ucharx)//微秒延时
while(--x);
voiddelayXms(ucharx)//毫秒延时
uchari;
while(x--)
{
for(i=250;
i>
0;
i--)
}
}
voidstart()
SDA=1;
delay(3);
SCK=1;
SDA=0;
SCK=0;
voidstop()
voidU4_init()
voidresponds()
i=0;
while(SDA==1&
&
250)
i++;
voidwrite_dat(uchardat)//写一个字节
uchari,temp;
temp=dat;
8;
temp=temp<
<
1;
SDA=CY;
delay(50);
voidwrite(ucharadd,uchardat)//写一个字节dat到地址add
start();
write_dat(0xa0);
responds();
write_dat(add);
write_dat(dat);
stop();
ucharread_dat()//读一个字节
uchara,r,temp;
//接收前记得释放数据线,即拉高sda。
for(a=0;
a<
a++)//循环八次以此接收一字节数据
SCK=1;
//sck置高,使接收数据稳定。
delay(3);
r=r<
//接收数据处理,存入i2c_r变量中。
temp=SDA;
r=r|temp;
SCK=0;
//sck置低,准备接受下个数据位。
returnr;
ucharread(ucharadd)//从地址add中读取一个字节
uchardat;
write_dat(0xa1);
dat=read_dat();
delayXus
(2);
returndat;
voidwritedata()
{uchari;
ucharstr[8]={0xf9,0xa4,0xb0,0xc0,0xf9,0xa4,0xb0,0xc0};
for(i=0;
write(i,str[i]);
}
str[0]=0xa4;
str[1]=0xb0;
str[2]=0x99;
str[3]=0xf9;
str[4]=0xa4;
str[5]=0xb0;
str[6]=0x99;
str[7]=0xf9;
for(i=8;
16;
write(i,str[i-8]);
str[0]=0x4f;
str[1]=0x5b;
str[2]=0x4f;
str[3]=0x66;
str[4]=0x66;
str[5]=0x4f;
str[6]=0x5b;
str[7]=0x06;
for(i=16;
24;
write(i,str[i-16]);
str[0]=0x99;
str[1]=0x92;
str[2]=0x82;
str[3]=0xb0;
str[4]=0x99;
str[5]=0x92;
str[6]=0x82;
str[7]=0xb0;
for(i=24;
32;
write(i,str[i-24]);
str[0]=0x92;
str[1]=0x82;
str[2]=0xf8;
str[3]=0x99;
str[4]=0x92;
str[5]=0x82;
str[6]=0xf8;
str[7]=0x99;
for(i=32;
40;
write(i,str[i-32]);
str[0]=0x82;
str[1]=0xf8;
str[2]=0x80;
str[3]=0x92;
str[4]=0x82;
str[5]=0xf8;
str[6]=0x80;
str[7]=0x92;
for(i=40;
48;
write(i,str[i-40]);
str[0]=0xf8;
str[1]=0x80;
str[2]=0x90;
str[3]=0x82;
str[4]=0xf8;
str[5]=0x80;
str[6]=0x90;
str[7]=0x82;
for(i=48;
56;
write(i,str[i-48]);
str[0]=0x80;
str[1]=0x90;
str[2]=0xc0;
str[3]=0xf8;
str[4]=0x80;
str[5]=0x90;
str[6]=0xc0;
str[7]=0xf8;
for(i=56;
64;
write(i,str[i-56]);
str[0]=0x90;
str[1]=0xc0;
str[2]=0x88;
str[3]=0x80;
str[4]=0x90;
str[5]=0xc0;
str[6]=0x88;
str[7]=0x80;
for(i=64;
72;
write(i,str[i-64]);
str[0]=0xc0;
str[1]=0x88;
str[2]=0x83;
str[3]=0x90;
str[4]=0xc0;
str[5]=0x88;
str[6]=0x83;
str[7]=0x90;
for(i=72;
80;
write(i,str[i-72]);
voidsend_char(uchartemp1)
{SBUF=temp1;
while(!
TI);
TI=0;
voidMAX232_init()
TMOD=0x20;
TH1=252;
TL1=252;
TR1=1;
PCON=0x80;
SCON=0x50;
voidmain()
inti,j,set;
charb,t;
ucharword[16],recv[8];
U4_init();
writedata();
delay(50);
set=0;
while
(1)
control8155=0x03;
pa=pos[i];
pb=0x88;
//pb=send[i];
delay(5);
while(K2)
K1)
if(!
K2)
break;
while(K1)
delay(30);
set++;
if(set>
10)
MAX232_init();
K2);
switch(set)
case1:
send[i]=read(i);
f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 18155 LED 串口 通信