基于8255的8LED显示电子码表设计Word文档格式.docx
- 文档编号:17319987
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:18
- 大小:140.81KB
基于8255的8LED显示电子码表设计Word文档格式.docx
《基于8255的8LED显示电子码表设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于8255的8LED显示电子码表设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keilc51来开发您的单片机应用程序。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
有了proteus和keil我们就需要在这两个软件中建立我们所需要的工程进行实验,具体步骤如下:
第一步:
在Keil2中建立一个新的工程,并命名,
第二步:
选择使用的单片机芯片,我们选择80c31,
第三步:
将新创建的.c文件添加到Target中。
这样我们就可以在keil2的环境下对单片机的程序进行编译和运行了。
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等;
*Philips、华邦、Dallas、Siemens(Infineon)等公司的许多产品80C31单片机,它是8位高性能单片机。
属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,标准MCS-51单片机的体系结构和指令系统。
80C31内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
但80C31片内并无程序存储器,需外接ROM。
此外,80C31还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
80C31有PDIP(40pin)和PLCC(44pin)两种封装形式。
管脚说明:
8031芯片具有40根引脚,其引脚图如图所示:
40根引脚按其功能可分为四类:
1.电源线2根
Vcc:
编程和正常操作时的电源电压,接+5V。
Vss:
地电平。
2.晶振:
2根
XTAL1:
振荡器的反相放大器输入。
使用外部震荡器是必须接地。
XTAL2:
振荡器的反相放大器输出和内部时钟发生器的输入。
当使用外部振荡器时用于输入外部振荡信号。
3.I/O口共有p0、p1、p2、p3四个8位口,32根I/O线,其功能如下:
1)P0.0~P0.7(AD0~AD7)
是I/O端口O的引脚,端口O是一个8位漏极开路的双向I/O端口。
在存取外部存储器时,该端口分时地用作低8位的地址线和8位双向的数据端口。
(在此时内部上拉电阻有效)
2)P1.0~P1.7
端口1的引脚,是一个带内部上拉电阻的8位双向I/O通道,专供用户使用。
3)P2.0~P2.7(A8~A15)
端口2的引脚。
端口2是一个带内部上拉电阻的8位双向I/O口,在访问外部存储器时,它输出高8位地址A8~A15
4)P3.0~P3.7
端口3的引脚。
端口3是一个带内部上拉电阻的8位双向I/O端口,该口的每一位均可独立地定义第一I/O口功能或第二I/O口功能。
作为第一功能使用时,口的结构与操作与P1口完全相同,第二功能如下示:
口引脚第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2(外部中断)
P3.3(外部中断)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6(外部数据存储器写选通)
P3.7(外部数据存储器读选通)
3.SRAM芯片6264
6264的容量为8KB,是28引脚双列直插式芯片,采用CMOS工艺制造
A12~A0(addressinputs):
地址线,可寻址8KB的存储空间。
D7~D0(databus):
数据线,双向,三态。
OE(outputenable):
读出允许信号,输入,低电平有效。
WE(writeenable):
写允许信号,输入,低电平有效。
CE1(chipenable):
片选信号1,输入,在读/写方式时为低电平。
CE2(chipenable):
片选信号2,输入,在读/写方式时为高电平。
VCC:
+5V工作电压。
GND:
信号地。
4.6264的操作方式
6264的操作方式由,CE1,CE2的共同作用决定
①写入:
当和为低电平,且和CE2为高电平时,数据输入缓冲器打开,数据由数据线D7~D0写入被选中的存储单元。
②读出:
当和为低电平,且和CE2为高电平时,数据输出缓冲器选通,被选中单元的数据送到数据线D7~D0上。
③保持:
当为高电平,CE2为任意时,芯片未被选中,处于保持状态,数据线呈现高阻状态。
微处理器通过数据总线、地址总线及控制总线与存储器连接,如下图所示:
地址总线为地址信号,用来指明选中的存储单元地址。
数据总线为数据信号,它是微处理器送往存储器的信息或存储器送往微处理器的信息。
它包括指令和数据。
控制总线发出存储器读写信号,以便从ROM、RAM中读出指令或数据,或者向RAM写入数据。
在微机系统中,常用的静态RAM有6116、6264、62256等。
在本实验中使用的是6264。
6264为8K╳8位的静态RAM,其逻辑图如下:
其中A0~12为13根地址线,I/O0~7为8根数据线,CS1、CS2为两个片选端,OE为数据输出选通端,WR为写信号端。
其工作方式见下表:
控制信号
CS1
CS2
OE
WR
数据线
读
L
H
输出
写
╳
输入
非选
高阻态
5.可编程并行I/O接口芯片8255A
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:
与CPU连接部分、与外设连接部分、控制部分。
引脚功能:
RESET:
复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;
/CS=1时,8255无法与CPU做数据传输.
RD:
读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
8255具有3个相互独立的输入/输出通道端口,用+5V单电源供电,能在一下三种方式下工作。
方式0————基本输入输出方式;
方式1————选通输入/出方式;
方式三————双向选通输入/输出方式;
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
工作于三种方式中的任何一种;
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
不能工作于方式二;
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
'
不能工作于方式一或二。
A1,A0:
地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.
当A1=0,A0=0时,PA口被选择;
当A1=0,A0=1时,PB口被选择;
当A1=1,A0=0时,PC口被选择;
当A1=1.A0=1时,控制寄存器被选择.
6.74HC373锁存器
当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,O随数据D而变。
当LE为低电平时,O被锁存在已建立的数据电平。
当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。
引出端符号:
D0~D7数据输入端
OE三态允许控制端(低电平有效)
LE锁存允许端
O0~O7输出端
真值表:
Dn
LE
On
X
Q0
7.8LED液晶显示器件7SEG-MPX8-CC-BLUE
第三部分实验原理及程序代码:
1.硬件部分电路设计图
电路图如图:
2.软件部分设计
/*电子码表
用proteus仿真时注意在烧写对话框中将晶振值改为6MHZ
按键1开始、暂停
按键2秒表运行时记录数据,查看存储记录时删除存储数据
按键3秒表暂停时清除显示清零
按键4查看存储的数据,第一次按下为第一组数据,以此类推最多十组数据
*/
#include<
reg51.h>
absacc.h>
#definePAXBYTE[0x0000]
#definePBXBYTE[0x0001]
#definePCXBYTE[0x0002]
#definecontrolXBYTE[0x0003]
#defineucharunsignedchar
#defineuintunsignedint
uintcodeduanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0~9码值
//uintcodeweima[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uintcodeweima[10]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uintdisplaybuff[]={0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f};
bitflag=0;
bitflag1=0;
bitflag2=0;
bitflag3=0;
bitflag4=0;
ucharnum,second,minute;
ucharcount=0,count1=0;
ucharnum_date[10],second_date[10],minute_date[10];
ucharnumber;
ucharn0;
voidDelayUs2x(uchart);
voidDelayMs(uchart);
voiddisplay();
voidstart();
voidtrans_date();
voidkeyscan();
//主函数
main()
{
start();
PC=0xff;
while
(1)
{
keyscan();
trans_date();
display();
}
}
//初始化程序
voidstart()
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
EA=1;
TR0=0;
minute=0;
second=0;
num=0;
control=0x89;
//定时器中断程序
voidT0_time()interrupt1
num++;
if(num==100)
num=0;
second++;
if(second==60)
{
second=0;
minute++;
}
if(minute==99&
&
second==99)
minute=0;
voidtrans_date()
if(flag==0)
displaybuff[7]=duanma[minute/10];
displaybuff[6]=duanma[minute%10];
displaybuff[4]=duanma[second/10];
displaybuff[3]=duanma[second%10];
displaybuff[1]=duanma[num/10];
displaybuff[0]=duanma[num%10];
else
displaybuff[7]=duanma[minute_date[count-1]/10];
displaybuff[6]=duanma[minute_date[count-1]%10];
displaybuff[4]=duanma[second_date[count-1]/10];
displaybuff[3]=duanma[second_date[count-1]%10];
displaybuff[1]=duanma[num_date[count-1]/10];
displaybuff[0]=duanma[num_date[count-1]%10];
//显示程序
voiddisplay()
{ucharn=0;
for(n=0;
n<
8;
n++)
PB=weima[n];
PA=displaybuff[n];
DelayMs
(2);
//延时函数
voidDelayUs2x(uchart)
{
while(--t);
voidDelayMs(uchart)
while(t--)
DelayUs2x(245);
//键盘扫描程序
voidkeyscan()
ucharm;
m=PC;
m=m&
0x0f;
if(m!
=0x0f)
DelayMs(30);
m=PC;
m&
=0x0f;
if(m!
if(PC==0xfe)
flag1=1;
if(PC==0xfd)
flag2=1;
if(PC==0xfb)
flag3=1;
if(PC==0xf7)
flag4=1;
while(PC!
=0xff);
}
if(flag1==1)
TR0=~TR0;
flag=0;
flag1=0;
if(flag2==1)
if(TR0==1)
if(number<
10)
{
minute_date[number]=minute;
second_date[number]=second;
num_date[number]=num;
number++;
}
else
if(flag==1)
minute_date[count-1]=0;
second_date[count-1]=0;
num_date[count-1]=0;
flag2=0;
if(flag3==1)
if(TR0==0)
num=0;
second=0;
minute=0;
flag=0;
flag3=0;
if(flag4==1)
{
flag=1;
count++;
if(count>
number)
count=1;
flag4=0;
第四部分实验测试结果
第五部分实验小结和体会
本次课程设计的题目是基于8255的8LED显示电子码表设计。
我通过在图书馆的书籍查阅和网上资料的阅读,初步了解了单片机的基础知识以及单片机通信功能的使用,并且对本次实验时所需要的软件进行了熟悉,对一些经典的例子进行了模拟仿真,学到了许多平时课程上没有学到的知识。
在本次的课程设计中我遇到了不少难题,这源于我们对题目的主观认识,经过老师的耐心讲解,我认识到了在设计上存在的问题,并且在同学和老师的帮助下我知道该如何解决问题。
这个过程对我的学习非常有帮助,知道如何发现问题,分析解决问题。
实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契。
团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。
最后衷心感谢本次课程设计所有同学、老师的指点和帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8255 LED 显示 电子 码表 设计