基于51单片机的LED点阵显示屏系统

基于51单片机的LED点阵显示屏系统
基于51单片机的LED点阵显示屏系统

信息工程学院

综合课程设计报告书

题目: 基于51单片机的LED点阵显示屏系统

的设计与实现

专业:电子信息科学与技术

班级: 0309412

学号:

学生姓名:

指导教师:黄老师

2012 年 10 月 16 日

基于51单片机的LED点阵显示屏系统

的设计与实现

摘要:

LED是指发光二极管,在某些半导体的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN结加反向电压,少数载流子难以注入,故不发光。这种利用注入式点知发光原理制作的二极管叫发光二极管,简称LED。由于电子显示屏制作简单,安装方便,被广泛应用于各种公共场合,如公交汽车的报站器、广告屏以及公告牌等等。介绍的LED点阵电子显示屏,其功能有固定汉字、字母、数字的显示;平行左移、右移;固定信息的循环显示;显示屏的亮度连续可调;时间的显示和上位机对显示内容可修改的功能

随着LED显示屏在广告传媒领域逐渐崭露头角,其控制系统也如雨后春笋,层出不穷。由于他的控制系统均是基于嵌入式处理器开发,所以单片机在其中也占有一席之地。但是,由于LED显示屏控制较复杂,特别是对于显示特殊效果,如循环移动、覆盖霓虹灯效果,要求处理器运算速度快、执行效率高,

关键词:AT89C51 74HC154(行驱动器) 74HC595(列驱动器) 16*64点阵 LED

1、系统设计总述

从LED材料的不断更新,灰度控制技术的发展,真彩色图像的展现:到驱动电路的灵活、高效,控制系统技术的提高无不体现了LED 行业技术的飞跃发展。另外,随着计算机的网路技术的发展,LED显示屏在网路环境下的使用情况越来越多,在多媒体、多种显示设备组成的信息显示系统中,采用智能化网路控制,联网控制多屏技术也在实际中得到应用。现存显示屏的控制系统包括了输入接口电路、信号的控制、转换和数字化处理线路、输出接口电路等,涉及的具体技术很多,其中为关注并研究开发和应用关键技术包括:串行传输与并行传输、动态扫描与静

态锁存、输入接口技术、自动检测、远程控制技术等。文本以4个16*64点阵显示器为例,单片机AT89C51作为控制器,探讨简单的汉字、数字显示技术。

1.1方案分析

显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并列传输的方案是不可取的。

采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。

解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一列数据。为了达到重叠处理的目的,列数据的显示就需要具有所存功能。经过上述分析,就可以归纳出列驱动器电路应具有的功能。对于列数据准备来说,它应能实现串入并处的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。图为显示屏电路实现的结构框图。

显示屏电路框图

2、16*64点阵屏原理

点阵内部结构及外形如下,16*64点阵共由1024个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。

一般我们使用点阵显示汉字是用的16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的。也就是说得用四个8*8点阵组合成一个16*16的点阵。如下图所示,要显示“你”则相应的点就要点亮,由于我们的点阵在列线上是低电平有效,而在行线上是高电平有效,所以要显示“你”字的话,它的位代码信息要取反,即所有列(13~16脚)送(1111011101111111,0xF7,0x7F),而第一行(9脚)送1信号,然后第一行送0。再送第二行要显示的数据(13~16脚)送(1111011101111111,0xF7,0x7F),而第二行(14脚)送1信号。依此类推,只要每行数据显示时间间隔够短,利用人眼的视觉暂停作用,这样送16次数据扫描完16行后就会看到一个“你”字;第二种送数据的方法是字模信号送到行线上再扫描列线也是同样的道理。同样以“你”字来说明,16行(9、14、8、12、1、7、2、5)上送(0000000000000000,0x00,0x00)而第一列(13脚)送、“0”。同理扫描第二列。当行线上送了16次数据而列线扫描了16次后一个“你”字也就显示出来了。

2.1 系统的主要结构

图1、16*64 LED 点阵系统设计系统框图

单片机控制器

行扫描电路 行驱动 列扫描电路

列驱动

16*64点阵

3、系统硬件电路的设计

本系统采用AT89C51单片机作控制器。整个电路主要由单片机控制及其接口电路、驱动显示电路、电源电路等部分组成。为了简化显示屏电路,降低成本,本系统在单片机部分不加字库存储器,而在PC机上编辑汉字和字符显示信息,并将其转换为相应的点阵显示数据。然后通过串口(采用RS一232通信标准)送给单片机存储并进行显示处理。

3.1单片机控制电路

(1)MCU的选择:由于软件对空间的需求和硬件的简化,本系统MCU采用的是AT89C51,它具有8KB的ROM,128字节的RAM,不需再外扩存储器了。

图2、AT89C51的电路设计

图3、AT89C51引脚图

3.2、16*64点阵显示屏设计

图4是一种8x8的LED点阵单色行共阳模块的内部结构图,其单点工作电压矾为1.8 V,正向电流露为8~10 mA。当某一行线为高电平而某一列线为低时,其行列交叉的点就被点亮;而当其某一列线为高时,其行列交叉的点为暗;当某一行线为低电平时。无论列线如何。对应这一行的点全部为暗。用四个8x8点阵显示可构成16x16点阵显示器,其连接方法如图5所示。图中,将(A)和(B)的8列、(C)和(D)的8列分别对应相连,同时将(A)和(C)的8行、 (B)和(D)的8行分别对应相连。即可形成一个16行(每一行有16个LED)、16列(每一列也有16个LED)的16x16点阵显示器,可将这256个点称为一页,这样,显示字符时。只要对一页中对应的亮灭进行控制即可。把4个16x16点阵显示器相连从而构成16x64的点阵显示器如图6。

图4、行共阳8*8点阵显示屏内部原理图

图5、16*16点阵连接图

图6、16*64点阵连接图

3.3 LED点阵显示器的扫描驱动

LED显示屏驱动电路的设计应与所用控制系统相配合。驱动通常分为动态扫描型及静态锁存型驱动二大类。本文以动态扫描型驱动电路的设计为例来进行分析。动态扫描型驱动方式是指显示屏上的16行发光二极管共用一组列驱动寄存器,然后通过行驱动管的分时工作.来使每行LED的点亮时间占总时间的1/16。只要每行的刷新速率大于50 Hz,利用人眼的视觉暂留效应。人们就可以看到一幅完整的文字或画面。

AT89C51单片机有四个I/O口(P0、P1、P2、P3)。每个I/OEl有8位,如果都采用并行输出,显然不能满足要求。因此,本设计中的行扫描驱动采用并口输出。而场扫描驱动采用串口输出。

3.3.1、行驱动电路

由于16x64点阵显示器有16行,为充分利用单片机的接口。本电路中加入了一个4—16线译码器74HCl54,其输入是一个16进制码,解码输出为低态扫描信号.它们的管脚示意图如图7所示。把74HCl54的E1和E2引脚接地。然后以A、B、C、D 四脚为输入端。就会形成16种不同的输入状态,分别为0000~1111,然后使每种状态只控制一路输出。即会有16路输出。如果一行64点全部点亮。

图7、74HC154引脚图

3.3.2、列驱动电路

本系统列扫描驱动电路的设计可用串人并出的通用集成电路74HC595来作为数据锁存。74HC595是一个八位串行输入三态并行输出的移位寄存器,其管脚见图8所示,其中SI是串行数据的输入端,RCK是存储寄存器的输入时钟,SCK是移位寄存器的输入时钟。Q 7H是串入数据的输出,G是对输入数据的输出使能控制,QA~QH为串人数据的并行输出。从SI口输入的数据可在移位寄存器的SCK脚上升沿的作用下输入到74HC595中.并在RCK脚的上升沿作用下将输入的数据锁存在74HC595中,这样,当G为低电平时,数据便可并行输出。为了避免与PC机串口输入的数据相互干扰,也可使用模拟串口P1.4~P1.7来分别输出串行数据、移位时钟SCK、存储信号RCK和并行输出的使能信号G。为了消除电源电压的波动及行扫描管压降(第一行点亮的点数不同,将引起管压降的变化,从而影响通过LED管的电流1的

变化对LED显示屏亮度的影响,设计时可采用列恒流驱动电路,可选用三极管8550和外围元件构成列恒流驱动电路,并通过调整100 kQ可调电阻使三极管处于放大状态。同时将集电极电流调整为10 mA.从而使点亮对应点阵时通过LED的电流不变。

图8、74HC595引脚图

4、系统软件的设计

显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。根据软件分层次设计的原理,可以把显示屏的软件系统分为两层;第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED 显示屏的扫描显示工作。显示驱动器程序由定时器T0中断程序实现。系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。

从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适宜

采用C 语言编写。

4.1显示驱动程序

显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:

刷频率(帧频)=161

×0T 溢出率=161×)65536(120t f osc

(4-1)

其中f 位晶振频率,t 为定时器T0初值(工作在16位定时器模式)。

然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。

4.2系统主程序

本文设计的系统软件能使系统在目测条件下LED 显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。

系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;

单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容。

开始

函数声明、宏定义、

全局变量

初始化程序

显示列表函数

显示程序

主程序

延时程序

结束

程序流程图

5、调试及性能分析

5.1开发环境介绍

程序编写采用Keil 51环境下调试,Keil C51是美国Keil Software公司出品的51

系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。

Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

5.2 理论性能分析

LED显示屏硬件电路只要硬件质量可靠,引脚焊接正确,一般无需调试即可正常工作。软件部分需要调试的主要有显示屏刷新频率及显示效果两部分。显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定,表5-1给出了实验调试时采用的频率及其对应的定时器T0初值。

表5-1 显示平刷新率与T0初值关系表(24MHz晶振)

刷新率25 50 62.5 75 85 100 120

T0初值0xec78 0xf63c 0xf830 0xf97e 0xfa42 0xfb1e 0xfbee

从理论上来说,24Hz以上的刷新频率就能看到稳定的连续的显示,刷新率越高,显示越稳定,同时刷新频率越高,显示驱动程序占用的CPU时间越多。试验证明,在目测条件下刷新频率40Hz一下的画面看起来闪烁较严重,刷新频率50Hz以上的已基本察觉不出画面的闪烁,刷新频率达到85Hz以上时再增加画面闪烁没有明显的改善。

这个方案设计的16x16的点阵LED图文显示屏,电路简单,成本较低,且较容易扩展成

更大的显示屏;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰;可用静止、移入移出等多种显示方式显示图形或文字。

5.3 系统调试

软件调试:软件部分是先参考书上的例子,然后自己根据硬件电路写程序,由于以前所学是C语言,所以这个系统在编写程序过程中都采用C语言编写。刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。但是,在实际写如S51中,LED显示屏出现各种各样的乱码,通过再次认真仔细分析多次修改程序后,程序能够正常运行。

致谢

大学所学的知识在这次的设计及论文里得到了充分体现,在完成这个设计的过程中,也遇到了不少的问题,但在同学的帮助下,问题很快就得到了解决。在此过程中,我也学到了不少的新的知识,自己的动手能力得到了大大的提高,分析问题和总结问题也积累了不少的经验,在此我衷心感谢我周边的同学,他们为我提供了很多的资料和帮助。在此也感谢其他同学对我学业的支持与关心。

参考文献

[1] 靳达. 单片机应用系统开发实例导航. 北京:人民邮电出版社,2003

[2] 楼然苗,李光飞.51系列单片机设计实例.北京:北京航空航天大学出版社,2003

[3] 诸昌钤.LED显示屏系统原理及工程技术.成都:电子科技大学出版社,2000

[4] 余永权,汪明慧等. 单片机在控制系统中的应用. 北京:电子工业出版社,2004

[5] 李群芳,黄建.单片微型计算机与接口技术.北京:电子工业出版社,2001

基于单片机的LED点阵显示

设计 题目 姓名 焦作大学机电 工程学院 中图分类号: 基于单片机的LED点阵显示 专业名称: 学生姓名: 导师姓名: 职称: 学号: 焦作大学机电工程学院 2012年12 月 毕业设计

中图分类号:密级: UDC:单位代码: 基于单片机的LED点阵显示 LED-based LCD display microcontroller design 姓名学制 专业研究方向 导师职称 提交日期答辩日期 焦作大学机电工程学院

焦作大学机电工程学院毕业设计摘要 摘要 单片机自70年代问世以来得到蓬勃发展,目前单片机功能正日渐完善:单片机集成越来越多资源,内部存储资源日益丰富,用户不需要扩充资源就可以完成项目开发,不仅是开发简单,产品小巧美观,同时抗干扰能力加强,系统也更加稳定,使得它更加适合工业控制领域,具有更加广阔的市场前景;提供在线编程能力,加速了产品的开发进程,为企业产品上市赢得宝贵时间。此外单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点。单片机的设计目标主要是增强“控制”能力,满足实时控制的需要。 本文的主要内容是掌握各种单片机的结构、接口、片上外设的特点,并用STC12C5410AD单片机的片上资源设计出适当的最小系统;并利用自行制作的单片机最小系统,完成一个简单应用(量程自动转换的电压表)的设计与软件及硬件设计制作,让读者掌握数字单片机最小系统的设计及单片机系统的应用方法。 关键字:单片机仿真器 LED点阵显示屏

Abstract MCU in modern life has been widely applied in the life of the very important position. It features becoming strong, involving various electronic applications. The work process for data collection, data processing and display, receiving terminals. Including specific control, display, A / D converter, level translation interface, such as personal computers. ADC0809 used to design 8-way data sampling, the use of MCS-51 microcontroller serial port to send and receive data. Show 8155, 75452, 7407 and in part by a LED digital display. Hardware design applications for electronic design automation tools, software design is modular programming method Key W ords: Single Chip Microcomputer Emulator LED dot matrix display

基于51单片机的led点阵显示

项目名称:基于51单片机的LED点阵显示器 目录 一、项目介绍 (2) 1.1 项目背景 1.2 功能介绍 二、电路结构 (3) 三、实现模块 (5) 四、运行程序 (7) 一、项目介绍 1.1项目背景 当今世界,电子技术迅猛发展,点阵式显示器件作为现代信息显示的重要媒体,在金融证券、体育、机场、交通、商业、广告宣传、邮电电信、指挥调度、国防军事等许多领域中得到了广泛应用。因此点阵式显示器件的研制、生产也的到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。目前,点阵式显示器件具体包括LED显示模块和LCD显示模块等。现在发展的LCD比较先进,LCD的优点较为明显,他体积小,容易控制,功能强,价格适宜,能够适应显示器的发展方向,因而在通信、家电、大屏幕投影等领域得到了越来越广泛的应用;随着社会经济的迅猛发展,工业生产逐渐实现了自动化,其中,设备的工

作状态和生产过程状态的显示与监控起到了非常重要的作用,对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,他可以显示字符、数字、汉字和简单图形,可以根据需要使用不同字号、字型,显示亮度较高,并且对环境条件要求比较低。LED显示又可以分为单色显示和双色显示,可以按照需要的大小、形状和颜色进行组合,并用单片机控制实现各种文字或图形的变化,达到宣传和提示的目的。 1.2功能介绍 2本次设计的用单片机控制的显示电路使用比较简单,操作方便。它主要是通过一个8×8点阵来显示图案,通过不同的按键来选择控制图案的种类及显示方式。在通电以后,显示屏全亮,随后进入逐字显示状态。按下复位键K1,系统自动复位,显示diligent,随后进入待命状态。按键1、2、3、4分别控制不同的图案。另外,我们可以通k5键来控制字符移动速度的快慢。 二、电路结构 单片机最小系统设计 2.2.1 各部分具体电路 1 单片机的时钟电路 AT89C52单片机内部的振荡电路是一个高增益反向放大器,引线XTAL1和XTAL2分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。AT89C52的时钟产生方式有两种:内部时钟电方式和外部时钟方式。由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。 内部时钟方式:利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路产生自激振荡。最常用的是在 XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,如图2-1电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为6MHz的石英晶体,电容器一般选择30PF左右。

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

基于51单片机的汉字点阵显示设计

湖南科技大学测控技术与仪器专业
单 片 机 课 程 设 计
题 姓 学 名 号

指导教师 成 绩 ____________________
湖南科技大学机电工程学院 二〇一五年十二月制

湖南科技大学课程设计
摘要
LED 显示屏在我们的周围随处可见,它的应用已经普及到社会中的方方面面。作为 一种新型的显示器件,在许多场合都可以见到它的身影,不仅是它的应用使呈现出来的 东西更加美观,更重要的是它的应用方便,成本很低,除了能给人视觉上的冲击外,更 能给人一种美的享受。LED 显示屏是由多个发光二极管按矩阵形式排列封装而成,通常 用来显示时间、图文等各种信息。本设计是基于 ATS52 单片机的 16*16 点阵式显示屏, 该 LED 显示屏能实现 16*16 个汉字,简单的显示图像, 然后一直循环着显示下去。该设 计包含了硬件、软件、调试等方案,只需简单的级联就能实现显示屏的拓展,但要注意 不要超过负载能力。本次设计的作品体积小、功能多、方便实用、花费小,电路具有结 构简单、操作方便、精度高、应用广泛的特点。 关键词: LED,ATS51 单片机,显示屏
-2-

湖南科技大学课程设计
目录
摘要…………………………………………………………………………i 第一章 系统功能要求 ……………………………………………………1 1.1 系统设计要求 ……………………………………………………1 第二章 方案论证 …………………………………………………………1 2.1 方案论证 …………………………………………………………1 第三章 系统硬件电路设计 ………………………………………………1 3.1 AT89S51 芯片的介绍 ………………………………………………1 3.1.1 系统单片机选型…………………………………………………1 3.1.2 AT89S51 引脚功能介绍 …………………………………………2 3.2 LED 点阵介绍………………………………………………………2 3.2.1LED 点阵……………………………………………………………2 3.3 系统各硬件电路介绍 ………………………………………………3
3.3.1 系统电源电路设计介绍……………………………………………3 3.3.2 复位电路……………………………………………………………4 3.3.3 晶振电路……………………………………………………………4 3.4 系统的总的原理图……………………………………………………5 第四章 系统程序设计 ………………………………………………………5 4.1 基于 PROTEUS 的电路仿真……………………………………………5 4.2 用 PROTEUS 绘制原理 ………………………………………………6
4.3PROTEUS 对单片机内核的仿真 ………………………………………6
-3-

单片机LED点阵显示方法与程序代码

单片机LED点阵显示方法与程序代码 点阵的接法有共阴和共阳两种(共阳指的是对每一行LED来讲是共阳)。 由于51单片机驱动能力有限,亮度不够,所以一般需要三极管驱动,下图为一个8X8点阵原理图,仅仅是仿真,如果需要接实物的话,加上三极管才足够亮。 显示的方法有两种: 1、逐列扫描方式。如下图所示,P1口输出列码决定哪一列能亮(相当于位码),P2口输出行码(列数据)决定列上哪些LED亮(相当于段码),能亮的列从左向右扫描完8列(相当于位码循环移位8次)即显示出一帧完整的图像。 2、逐行扫描方式,与逐列扫描调换,即P2口输出位码,P1口输出段码,扫描完8行显示出一帧图像。 以逐行扫描为例,从上图可以很明了的知道点阵的显示原理了(红色表示高电平,绿色表示低电平),当把扫描速度加快,人的视觉停留,看见的就是一幅图或一个字了,如下图所示。

一、行扫描静态显示, 用51单片机实现上图静态显示的程序如下: #include #define uchar unsigned char #define uint unsigned int uchar code TAB[]={0x81,0xFD,0xFD,0xC1,0xBF,0xBF,0xBD,0xC3}; uchar i,t; delay(uchar t) { while (t--) {;} } void main(void) { while(1) { P2=0x01; for(i=0;i<8;i++) { P1=TAB; delay(100); P2=P2<<1|P2>>7; } } } 二、行扫描翻页显示 字码取模方式为逐行 第一次从字码数组中取出第1~8个数据置于列上,行扫描顺序为1~8行,显示一帧,第二次取第9~16个数据,行扫描顺序仍为1~8行,显示第二帧,第三次取第17~24个数据,…… 实现图显示效果的程序如下:

51单片机驱动16×16LED点阵显示动画汉字汇编程序

51单片机驱动16×16LED点阵显示动画汉字汇编程序 这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子. ORG 0000H ST: MOV A,#0FFH ;初始化 MOV P1,A MOV P2,A MOV P3,A MOV P0,A CLR A MOV R0,#50H ;显示缓存清0 MOV R1,#20H ;控制清0的次数 ST0: MOV R0,A INC R0 DJNZ R1,ST0 ;正文显示 CHINESE: MOV DPTR,#TAB1 ;查表指针指向TAB1 LCALL HZ ;结束动画 SCREE: MOV DPTR,#TAB2;查表指针指向TAB2 ACALL DD MOV DPTR,#TAB3;查表指针指向TAB3 ACALL DD MOV DPTR,#TAB4;查表指针指向TAB4 ACALL DD LJMP CHINESE ;显示8幅画面子程序,SCREE专用,用字模软件字要倒置(表必须深256字节) DD: MOV B,#00H

MOV R0,#08H ;显示8幅画面 AJMP CC CC0: MOV A,B ADD A,#20H ;指向下一幅画面 MOV B,A CC: MOV R7,#08H ;画面停留时间 MOV R3,B MOV 37H,R0 LCALL ENTER DIS00: LCALL DISPLAY DJNZ R7,DIS00 MOV R0,37H DJNZ R0,CC0 RET ;汉字上移子程序,可显示8个汉字,(表必须深256字节) HZ: MOV R3,#00H ;查表偏移量 MOV R5,#81H ;查表128次 MOVBACK: MOV R4,#10H ;使显示完一个汉字 MOVBACK0: MOV R7,#02H ;一桢画面显示时间 MOV R0,#6DH ;低8位R0指向显示缓存倒数第3个字节,以备与最后1个字节交换MOV R1,#6CH ;高8位R1指向显示缓存倒数第4个字节,以备与倒数第2个字节交换MOV R2,#10H ;存后移的次数 DJNZ R5,MOVBACK1 RET ;显示完该表,返回 MOVBACK1: MOV A,R0 ;低8位被后移的存单元数据暂存入A INC R0 ;后移两字节 INC R0 MOV R0,A ;放入要移的低8位数据 MOV A,R0 ;R0指向下一个要后移的存单元 SUBB A,#04H

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

基于C51单片机的8×8 LED点阵屏汉字显示..

单片机课程设计报告 —8×8 LED点阵屏显示“大”字 第一章设计内容及要求 (3) 第二章总体设计 (3) 2.1 系统框图.........................................................3、4 2.2 设计步骤 (4) 第三章各部分电路设计 (4) 3. 1 复位电路………………………………………………4 、5 3.2时钟电路……………………………………………5、 6 3.3显示电路.........................................................6、7 3. 4大字取模 (7) 3.5 LED 引脚连接方式..........................................8、9 3.6总体电路 (9) 第四章程序设计 (9) 4.1软件流图......................................................9、10 4.2大字的模 (10) 4.2主程序......................................................10、11 4.3 C51单片机开发工具:keil 4 Proteus使用方法...11、16 第五章仿真结果 (16)

第六章总结与体会................................................17、18 第七章参考文献 (18) 附录程序清单……………………………………………19、20 基于C51单片机的8×8 LED点阵屏汉字显示 一设计要求 1、设计一个8*8点阵LED电子显示屏 2、要求在目测条件下LED显示屏各点亮度均匀、充足,可静态显示一个大字。 二总体方案设计 2.1系统框图 根据设计要求与设计方案,硬件电路的设计框图如图1所示。硬件电路结构由8个部分组成:时钟电路、复位电路、按键接口电路、电源电路、点阵显示阳极电路、点阵显示阴极电路和8*8点阵显示电路。

51单片机点阵设计

51单片机点阵设计 在做点阵之前先来了解下点阵的原理和点阵显示的 过程。 点阵实际上就是64个单独的led灯排列为8行8列 ROW1-8、COL1-8分别控制行和列的1-8led。ROWx高电平、COLy低电平,对应的第x行、第y列led灯亮。 电路图

简化了实际应用电路硬件根据要求自己加 P3口驱动ROW P2口驱动COL 如何让点阵显示字符?点阵显示字符都是动态的,和多位的数码管一样,并不是一次就显示行或列,而是一次只显示1行,在很短的时间内将8行分别显示出来。由于时间很短,我们的眼睛是看不出来是分开显示的。以字符'1'为例。 分别显示8行 ROW-0x01 COL-0xef ROW-0x02 COL-0xe7 ROW-0x04 COL-0xef ROW-0x08 COL-0xef ROW-0x10 COL-0xef ROW-0x20 COL-0xef

ROW-0x40 COL-0xef ROW-0x80 COL-0xc7 源程序: #include ; unsigned char code NUM[8]={0xef,0xe7,0xef,0xef,0xef,0xef,0xef,0xc7}; #define ROW P3 #define COL P2 void main(void) { unsigned char i,j,k; while(1) { k=0x01; for(i=0;i 电路图

源程序 #include ; #include ; unsigned char code NUM[8]={0x00,0x00,0xe00,0x82,0xff,0x80,0x00,0x00}; #define ROW P3 sbit SI=P2^0; sbit RCK=P2^2; sbit SCK=P2^1; void HC595SendData(unsigned char SendVal) { unsigned char i; for(i=0;i<8;i++) { if((SendVal<

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.360docs.net/doc/9d2201992.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.360docs.net/doc/9d2201992.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.360docs.net/doc/9d2201992.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

单片机设计8X8LED点阵显示原理与编程技术

#i nclude unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(void) { unsigned char i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void delay1(void) { unsigned char i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); } void main(void) { unsigned char i,j; while(1) {

for(j=0;j<3;j++)//from left to right 3 time { for(i=0;i<8;i++) { P3=taba[i]; P1=0xff; delay1(); } } for(j=0;j<3;j++)//from right to left 3 time { for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; delay1(); } } for(j=0;j<3;j++)//from top to bottom 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; delay1(); } }

基于51单片机的LED点阵设计

毕业设计(论文)题目: 院 (系): 专业: 姓名: 学号: 指导教师:

毕业设计(论文)任务书

近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,作为微型机的一个主要分支,单片机在结构上的最大特点是把CPU、RAM和ROM 存储器、定时器和多种I/O接口电路集成在一块超大规模集成电路芯片上。从它的组成和功能来看,一块单片机芯片其实就是一台计算机。 本次设计是采用MSC-51单片机来设计的四位数计算器, 采用C语言进行程序编写实现计算器功能。外接4X4的键盘,通过键盘扫描来完成输入数的控制,利用驱动电路使数值与结果在七段共阴极数码管上正常显示,并设有清零键可随时完成计算与显示的清零。计算器将完成的0至9999整数的一次加/减/乘/除运算。 执行过程如下: 开机即显示0,等待键入数值,当输入数字,将通过数码管显示出来,在输入+、-、*、/运算符之后,计算器在内部执行数值转换和存储,并等待再次输入数值,当在键入数值后将显示键入的数值,按等号就会在数码管上显示运算结果。 关键字:单片机计算器键盘扫描程序

n recent years, as computer penetration in the social field and large-scale development of integrated circuits, microcontroller applications are continually deepening, because of its powerful function, small size, low power consumption, cheap, reliable, easy to use, etc. therefore particularly suitable for systems with control of more and more widely used in automatic control, intelligent instruments, meters, data acquisition, military products and home appliances fields, As one of the main branch of microcomputer, microcontroller in the structure of the biggest feature is the CPU, RAM and ROM memory, timer and multiple I / O interface circuit integrated on a VLSI chip. The composition and function from its point of view, a single chip is actually a computer. This design is the use of MSC-51 microcontroller to design the four-digit calculator, using C programming language to achieve calculator functions. 4X4 external keyboard, the keyboard scan to finish by the number of control values and make the drive circuit to the cathode results in a total of seven-segment digital tube display properly, and has cleared at any time to complete key calculation and display clear. Calculator to complete an integer from 0 to 9999 plus / minus / multiply / divide. Implementation of the process is as follows: Power is displayed 0, waiting type value, when the input numbers, will come out through the digital display, the input +,-,*,/ operator, the calculator in the internal implementation of the numerical conversion and storage, and wait for the re-enter the value, when Type the value in the type of value will be displayed by an equal sign will be displayed in the digital control operation results. Key words: SCM calculator keyboard scan C language

51单片机 8x8点阵显示程序参考

本程序用的是51单片机控制8*8点阵显示I(心形)U #include #define uint unsigned int #define uchar unsigned char //使用的IO口要根据自己接在单片机里的情况来更改 sbit RCK = P3^6; //声明串行输出存储锁存线RCK sbit SCK = P3^5; //声明串行数据输入时钟线SCK sbit SER = P3^4; //声明串行数据输入线SER sbit HC = P0^0; //声明C信号接口 sbit HB = P0^1; //声明B信号接口 sbit HA = P0^2; //声明A信号接口 #define ROW1 HC = 0; HB = 0; HA = 0; //定义使能第1行#define ROW2 HC = 0; HB = 0; HA = 1; //定义使能第2行#define ROW3 HC = 0; HB = 1; HA = 0; //定义使能第3行#define ROW4 HC = 0; HB = 1; HA = 1; //定义使能第4行#define ROW5 HC = 1; HB = 0; HA = 0; //定义使能第5行#define ROW6 HC = 1; HB = 0; HA = 1; //定义使能第6行#define ROW7 HC = 1; HB = 1; HA = 0; //定义使能第7行#define ROW8 HC = 1; HB = 1; HA = 1; //定义使能第8行

uchar h; //显示数据,可以用取模软件来获取 uchar iloveu[] = { 0x00,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00, 0x00,0x36,0x7F,0x7F,0x3E,0x1C,0x08,0x00, 0x00,0x22,0x22,0x22,0x22,0x22,0x1C,0x00, 0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00, 0x7C,0x08,0x10,0x08,0x04,0x44,0x38,0x00, 0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00, 0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00}; void delay(uint z) //延时函数,单位ms { uint i, j; for(i = z; i > 0; i--) for(j = 110; j > 0; j--); } void ROW() //行驱动函数

基于单片机的Led点阵广告牌设计

盛年不重来,一日难再晨。及时宜自勉,岁月不待人。 基于单片机的LED广告牌设计 班级电子2班姓名秦地学号0902214075 成绩 一、设计背景 LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。LED 显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。 二、任务要求 设计一个简易的LED广告牌,用于显示自己的名字或其它个性信息。显示的字符用LED 发光二极管排列成固定形状,在控制电路驱动下各字符轮流循环点亮。或者用LED点阵显示,显示内容可更新。汉字一般是以点阵式方式存储的,如16×16,24×24点阵。汉字的字模其实是汉字字形的图形化。所谓16点阵字模,就是把汉字写在一个16×16的网格内,汉字的笔划通过某网格时该网格就对应1,否则该网格对应0,这样,每一网格均对应1或0,把对应1的网格连起来看,就是这个汉字。汉字就是这样通过字节表示其点阵存储在字形中的。为了方便查找所需要汉字的点阵,每个汉字都与一个双字节的内码相对应。通过汉字的内码可以计算出它的点阵起始字节。 三、整体设计方案 如图所示,本设计通过单片机来控制行列驱动器使LED显示屏显示出汉字,单片机选用AT89C52芯片,行驱动器采用74HC154的P0口,列驱动器选用74HC595芯片。该系统主要由AT89C52芯片、电源、行驱动器、列驱动器、16×64LED点阵5部分组成。

基于51单片机FAT32文件系统程序

基于51单片机FAT32文件系统程序 #ifndef __ZNFAT_H__ #define __ZNFAT_H__ #include "mytype.h" //类型重定义 /*******************************************************/ //znFAT的裁减宏--------------------------------------------------------- //#define ZNFAT_ENTER_DIR //有此宏,函数 znFAT_Enter_Dir() 参与编译 #define ZNFAT_OPEN_FILE //有此宏,函数 znFAT_Open_File() 参与编译 //#define ZNFAT_SEEK_FILE //有此宏,函数 znFAT_Seek_File() 参与编译 //#define ZNFAT_READ_FILE //有此宏,函数 znFAT_Read_File() 参与编译 //#define ZNFAT_READ_FILEX //有此宏,函数 znFAT_Read_FileX() 参与编译 //#define ZNFAT_ADD_DAT //有此宏,函数 znFAT_Add_Dat() 参与编译 //#define ZNFAT_CREATE_DIR //有此宏,函数 znFAT_Create_Dir() 参与编译 //#define ZNFAT_CREATE_FILE //有此宏,函数 znFAT_Create_File() 参与编译 //#define ZNFAT_DEL_FILE //有此宏,函数 znFAT_Del_File() 参与编译 //#define ZNFAT_XCOPY_FILE //有此宏,函数 znFAT_XCopy_File() 参与编译 //#define ZNFAT_RENAME_FILE //有此宏,函数 znFAT_Rename_File() 参与编译 //#define ZNFAT_GET_TOTAL_SIZE //有此宏,函数 znFAT_Get_Total_Size() 参与编译 //#define znFAT_GET_REMAIN_CAP //有此宏,函数 znFAT_Get_Remain_Cap() 参与编译 #include "cj.h" #include "cj.h" //---------------------------------------------------------------------- #define SOC(c) (((c-pArg->FirstDirClust)*(pArg->SectorsPerClust))+pArg->FirstDirSector) // 用于计算簇的开始扇区#define CONST const //设备表 #define SDCARD 0 //SD卡 #define UDISK 1 //U盘 #define CFCARD 2 //CF卡 #define OTHER 3 //其它 //这里的存储设备表,可以灵活扩充,以实现对更多存储设备的支持 //------------------------------------------- #define MAKE_FILE_TIME(h,m,s) ((((unsigned int)h)<<11)+(((unsigned int)m)<<5)+(((unsigned int)s)>>1)) /* 生成指定时分秒的文件时间数据 */ #define MAKE_FILE_DATE(y,m,d) (((((unsigned int)y)+20)<<9)+(((unsigned int)m)<<5)+((unsigned int)d)) /* 生成指定年月日的文件日期数据 */ //DPT:分区记录结构如下 struct PartRecord { UINT8 Active; //0x80表示此分区有效 UINT8 StartHead; //分区的开始磁头 UINT8 StartCylSect[2];//开始柱面与扇区 UINT8 PartType; //分区类型 UINT8 EndHead; //分区的结束头 UINT8 EndCylSect[2]; //结束柱面与扇区 UINT8 StartLBA[4]; //分区的第一个扇区 UINT8 Size[4]; //分区的大小

相关文档
最新文档