嵌入式系统课程设计 跑马灯报告

合集下载

嵌入式系统课程设计 跑马灯报告

嵌入式系统课程设计 跑马灯报告

嵌入式系统课程设计报告学部专业学号姓名指导教师日期一、实验内容设计msp430单片机程序并焊接电路板,利用msp430单片机芯片实现对跑马灯、按键识别及数码显示这三大模块的控制二、实验目的1.熟悉电路原理图,了解单片机芯片与各大模块间的控制关系2.增强看图和动手设计能力,为将来从事这个专业及相关知识奠定基础3.在焊接的同时,理解源程序是如何实现相应功能的三、实验设备及器材清单实验设备:电烙铁、烙铁架、尖嘴钳、斜口钳、镊子、万用表等器材清单:四、硬件电路框图五、程序清单跑马灯程序#include <MSP430X14X.H>#define uchar unsigned char#define uint unsigned intint main( void ){void delay( );WDTCTL = WDTPW + WDTHOLD; unsigned char i=0,j=0;P2DIR=0XFF;P2SEL=0X00;while(1){for(i=0;i<10;i++){P2OUT=0XFF;delay(50);P2OUT=0X00;delay(50);}for(j=0;j<10;j++){P2OUT=0X55;delay(50);P2OUT=0XAA;delay(50);}}}void delay(uint n){uint a,b;for(a=0;a<=n;a++){for(b=0;b<=1538;b++);}}键盘程序#include "msp430x14x.h"int keyvalue=0;int i;int table[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07};void main( void ){WDTCTL = WDTPW + WDTHOLD; // 关看门狗P3DIR|=0X0b; //P3.0 P3.1 P3.3设置为输出状态P3SEL=0X0a; //选择P.1 P3.3为外围器件功能使用P3OUT=0X00; //P3引脚低电平P3OUT=0XFF; //P3引脚高电平P4DIR=0X00; //P4.0-P4.7引脚设置为输入P4SEL=0X00; //选择P4.0-P4.7为外围器件功能使用,即按键的输入口P1DIR=0X00; //P1.0-P1.7引脚设置为输入P1SEL=0X08; //选择P1.3为外围器件功能使用P1IE=0X08; //P1.3中断使能P1IES=0X08; // 下降沿中断标志置位U0CTL=SWRST; //UART逻辑为复位状态,可以设置串口U0CTL=CHAR+SYNC+MM; //8位数据位,SPI模式,地址位多机协议U0TCTL=SSEL1+SSEL0+STC;//选择主时钟MCTL,3端SPI,STE禁止U0TCTL=CKPH; //UCTL时钟信号延迟半个周期U0TCTL=~CKPL; //CKPL=1,时钟信号的高电平位无效电平U0BR0=0X02; //波特率2分频U0BR1=0X00;U0MCTL=0X00;ME1|=USPIE0; //串口0同步模块使能U0CTL&=~SWRST; //UART处于工作状态while(1){for(i=0;i<8;i++){if((P4IN&0x01<<i)==0X00) //按下1键(低电平)1111 1110&0000 0001=00000 0000==0x00//按下2键(低电平)1111 1101&0000 0010=0000 0000==0x00{keyvalue=table[i]; //按下1键keyvalue=0x3f 按下2键eyvalue=0x06U0TXBUF=keyvalue; //接收数据缓存//while((IFG1&UTXIFG0)==0);//IFG1&=~UTXIFG0;}}}}#pragma vector=PORT1_VECTOR //进入中断程序__interrupt void port1_vr(void){P3OUT=0X00; //P3输出低电平}六、实验小结时间过的很快,这个学期的MSP430单片机结束了,随之而来的课程设计也要结束了。

单片机闪烁灯跑马灯控制课程设计

单片机闪烁灯跑马灯控制课程设计

单片机闪烁灯跑马灯控制课程设计单片机闪烁灯跑马灯控制课程设计报告一、引言本课程设计旨在通过学习和实践单片机(MCU)编程,实现闪烁灯和跑马灯的控制。

我们将使用嵌入式C语言编程,通过了解单片机的内部结构、电路设计和编程流程,深入理解单片机的工作原理和应用。

二、系统硬件设计本课程设计选用51单片机作为主控芯片,外接8个LED灯和1个按键。

硬件电路设计如下:1.单片机:采用AT89C51,该芯片具有32K字节的Flash存储器,256字节的RAM,以及两个16位定时器/计数器。

2.LED灯:采用普通LED灯珠,与单片机引脚相连,通过编程控制LED灯的亮灭状态。

3.按键:采用机械按键,与单片机的外部中断0(EX0)相连,用于触发闪烁灯和跑马灯的切换。

三、系统软件设计1.闪烁灯模式:在此模式下,8个LED灯将按照一定的频率交替闪烁。

我们可以通过计时器和GPIO口控制LED灯的亮灭状态。

void blink_LED(void) {int i;while(1) {for(i = 0; i < 8; i++) {P1_0 = ~P1_0; // 翻转LED状态delay(500); // 延时,控制闪烁频率}}}2.跑马灯模式:在此模式下,8个LED灯将按照一定的顺序依次点亮。

我们可以通过计时器和GPIO口控制LED灯的亮灭状态。

void marquee_LED(void) {int i;int led_state[8] = {0, 1, 0, 1, 0, 1, 0, 1}; // LED状态数组,初始为交替亮灭while(1) {for(i = 0; i < 8; i++) {P1_0 = led_state[i]; // 设置LED状态delay(50); // 延时,控制跑马灯速度}}}四、按键处理程序我们通过外部中断0(EX0)接收按键信号,当按键按下时,将切换闪烁灯和跑马灯模式。

按键处理程序如下:void EX0_ISR(void) interrupt 0 { // EX0中断服务程序if (key_flag) { // 如果按键已经被按下过if (key_value == 0) { // 如果按键状态为低电平marquee_LED(); // 切换到跑马灯模式key_flag = 0; // 标记按键状态已经改变} else { // 如果按键状态为高电平blink_LED(); // 切换到闪烁灯模式key_flag = 0; // 标记按键状态已经改变}key_value = ~key_value; // 翻转按键状态值} else { // 如果按键还没有被按下过key_value = ~key_value; // 翻转按键状态值if (key_value == 0) { // 如果按键状态为低电平blink_LED(); // 切换到闪烁灯模式key_flag = 1; // 标记按键状态已经改变} else { // 如果按键状态为高电平marquee_LED(); // 切换到跑马灯模式key_flag = 1; // 标记按键状态已经改变}}}。

嵌入式跑马灯实验

嵌入式跑马灯实验

一、实验名称:跑马灯二、实验要求:编写程序控制跑马灯的亮灭:首先是全不亮,接着第1个灯亮,第2个灯亮,第3个灯亮,第4个灯亮,最后所有的灯一起亮,即按顺序亮,然后全亮,最后全灭,顺序循环。

最后蜂鸣器响,然后灯全部灭。

三、实验步骤1、点击WINDOWS 操作系统的开始-> 程序-> ARM Developer Suite v1.2 ->CodeWarrior forARM Developer Suite 启动ADS1.2 IDE 或双击CodeWarrior for ARMDeveloper Suite 快捷方式起动启。

2、打开原有的有关跑马灯实验的工程。

3、源程序代码:。

/******************************************************************** ********* File:LEDCON.C* 功能:LED闪烁控制。

对发光二极管LED4进行控制,采用软件延时方法。

* 使用I/O口直接控制LED,采用灌电流方式。

* 说明:将跳线器JP8_LED4短接。

********************************************************************* *******/#include "config.h"#define LEDCON4 0x00002000 /* P0.13引脚控制LED4,低电平点亮*/#define LEDCON1 0x00000400 /* P0.10引脚控制LED1,低电平点亮*/#define LEDCON2 0x00000800 /* P0.11引脚控制LED2,低电平点亮*/#define LENCON3 0x00001000 /* P0.12引脚控制LED3,低电平点亮*/#define BEEP 0x00000080 /* P0.7引脚控制蜂鸣器,低电平响*/#define ALL 0x00003C80#define LEDALL 0x00003C00/******************************************************************** ********* 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无********************************************************************* *******/void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);/******************************************************************** ********* 名称:main()* 功能:控制LED闪烁********************************************************************* *******/int main(void){ PINSEL0 = 0x00000000; // 设置所有管脚连接GPIOPINSEL1 = 0x00000000;IODIR = ALL; // 设置ALL控制口为输出while(1) //实现循环{IOSET =ALL;//初始化所有的灯灭IOSET =BEEP;// 蜂鸣器不响IOCLR = LEDCON1; //低电平灯亮DelayNS(100); //延迟时间IOSET = LEDCON1; //高电平灯灭DelayNS(100); //延迟时间IOCLR = LEDCON2;DelayNS(100);IOSET = LEDCON2;DelayNS(100);IOCLR = LEDCON3;DelayNS(100);IOSET = LEDCON3;DelayNS(100);IOCLR = LEDCON4;DelayNS(100);IOSET = LEDCON4;DelayNS(100);IOCLR =ALLLED;//所有的灯亮DelayNS(100);IOCLR =BEEP;//蜂鸣器响DelayNS(100);}return(0);4、调试程序观察实验结果。

《嵌入式技术应用开发项目教程》项目2 跑马灯控制设计

《嵌入式技术应用开发项目教程》项目2 跑马灯控制设计

GPIO_AF_SEL(DIGITAL, PB, 1, 0); //设置PB1引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 2, 0); //设置PB2引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 3, 0); //设置PB3引脚是数字通道和GPIO功能
uint16_t temp, i;
void delay(unsigned int count)
//延时函数
{
unsigned int i;
for(;count!=0;count--)
{
i=5000;
while(i--);
}
}
int main()
{
GPIO_AF_SEL(DIGITAL, PB, 0, 0); //设置PB0引脚是数字通道和GPIO功能
3.LED循环点亮控制设计与实现
实施过程:
1.移植工程模板
复制“任务3 LED闪烁控制” 文件夹,然后然后修改文件夹 名为“任务4 LED循环点亮控 制”,USER文件夹下的M0_ LED.uvprojx工程名不用修改 。
2. LED循环点亮控制程序设计
#include <SC32F5832.h>
#include <GPIO.h>
GPIO_AF_SEL(DIGITAL, PB, 7, 0); //设置PB7引脚是数字通道和GPIO功能
PB->OUTEN|=0x00ff;
//PB0~PB7引脚输出使能,既设置PB0~PB7引脚为输出引脚
PB -> OUT = 0x00ff;
//PB0~PB7输出高电平,LED1~LED8熄灭

嵌入式系统实训报告5--走马灯

嵌入式系统实训报告5--走马灯

《嵌入式系统技术》实训报告1、实验目的z 熟悉ADS开发环境调试环境。

z 掌握简单的ARM汇编指令的使用方法。

z 掌握S3C2440A的I/O控制寄存器的配置。

z 掌握ARM汇编指令和C语言相互调用的方法2、实验设备z PC机、ARM仿真器、2440实验箱、串口线。

3、实验内容z 熟悉ARM开发环境的建立。

z 使用ARM汇编和C语言设置GPIO 口的相应寄存器。

z 编写跑马灯程序。

4、实验原理C程序与汇编程序相互调用规则为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规定一定的规贝农ATPCS即ARM Thumb过程调用标准(ARM/Thumb Procedure Call Standard),是ARM程序和Thumb程序中子程序调用的基本规则,它规定了一些子程序间调用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

下面结合实际介绍几种ATPCS规则,如果读者想了解更多的规则,可以查看相关的书籍籍。

1. 基本ATPCS基本ATPCSS定了在子程序调用时的一些基本规则,包括下面3方面的内容:(1) 各寄存器的使用规则及其相应的名称。

(2) 数据栈的使用规则。

(3) 参数传递的规则。

相对于其它类型的ATPCS满足基本ATPCS勺程序的执行速度更快,所占用的内存更少。

但是它不能提供以下的支持:ARM程序和Thumb程序相互调用,数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。

而派生的其他几种特定的ATPCS就是在基本ATPCS的基础上再添加其他的规则而形成的。

其目的就是提供上述的功能。

2.寄存器的使用规则寄存器的使用必须满足下面的规则:(1) 子程序间通过寄存器R0〜R3来传递参数。

这时,寄存器R0〜R3可以记作A0〜A3。

被调用的子程序在返回前无需恢复寄存器R0〜R3的内容。

(2) 在子程序中,使用寄存器R4〜RII来保存局部变量。

嵌入式实训跑马灯报告

嵌入式实训跑马灯报告

一、引言随着科技的飞速发展,嵌入式系统在各个领域得到了广泛的应用。

为了更好地了解嵌入式系统的开发过程,提高自己的实践能力,我参加了嵌入式实训课程,并完成了跑马灯项目的开发。

本文将详细介绍跑马灯项目的背景、设计思路、实现过程以及总结和反思。

二、项目背景跑马灯是一种常见的嵌入式应用,其基本功能是在屏幕上显示不断滚动的文字。

跑马灯项目旨在通过实践,让我们掌握嵌入式系统开发的基本流程,包括硬件选型、软件开发、调试与优化等。

三、设计思路1. 硬件选型跑马灯项目主要涉及硬件部分有:单片机、显示模块、按键模块、电源模块等。

考虑到成本和易用性,我选择了基于STC89C52单片机的硬件平台,该单片机具有丰富的外设资源,且价格低廉。

2. 软件设计跑马灯项目主要涉及软件设计,包括主程序、显示模块、按键模块等。

(1)主程序:负责跑马灯的基本功能,包括文字显示、滚动速度调整、按键控制等。

(2)显示模块:负责将文字显示在屏幕上,包括字体选择、颜色设置等。

(3)按键模块:负责实现按键功能,包括启动/停止跑马灯、调整滚动速度等。

3. 调试与优化在软件开发过程中,需要不断调试和优化程序,以提高跑马灯的性能。

主要优化方向包括:(1)优化程序结构,提高代码可读性和可维护性。

(2)优化显示模块,提高显示效果。

(3)优化按键模块,提高按键响应速度。

四、实现过程1. 硬件搭建首先,根据设计图纸,焊接电路板,连接单片机、显示模块、按键模块等硬件设备。

2. 软件编写(1)主程序:编写主程序,实现跑马灯的基本功能。

(2)显示模块:编写显示模块,实现文字显示、颜色设置等功能。

(3)按键模块:编写按键模块,实现按键控制功能。

3. 调试与优化在软件开发过程中,使用示波器、逻辑分析仪等工具进行调试,观察程序运行情况,发现问题并及时修改。

经过多次调试,跑马灯项目最终实现预期功能。

五、总结与反思1. 总结通过本次嵌入式实训,我掌握了跑马灯项目的开发过程,包括硬件选型、软件开发、调试与优化等。

心形跑马灯实训报告

心形跑马灯实训报告

一、实训目的本次心形跑马灯实训旨在通过实际操作,让学生掌握心形跑马灯的设计原理、电路搭建、编程控制以及实际应用等方面的知识。

通过实训,提高学生的动手能力、创新能力和团队协作能力,同时加深对电子技术、嵌入式系统及编程的理解。

二、实训背景随着科技的发展,嵌入式系统在日常生活中得到了广泛应用。

心形跑马灯作为一种新颖的电子装饰品,具有较高的观赏性和实用性。

本实训项目以心形跑马灯为载体,让学生在实训过程中学习相关知识,培养创新意识。

三、实训内容1. 心形跑马灯设计原理心形跑马灯采用LED灯珠作为显示单元,通过单片机控制LED灯珠的亮灭,形成动态的心形图案。

设计原理主要包括以下几个方面:(1)心形图案设计:通过数学公式计算心形图案的坐标点,将坐标点映射到LED灯珠上。

(2)LED灯珠驱动电路:设计LED灯珠的驱动电路,确保LED灯珠正常工作。

(3)单片机控制电路:设计单片机控制电路,实现LED灯珠的亮灭控制。

2. 心形跑马灯电路搭建(1)电路元器件:主要包括单片机、LED灯珠、电阻、电容、面包板、导线等。

(2)电路搭建步骤:①根据设计原理,设计电路图。

②在面包板上搭建电路,连接单片机、LED灯珠、电阻、电容等元器件。

③检查电路连接是否正确,确保电路正常工作。

3. 心形跑马灯编程控制(1)编程环境:使用C语言进行编程。

(2)编程步骤:①初始化单片机端口,设置LED灯珠的亮灭模式。

②编写心形图案的生成函数,计算心形图案的坐标点。

③编写控制LED灯珠亮灭的函数,实现心形图案的动态显示。

4. 心形跑马灯实际应用(1)展示平台:将心形跑马灯应用于各类活动、展览等场合,展示其独特魅力。

(2)应用场景:如商场、酒店、旅游景点等。

四、实训过程1. 理论学习:首先,学生对心形跑马灯的设计原理、电路搭建、编程控制等方面进行理论学习,了解相关知识。

2. 电路搭建:在面包板上搭建心形跑马灯电路,连接元器件,确保电路正常工作。

3. 编程实践:使用C语言编写心形跑马灯的代码,实现心形图案的动态显示。

ARM嵌入式跑马灯设计实验报告

ARM嵌入式跑马灯设计实验报告

ARM嵌入式设计实验报告题目:跑马灯的设计专业:班级:姓名:学号:指导教师:2014年11 月目录1 题目要求 (1)2 设计软件的安装 (1)3 开发平台的搭建 (4)4 项目设计 (8)4.1 设计思路概述 (8)4.1.1 设计层次介绍 (9)4.1.2 设计模块介绍 (12)5总结 (16)1.题目要求:在windows系统上安装一个Linux操作系统,并且在自己搭建的平台上实现跑马灯的设计。

1.1.实验工具:计算机 linux操作系统1.1.2.实验目的:熟练掌握arm开发环境的设计,了解跑马灯的编程。

2.设计软件的安装:本项目设计软件为ReHat Linux 9.0操作系统,实验开发平台为MagicARM270具体关键安装步骤如下:3.开发平台的搭建:实验步骤(1)安装交叉编译器将光盘提供的交叉编译器安装包arm-linux-3.4.1.tar.bz2复制到某个目录下,然后进行解压安装,指定安装路径为/usr/local/arm。

# tar xjvf arm-linux-3.4.1.tar.bz2 -C /usr/local/arm注意:安装交叉编译器需要root权限,请使用root登录或者使用su命令增加root权限。

(2)设定交叉编译器路径修改/etc/profile文件,在其中增加arm-linux-gcc的路径,然后重新登录:# Path manipulationif [ `id -u` = 0 ]; thenpathmunge /sbinpathmunge /usr/sbinpathmunge /usr/local/sbinpathmunge /usr/local/arm/3.4.1/bin ⇓增加此行fi(3)设置宿主机网络从RedHat Linux的Main Menu菜单,选择System Settings◊Network,打开网络配置界面。

(4)设置宿主机网络双击eth0,在弹出的界面进行具体的网络设置,如IP地址、子网掩码等信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统
课程设计报告
学部
专业
学号
姓名
指导教师
日期
一、实验内容
设计msp430单片机程序并焊接电路板,利用msp430单片机芯片实现对跑马灯、按键识别及数码显示这三大模块的控制
二、实验目的
1.熟悉电路原理图,了解单片机芯片与各大模块间的控制关系
2.增强看图和动手设计能力,为将来从事这个专业及相关知识奠定基础
3.在焊接的同时,理解源程序是如何实现相应功能的
三、实验设备及器材清单
实验设备:电烙铁、烙铁架、尖嘴钳、斜口钳、镊子、万用表等
器材清单:
四、硬件电路框图
五、程序清单
跑马灯程序#include <MSP430X14X.H>
#define uchar unsigned char
#define uint unsigned int
int main( void )
{
void delay( );
WDTCTL = WDTPW + WDTHOLD; unsigned char i=0,j=0;
P2DIR=0XFF;
P2SEL=0X00;
while(1)
{
for(i=0;i<10;i++)
{
P2OUT=0XFF;
delay(50);
P2OUT=0X00;
delay(50);
}
for(j=0;j<10;j++)
{
P2OUT=0X55;
delay(50);
P2OUT=0XAA;
delay(50);
}
}
}
void delay(uint n)
{
uint a,b;
for(a=0;a<=n;a++)
{
for(b=0;b<=1538;b++);
}
}
键盘程序
#include "msp430x14x.h"
int keyvalue=0;
int i;
int table[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07};
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
P3DIR|=0X0b; //P3.0 P3.1 P3.3设置为输出状态
P3SEL=0X0a; //选择P.1 P3.3为外围器件功能使用
P3OUT=0X00; //P3引脚低电平
P3OUT=0XFF; //P3引脚高电平
P4DIR=0X00; //P4.0-P4.7引脚设置为输入
P4SEL=0X00; //选择P4.0-P4.7为外围器件功能使用,即按键的输入口P1DIR=0X00; //P1.0-P1.7引脚设置为输入
P1SEL=0X08; //选择P1.3为外围器件功能使用
P1IE=0X08; //P1.3中断使能
P1IES=0X08; // 下降沿中断标志置位
U0CTL=SWRST; //UART逻辑为复位状态,可以设置串口
U0CTL=CHAR+SYNC+MM; //8位数据位,SPI模式,地址位多机协议
U0TCTL=SSEL1+SSEL0+STC;//选择主时钟MCTL,3端SPI,STE禁止
U0TCTL=CKPH; //UCTL时钟信号延迟半个周期
U0TCTL=~CKPL; //CKPL=1,时钟信号的高电平位无效电平
U0BR0=0X02; //波特率2分频
U0BR1=0X00;
U0MCTL=0X00;
ME1|=USPIE0; //串口0同步模块使能
U0CTL&=~SWRST; //UART处于工作状态
while(1)
{
for(i=0;i<8;i++)
{
if((P4IN&0x01<<i)==0X00) //按下1键(低电平)1111 1110&0000 0001=00000 0000==0x00
//按下2键(低电平)1111 1101&0000 0010=0000 0000==0x00
{
keyvalue=table[i]; //按下1键keyvalue=0x3f 按下2键eyvalue=0x06
U0TXBUF=keyvalue; //接收数据缓存
//while((IFG1&UTXIFG0)==0);
//IFG1&=~UTXIFG0;
}
}
}
}
#pragma vector=PORT1_VECTOR //进入中断程序
__interrupt void port1_vr(void)
{
P3OUT=0X00; //P3输出低电平
}
六、实验小结
时间过的很快,这个学期的MSP430单片机结束了,随之而来的课程设计也要结束了。

MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。

这些特点保证了可编制出高效率的源程序。

这次的课程设计是用430单片机实现按键、跑马灯和数码管显示。

经过2个星期的紧张焊接终于焊接成功,这次的单片机实验板焊接的比较顺利。

毕竟已经大四了。

一些基本知识都已经掌握了,不在像刚来的时候那样不知道怎么下手。

由于时间比较赶所以焊接出来的,所以有些焊点不是很牢固刚开始检测的时候还以为是焊错了,检查后焊接好了各个点。

之后有认真的调试了下各个功能都能比较好的呈现出来。

总体来说对焊接的不存在什么大问题。

主要的还是在程序和对单片机的熟练运用了。

重视理论知识个实际硬件的实践才是最重要的,即使知识学的再好,没有经过实践是不会很好的运用的。

在不断的实践中才能更好的学习掌握只是,才能提高自己的素养!。

相关文档
最新文档