用51单片机、8255、138、373等实现数码管显示按键数值的程序(共21页).doc

上传人:飞****2 文档编号:27097063 上传时间:2022-07-22 格式:DOC 页数:21 大小:1.14MB
返回 下载 相关 举报
用51单片机、8255、138、373等实现数码管显示按键数值的程序(共21页).doc_第1页
第1页 / 共21页
用51单片机、8255、138、373等实现数码管显示按键数值的程序(共21页).doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《用51单片机、8255、138、373等实现数码管显示按键数值的程序(共21页).doc》由会员分享,可在线阅读,更多相关《用51单片机、8255、138、373等实现数码管显示按键数值的程序(共21页).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上姓名专业学号 2013年10月28日随着单片机技术的飞速发展,在其推动下,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高。单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机了解计算机原理与结构的最佳选择。现在,这种单片机的使用领域已十分广泛。彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子

2、,单片机早已深深地融入我们每个人的生活之中。单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。课题要求:用51单片机、8255、138、373等实现数码管显示按键数值的程序各芯片资料:1. 8255芯片资料如下 用8255A可编程器件扩展并行接口8255: 有三个八位的并行口:PA、PB、PC。有三种工作方式:方式0,方式1,方式2。逻辑结构图:包含四个部分: 三个并行数据输入输出端口 两个工作方式控制电路 一个读写逻辑控制电

3、路 八位总线缓冲器 三个并行数据输入输出端口:A口;B口;C口一般,A口,B口作为数据输入输出端口,C口作为控制/状态信息口,可以分为两个部分,分别与A口和B口配合使用,作为控制信息输出或状态信息输入。 工作方式控制电路工作方式控制电路有两个:A组控制和B组控制电路,A组控制用来控制A口和C口的上半部分PC7PC4;B组控制用来控制B口和C口的下半部分PC3PC0;两组控制电路具有一个控制命令寄存器,用来接收来自CPU的数据(控制字),以决定芯片的工作方式,或对C口按位进行清“0”或者置“1”。 总线缓冲器 三态双向八位缓冲器,作为微处理器数据总线与8255之间的接口,用来传送命令、数据及状态

4、信息。 读写逻辑控制电路读写逻辑控制电路接受CPU来的控制信号:读、写、地址及复位信息,根据控制信号的要求,将数据读出,送往CPU,或者将CPU来的信息写入端口。引脚说明:片选信号,低电平有效,表示芯片被选中;:读操作,低电平有效,控制数据读出;:写操作,低电平有效,控制数据写入;A1,A0:地址线, 端口选择信号,用来选择8255内部端口:A1 A0 操 作0 0 0 1 0 读A口到数据总线 0 1 0 1 0 读B口到数据总线 1 0 0 1 0 读C口到数据总线 0 0 1 0 0 写数据总线 A口 0 1 1 0 0 写数据总线 B口 1 0 1 0 0 写数据总线 C口 1 1 1

5、 0 0 写数据总线 控制口 1 数据总线为高阻态 1 1 0 1 0 非法操作 1 1 1 1 0 无效RESET:复位信号,高电平有效,各端口被置成输入;D7D0:双向三态数据线;PA7PA0:A口输入输出线;PB7PB0:B口输入输出线;PC7PC0:C口输入输出线;3工作方式选择工作方式控制字8255有三种工作方式:方式0,方式1,方式2。其中方式2只对A口。8255的工作方式是由工作方式控制字决定,工作方式控制字是由CPU写入。8255方式控制字定义如下:D7 D6 D5 D4 D3 D2 D1 D0 B组: 端口C(下半部) 1:输入,0:输出 端口B 1:输入,0:输出 方式选择

6、0:方式0,1方式1 A组 C口上半部 1:输入,0:输出 端口A 1:输入,0:输出 方式选择 00: 方式0, 01: 方式1 1:方式2D7=1:命令控制字有效。当D7=0,通过控制口对C口进行位操作。C口具有位操作功能,通过工作方式控制字可以将PC7PC0 中任意一位置1或清0D7 D6 D5 D4 D3 D2 D1 D0D7=0 对C口操作,D6 D5 D4 无效,D3 D2 D1:位选择0 0 0 PC00 0 1 PC10 1 0 PC20 1 1 PC31 0 0 PC41 0 1 PC51 1 0 PC61 1 1 PC7D0=0:清0 ;0=1:置1 工作方式0:基本输入输

7、出方式三个端口都可以设置成输入或输出方式:具有两个八位端口:A口和B口具有两个四位端口:PC0PC3,PC4PC7任一端口都可设置为输入或输出数据输出带锁存,输入时不锁存此时,8255可以工作在无条件传送;也可以查询式传送,C口作为联络信号 工作方式1:选通式输入/输出方式有固定的选通信号,选通信号与数据一齐传送,由选通信号表示数据传送的状态:三个端口分为两组:A组和B组每组包括一个八位数据端口和一个四位的控制状态端口每个八位数据端口均可设置为输入或输出,输入输出均带锁存四位端口作为八位端口的控制/状态联络信号2. 51芯片资料 Vcc40电源端GND20接地端工作电压为5V,另有AT89LV

8、51工作电压则是2.7-6V, 引脚功能一样。 2.外接晶体引脚 图22外接晶体引脚XTAL119XTAL218XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。大家在购买和选用时要注意了。如AT89C51 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。 3.

9、复位RST9在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。常用的复位电路如图23所示。复位操作不会对内部RAM有所影响。图23常用复位电路4.输入输出引脚(1) P0端口P0.0-P0.7 P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指

10、令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。(2) P1端口P1.0P1.7 P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收低8位地址信息。(3) P2端口P2.0P2.7 P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器

11、时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。(4) P3端口P3.0P3.7 P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,具体请看 表22.。P13端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。P3引脚兼用功能P3.0串行通讯输入(RXD)P3.1串行通讯输出(TXD)P3.2外部中断0( INT0)P3.3外部中断1(INT1)P3.4定时器0输入(T0)P3

12、.5定时器1输入(T1)P3.6外部数据存储器写选通WRP3.7外部数据存储器写选通RD表22P3端口引脚兼用功能表呼!一口气说了那么多,停一下吧。嗯,什么?什么叫上拉电阻?上拉电阻简单来说就是把电平拉高,通常用4.710K的电阻接到Vcc电源,下拉电阻则是把电平拉低,电阻接到GND地线上。具体说明也不是这里要讨论的,接下来还是接着看其它的引脚功能吧。5.其它的控制或复用引脚(1) ALE/PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。在访问外部数据存储器时,出现一个

13、ALE脉冲。对Flash存储器编程时,这个引脚用于输入编程脉冲PROG(2) PSEN 29 该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。(3) EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。对Flash存储器编程时,用于施加Vpp编程电压。Vpp电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。具体如表23所列。Vpp = 1

14、2V Vpp = 5V 印刷在芯片面上的型号 AT89C51 xxxx YYWW AT89LV51 xxxx YYWW AT89C51 xxxx-5 YYWW AT89LV51 xxxx-5 YYWW 片内特征字 030H=1EH 030H=1EH 030H=1EH 030H=1EH 031H=51H 031H=61H 031H=51H 031H=61H 032H=FFH 032H=FFH 032H=05H 032H=05H 表23Vpp与芯片型号和片内特征字的关系看到这您对AT89C51引脚的功能应该有了一定的了解了,引脚在编程和校验时的时序我们在这里就不做详细的探讨,通常情况下我们也没有必

15、要去撑握它,除非你想自己开发编程器。下来的课程我们要开始以一些简单的实例来讲述C程序的语法和编写方法技巧,中间穿插相关的硬件知识如串口,中断的用法等等。成HEX文件和最小化系统 在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开第一课做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。

16、然后右击图31中的1项目文件夹,弹出项目功能菜单,选Options for TargetTarget1,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。打开项目选项窗口,转到Output选项页图32所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。选好了?好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图33。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看

17、它的说明书了,这里也不做讨论。3. 74HC138芯片资料如下:74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0, A1和A3),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,

18、而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状注:电路整体揽图注:PC口 和 PB口的定义注:引脚定义JL(14) 和 JH(14);程序部分:/*- 名称:8255 相关程序 编写:刘国庆 日期:2013.10.28 内容:用矩阵键盘在数码管上显示-*/#include#include#include#define PA XBYTE0x4000#define PB XBYTE0x4001#define PC XBYTE0x4002#define PD XBYTE0x4003#define uchar u

19、nsigned charuchar temp;/*- uS延时函数,含有输入参数 uchar t,无返回值 uchar 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(uchar t) while(-t);/*- mS延时函数,含有输入参数 uchar t,无返回值 uchar 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,稍有误差-*/void DelayMs(uchar t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245);

20、 /键盘扫描函数,经测试不得直接返回码值给PB口必须在该函数内进行赋值,否则无法锁定uchar KeyScan(void) PC=0XEF; /选中第一列if(PC!=0xEF) DelayMs(10); /延时去掉抖动 temp=PC ; if(temp!=0xEF) /对第一列按键逐行扫描 switch(temp) case 0xee:return PB =0x8e;break; case 0xed:return PB =0x83;break; case 0xeb:return PB =0xf8;break; case 0xe7:return PB =0xb0;break; default

21、:return 0xff; while(PC!=temp); /等按键弹起 PC=0xDF;/选中第二列 if(PC!=0xDF) DelayMs(10); /延时去掉抖动 temp=PC; if(temp!=0xDF)/对第二列按键逐行扫描 switch(temp) case 0xde:return PB =0x86;break; case 0xdd:return PB =0x88;break; case 0xdb:return PB =0x82;break; case 0xd7:return PB =0xa4;break; default:return 0xff; while(PC!=te

22、mp); /等按键弹起 PC=0xBF; /选中第三列if(PC!=0xBF) DelayMs(10); /延时去掉抖动 temp=PC;if(temp!=0xBF)/对第三列按键逐行扫描 switch(temp)case 0xbe:return PB =0xa1;break;case 0xbd:return PB =0x90;break;case 0xbb:return PB =0x92;break;case 0xb7:return PB =0xf9;break;default:return PB =0xff;while(PC!=temp);/等按键弹起 PC=0x7F; /选中第四列if(

23、PC!=0x7F) DelayMs(10); /延时去掉抖动 temp=PC; if(temp!=0x7F) switch(temp) /对第四列按键逐行扫描 case 0x7e:return PB =0xc6;break;case 0x7d:return PB =0x80;break;case 0x7b:return PB =0x99;break;case 0x77:return PB =0xc0;break;default:return PB =0xff; while(PC!=temp); /等按键弹起 void main() PD=0x81;/向8255A输入控制字 PB=0xff; /

24、数码管初始数据PA=0x00; / 选中所有的数码管void main() PD=0x81;/向8255A输入控制字 PB=0xff; /数码管初始数据 PA=0x00; / 选中所有的数码管 while(1) KeyScan(); /将返回的按键值赋给PB口 心得体会:在本次实验过程中,我使用反转扫描法对键盘进行扫描实验了多次都未成功,后来发现8255端口的限制不能进行反转扫描,这是我在以后的学习过程更加注重细节。还有就是程序不要只是看别人得,一定要自己写过才是自己的。开始不懂可以参考别人的,看看每一句代表着什么意思,能够实现什么现象。明白之后自己再重新写一遍,你会发现看别人的能懂到自己写的

25、时候很困难。当你自己能写出来的时候说明你真懂了。程序不要只是看别人得,一定要自己写过才是自己的。开始不懂可以参考别人的,看看每一句代表着什么意思,能够实现什么现象。明白之后自己再重新写一遍,你会发现看别人的能懂到自己写的时候很困难。当你自己能写出来的时候说明你真懂了。在单片机的学习开始时感觉很吃力,在不断的学习过程中慢慢的对单片机产生了些好感,而且在编写程序过程中吃力的感觉慢慢的淡了。在这其中基础知识掌握牢固是非常重要的,然后在学习过程中要学会提问题和自己解决问题,慢慢的对于学习单片机你也会产兴趣。虽然在开始学习单片机时感觉很青涩,但只要坚定自己的学习信心,在付出持之以恒的努力,我相信自己能进一步加深对单片机的了解,在单片机的学习道路上走得更远!专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁