基于ARM嵌入式系统接口技术课程设计报告

合集下载

arm嵌入式实验报告

arm嵌入式实验报告

arm嵌入式实验报告ARM嵌入式实验报告近年来,随着科技的不断进步,嵌入式系统在各个领域得到了广泛应用。

作为其中一种重要的嵌入式处理器架构,ARM架构以其高效能和低功耗的特点,成为了众多嵌入式系统的首选。

本实验报告将介绍我在ARM嵌入式实验中的学习和体会。

1. 实验背景和目的嵌入式系统是指将计算机技术应用于各种电子设备中,以完成特定任务的系统。

ARM架构作为一种低功耗、高性能的处理器架构,广泛应用于智能手机、平板电脑、物联网设备等领域。

本次实验的目的是通过学习ARM架构的基本原理和应用,了解嵌入式系统的设计和开发过程。

2. 实验内容本次实验主要包括以下几个方面的内容:2.1 ARM架构的基本原理首先,我们学习了ARM架构的基本原理,包括指令集、寄存器、内存管理等方面的知识。

ARM指令集具有丰富的指令种类和灵活的寻址方式,可以满足不同应用的需求。

同时,ARM处理器具有多个寄存器,用于存储和操作数据,提高了程序的执行效率。

此外,内存管理是嵌入式系统设计中非常重要的一环,ARM架构通过虚拟内存管理机制,实现了对内存的高效管理。

2.2 ARM开发工具的使用为了进行ARM嵌入式系统的开发,我们需要使用相应的开发工具。

本次实验中,我们学习了如何使用Keil MDK开发工具,进行ARM程序的编译、调试和下载。

Keil MDK提供了一套完整的开发环境,包括编译器、调试器和仿真器等,方便了我们进行ARM程序的开发和调试。

2.3 ARM嵌入式系统的设计和开发在掌握了ARM架构和开发工具的基本知识后,我们开始进行ARM嵌入式系统的设计和开发。

本次实验中,我们以一个简单的温度监测系统为例,设计了相应的硬件电路和软件程序。

硬件电路包括传感器、模拟转换电路和显示器等,用于采集和显示温度数据。

软件程序则负责控制硬件电路的运行,并将采集到的温度数据进行处理和显示。

3. 实验结果和分析通过实验,我们成功地设计和开发了一个基于ARM架构的温度监测系统。

ARM嵌入式系统课程设计报告

ARM嵌入式系统课程设计报告

湖南工业大学课程设计资料袋电气与信息工程学院(系、部)2015-2016学年第1学期课程名称嵌入式系统指导教师欧阳洪波职称讲师学生姓名联想专业班级电子信息1203学号124017205XX题目Linux操作系统开发环境的构建、移植与使用成绩起止日期 2015年 12 月 14 日~ 2015年 12 月 27 日目录清单湖南工业大学课程设计任务书2015 —2016学年度第 1学期电气与信息工程学院(系、部)电子信息专业 1203 班级课程名称:嵌入式系统课程设计设计题目:Linux操作系统开发环境的构建、移植与使用完成期限: 2015年12月14日~ 2015年12月27日共2周指导教师(签字): 2015年12月 06日系(教研室)主任(签字): 2015年12月06日嵌入式系统课程设计说明书Linux操作系统开发环境的构建、移植与使用起止日期:2015年 12 月 14 日~ 2015年 12 月 27 日共2周学生姓名联想班级电子信息1203学号124017205XX成绩指导教师(签字)电气与信息工程学院2015年12月27日目录一、课程设计目的 (5)二、课程设计要求 (5)三、Linux 操作系统的安装及设置 (5)四、Linux 开发环境的构建及移植 (7)五、Linux 基本操作命令的使用 (14)六、课程设计收获和体会 (16)一、课程设计目的在学习和初步掌握ARM嵌入式系统的硬件结构与工作原理、ARM汇编程序设计语言、Linux操作系统等ARM嵌入式系统基础理论以及嵌入式系统设计与开发基本方法的基础上,进行Linux操作系统开发环境的构建、移植与使用等综合实践,为实际从事ARM+Linux嵌入式系统的设计与开发打下良好的基础。

二、课程设计要求进行Linux操作系统开发环境的构建、移植与使用等综合实践,具体任务为:(1)Linux操作系统的安装及设置:包括VMware的安装,Linux操作系统的安装及设置;(2)Linux开发环境的构建及移植:包括:交叉编译器的安装,U-BOOT的配置与编译,Linux内核的配置与编译;Busybox等实用工具的安装;GUI工具包QT 的安装等;(3)Linux基本操作命令的使用:各种Linux基本操作命令的使用。

ARM嵌入式开发实验课程学习报告

ARM嵌入式开发实验课程学习报告

ARM实验报告 39032510 赵正ARM嵌入式开发实验课程学习报告39032510摘要:在两周的ARM实验课程学习中,我初步了解了ARM的一些基本知识,上课的过程中也按实验指导书中的内容学习了一些例程,了解了PB平台下工程的建立、程序的编译和运行,利用实验箱中的设备实验了对数码管,点阵,电机等的控制,虽然只学到了一点皮毛,两天的学习还是让我觉得收获良多。

一、对ARM的认识在选择这一门课前,其实我对ARM一点也不了解,只是在做电设时听说有一组同学用ARM来进行控制,觉得挺高端,于是趁有这个机会就想见识一下ARM的强大功能。

经过老师第一节课的简单讲解,我了解了ARM的一些知识,现在常见的系统有LUNIX和WINCE,我们实验中用的是WINCE系统,下面说下实验的心得。

二、第一个实验---系统的定制以前学单片机,基本上简单看看原理图就开始进行程序的编写,而翻开ARM的指导书,发现要定制系统,没听说过。

分配了实验箱后,靠之前积累的经验,那些导线的连接还是没什么问题的。

打开电源发现我们的实验箱屏目上不显示,而别人的却有,想了一下才明白,原来是那些箱子已经有人把系统烧进去了。

然后开始按步骤定制系统。

自己不熟悉的步骤主要有以下几点:1. 对CMD命令提示框不会操作,如何打开一个文件不清楚,经寻问,得知要用“cd+文件夹名称“ 可以打开。

图表 1 命令提示框ARM实验报告 39032510 赵正2. 对于什么是网关,什么是网络地址了解不多,在修改IP时搞了好半天图表 2 IP设置界面最后费尽周折,花了近2个小时时间,终于利用Jflash.exe将eboot.nb0烧到Flash 中,这时才发现,利用PB生成的NK文件还没有用到。

随后稍稍顺利了一点,最终也把NK文件烧进Flash中,但发现界面是英文的,不太方便,还有就是一旦重启,就需要重新烧录,之后改了超极终端里的一些选项,解决了这个问题。

三、最头疼的实验———实验箱与宿主机的连接在熟悉了实验的基本过程后,很快做到了实验箱与宿主机的连接,此前也了解过单片机实验板与PC机的连接,用的是串口线,至于实验中的ARM,记得实验中有一个串口线,一个并口线,一个网线,也不知通过哪个连的。

arm嵌入式课程设计

arm嵌入式课程设计

arm嵌入式课程设计一、课程目标知识目标:1. 理解ARM处理器的结构与工作原理,掌握其基本功能和应用领域;2. 学会使用ARM汇编语言进行编程,掌握基本的指令集和程序设计方法;3. 熟悉ARM嵌入式系统的硬件接口和软件架构,能够进行简单的系统设计与调试。

技能目标:1. 培养学生运用所学知识设计简单的ARM嵌入式系统,提高动手实践能力;2. 培养学生运用汇编语言编写程序,提高编程技能;3. 培养学生具备分析和解决嵌入式系统问题的能力。

情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发学习热情,形成主动学习的态度;2. 培养学生具备团队协作精神,能够在项目实践中相互支持、共同成长;3. 培养学生严谨的科学态度和良好的工程意识,注重实际应用和创新能力的培养。

课程性质:本课程为实践性较强的学科,注重理论联系实际,培养学生动手操作能力和实际问题解决能力。

学生特点:高二年级学生,已具备一定的电子技术和计算机编程基础,对嵌入式系统有一定了解,具备初步的编程和动手能力。

教学要求:结合学生特点,采用项目驱动教学,以实践为主线,引导学生通过动手实践掌握知识,提高技能。

将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. 教材章节:ARM嵌入式系统原理与设计- ARM处理器结构与工作原理- ARM汇编语言编程- 嵌入式系统硬件接口技术- 嵌入式系统软件架构与设计- 嵌入式系统项目实践与调试2. 教学内容安排与进度:- 第一周:ARM处理器结构与工作原理学习,了解CPU、内存、外设等基本组成部分;- 第二周:ARM汇编语言编程基础,掌握汇编指令、寄存器、程序流程控制等;- 第三周:嵌入式系统硬件接口技术,学习GPIO、中断、定时器等接口的使用;- 第四周:嵌入式系统软件架构与设计,了解Bootloader、操作系统、驱动程序等;- 第五周:项目实践与调试,分组进行实际项目设计,进行系统调试与优化。

嵌入式系统课程设计(基于ARM的温度采集系统设计)

嵌入式系统课程设计(基于ARM的温度采集系统设计)

教师批阅目录一、设计内容............................................................................................................. - 1 -1.1设计目的....................................................................................................... - 3 -1.2设计意义....................................................................................................... - 3 -二、设计方案............................................................................................................. - 5 -2.1设计要求....................................................................................................... - 5 -2.2方案论证....................................................................................................... - 5 -三、硬件设计............................................................................................................. - 6 -3.1设计思路....................................................................................................... - 6 -3.2系统电路设计............................................................................................... - 6 -四、软件设计............................................................................................................. - 8 -4.1设计思路....................................................................................................... - 8 -4.2程序清单..................................................................................................... - 10 -五、心得体会........................................................................................................... - 12 -参考文献................................................................................................................... - 13 -教师批阅基于ARM的温度采集系统摘要:本设计是基于嵌入式技术作为主处理器的温度采集系统,利用S3C44B0xARM微处理器作为主控CPU,辅以单独的数据采集模块采集数据,实现了智能化的温度数据采集、传输、处理与显示等功能,并讨论了如何提高系统的速度、可靠性和可扩展性。

arm嵌入式实验报告

arm嵌入式实验报告

arm嵌入式实验报告ARM嵌入式实验报告摘要:本实验报告旨在介绍ARM嵌入式系统的基本概念和实验过程。

通过本次实验,我们深入了解了ARM架构的特点、嵌入式系统的应用领域和开发流程,同时掌握了ARM嵌入式开发工具的使用方法。

本报告将详细介绍实验过程和结果,以及对ARM嵌入式系统的深入理解和思考。

一、实验目的本次实验的主要目的是通过实际操作,加深对ARM嵌入式系统的理解,掌握ARM嵌入式开发工具的使用方法,以及熟悉嵌入式系统的开发流程。

具体目标包括:1. 了解ARM架构的特点和应用领域;2. 熟悉ARM嵌入式开发工具的使用方法;3. 掌握嵌入式系统的开发流程,包括软件编写、调试和测试。

二、实验过程1. 熟悉ARM架构和嵌入式系统的基本概念;2. 安装并配置ARM嵌入式开发工具;3. 编写简单的嵌入式程序,包括LED控制、按键检测等;4. 调试和测试程序,验证功能和性能。

三、实验结果通过本次实验,我们深入了解了ARM架构的特点和应用领域,熟悉了ARM嵌入式开发工具的使用方法,掌握了嵌入式系统的开发流程。

同时,我们成功编写并调试了简单的嵌入式程序,验证了程序的功能和性能。

四、对ARM嵌入式系统的思考ARM嵌入式系统具有低功耗、高性能、灵活性等特点,广泛应用于移动设备、智能家居、工业控制等领域。

随着物联网、人工智能等新兴技术的发展,ARM 嵌入式系统的应用前景更加广阔。

我们应不断学习和探索,深入理解ARM嵌入式系统的原理和应用,为未来的发展做好准备。

五、结论本次实验使我们对ARM嵌入式系统有了更深入的理解,掌握了嵌入式开发工具的使用方法,提高了实际操作能力。

通过不断学习和实践,我们将能够更好地应用ARM嵌入式系统,为未来的发展做出贡献。

综上所述,本次实验取得了良好的成果,对我们的学习和发展具有重要意义。

希望通过不断努力,我们能够在ARM嵌入式系统领域取得更大的进步和成就。

ARM嵌入式系统实验报告

ARM嵌入式系统实验报告

ARM嵌入式系统实验报告一、实验目的通过这次实验,我们的目的是学习和了解ARM嵌入式系统的基本原理和应用。

掌握ARM嵌入式系统的系统组成和工作方式,并能够进行简单的嵌入式系统的设计与开发。

二、实验内容1.ARM嵌入式系统的组成和工作原理ARM嵌入式系统由处理器、存储器、外设和操作系统组成。

其中,处理器是系统的核心,负责控制和处理数据;存储器用于存储数据和指令;外设包括输入和输出设备等,用于和外部环境进行交互;操作系统负责管理系统资源和提供各种服务。

ARM处理器采用RISC(精简指令集计算机)架构,具有高性能和低功耗的特点。

它的核心是ARM架构的CPU,采用32位指令集,并具有多种处理器模式和操作模式。

2.ARM嵌入式系统开发环境的搭建在搭建开发环境的过程中,我们需要安装相应的开发工具和驱动程序,并进行相应的配置。

这样才能够实现开发板和PC机之间的通信和调试。

3.ARM嵌入式系统的设计与开发根据实验要求,我们要设计和开发一个简单的ARM嵌入式系统。

这需要进行以下几个步骤:(1)编写系统启动代码,对系统进行初始化;(2)编写应用程序代码,实现系统的功能;(3)将应用程序代码编译成目标文件,然后链接生成可执行文件;三、实验过程1.搭建开发环境首先,我们安装了交叉编译器和调试器,并进行了相应的配置。

然后,连接开发板和PC机,安装和配置驱动程序。

最后,配置开发板的启动方式和调试方式。

2.编写代码并进行编译根据系统设计的要求,我们编写了相应的启动代码和应用程序代码。

然后,使用交叉编译器将代码编译成目标文件,以便下一步的链接。

3.链接生成可执行文件使用交叉编译器将目标文件进行链接,生成可执行文件。

同时,我们对可执行文件进行了相应的设置,如堆栈大小、程序入口地址等。

四、实验结果经过我们的努力和调试,我们最终成功地设计和开发了一个简单的ARM嵌入式系统。

该系统能够按照预期的功能进行工作,并且稳定可靠。

五、实验总结通过这次实验,我们深入学习了ARM嵌入式系统的原理和应用。

arm嵌入式实验报告范文嵌入式系统实验报告范文[共19页]

arm嵌入式实验报告范文嵌入式系统实验报告范文[共19页]

arm嵌入式实验报告范文嵌入式系统实验报告范文[共19页]实验一系统认识实验一、实验目的学习Dais软件的操作,熟悉程序编写的操作步骤及调试方法。

二、实验设备PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。

三、实验内容编写程序,将80h~8Fh共16个数写入单片机内部RAM的30h~3Fh空间。

四、实验步骤运行Dais软件,进入集成开发环境,软件弹出设置通信端口对话框(如图2-1-1),请确保实验装置与PC正确连接,并已打开实验装置电源,使其进入在待命状态。

这里选择与实验装置实际相连的通信端口,并单击“确定”。

如通信正确则进入Dais软件主界面,否则弹出“通信出错”的信息框(如图2-1-2),请检查后重试。

图2-1-1 设置通信端口对话框图2-1-2 通信错误信息框通信成功后,单击菜单栏“设置”→“仿真模式”项打开对话框,选择需要设置型号、程序/数据空间。

这里我们将型号设置为“MCS-51实验系统”,外部数据区设置为“系统RAM”,用户程序区设置为“片外(EA=0)”,如图2-1-3所示,最后单击“确定”按钮保存设置。

图2-1-3 设置工作方式对话框工作方式设置完毕后,单击菜单栏“文件”→“新建”项或按Ctrl+N组合键(建议单击工具栏“”按钮)来新建一个文件,软件会出现一个空白的文件编辑窗口。

在新窗口中输入程序代码(A51\2_1.ASM):ORG0000HLJMPMAINORG0100HMAIN:MOVR1,#30H;片内RAM首地址MOVA,#80H;写入数据初值MOVR7,#16;循环变量INCR1;地址增量INCA;数据+1DJNZR7,LOOP1;循环变量-1,不为0继续SJMP$;结束END单击菜单栏“文件”→“保存”项(建议单击工具栏“”按钮)保存文件。

若是新建的文件尚未命名,系统会弹出文件保存对话框(如图2-1-4),提示用户选择文件保存的路径和文件名,再单击“保存”按钮。

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

基于ARM嵌入式系统接口技术课程设计报告课程设计题目:实时时钟设计学院:计算机科学与技术学院班级:计算机09-1班学号:姓名:指导老师:微型计算机系统与接口技术课程设计设计时间:2011年12月19日至 2011年12月23日设计环境1.硬件环境:计算机,EV44B0II实验台2.软件环境:Jediview 集成开发环境一、基本功能:利用S3C44BOX的RTC和实验箱上的LCD液晶、4*4小键盘设计一个实时时钟。

1.在LCD上显示当前日期及时间。

可按如下格式显示:日期:XXXX年XX月XX日时间:XX:XX:XX班级,姓名2.利用4*4小键盘校时校时时LCD的相应位置要有光标提示。

二、定时报警功能通过小键盘设定报警时刻,报警时刻到,则在LCD上显示(各自不同的)报警图像。

三、步骤:1.掌握预备知识:a.液晶显示b.键盘译码c.掌握S3C44BO芯片 RTC的使用方法2.设计:a.实现RTC实时时钟功能b.显示实时时钟界面c.实现校时功能d.上机调试,运行,验收e.实现定时报警功能四、硬件接口逻辑图电路连接图五、程序代码(1)44binits/* ******************************************************* * NAME : 44BINIT.S ** Version : 10.JAn.2003 ** Description: ** C start up codes ** Configure memory, Initialize ISR ,stacks ** Initialize C-variables ** Fill zeros into zero-initialized C-variables ********************************************************///#include "arm.h".globl _start_start:b ResetHandler //for debugb HandlerUndef //handlerUndefb HandlerSWI //SWI interrupt handlerb HandlerPabort //handlerPAbortb HandlerDabort //handlerDAbortb . //handlerReservedb IsrIRQb HandlerFIQ//***IMPORTANT NOTE***//If the H/W vectored interrutp mode is enabled, The above two instructions should//be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller.ldr pc,=HandlerEINT0 //mGA H/W interrupt vector tableldr pc,=HandlerEINT1 //ldr pc,=HandlerEINT2 //ldr pc,=HandlerEINT3 //ldr pc,=HandlerEINT4567 //ldr pc,=HandlerTICK //mGAb .b .ldr pc,=HandlerZDMA0 //mGBldr pc,=HandlerZDMA1 //ldr pc,=HandlerBDMA0 //ldr pc,=HandlerBDMA1 //ldr pc,=HandlerWDT //ldr pc,=HandlerUERR01 //mGBb .b .ldr pc,=HandlerTIMER0 //mGCldr pc,=HandlerTIMER1 //ldr pc,=HandlerTIMER2 //ldr pc,=HandlerTIMER3 //ldr pc,=HandlerTIMER4 //ldr pc,=HandlerTIMER5 //mGCb .b .ldr pc,=HandlerURXD0 //mGDldr pc,=HandlerURXD1 //ldr pc,=HandlerIIC //ldr pc,=HandlerSIO //ldr pc,=HandlerUTXD0 //ldr pc,=HandlerUTXD1 //mGDb .b .ldr pc,=HandlerRTC //mGKA b . //b . //b . //b . //b . //mGKAb .b .ldr pc,=HandlerADC //mGKB b . //b . //b . //b . //b . //mGKBb .b ./*0xe0=EnterPWDN*/ldr pc,=EnterPWDNHandlerFIQ: .word HandleFIQ HandlerIRQ: .word HandleIRQ HandlerUndef: .word HandleUndef HandlerSWI: .word HandleSWI HandlerDabort: .word HandleDabort HandlerPabort: .word HandlePabortHandlerADC: .word HandleADC HandlerRTC: .word HandleRTC HandlerUTXD1: .word HandleUTXD1 HandlerUTXD0: .word HandleUTXD0 HandlerSIO: .word HandleSIO HandlerIIC: .word HandleIIC HandlerURXD1: .word HandleURXD1 HandlerURXD0: .word HandleURXD0 HandlerTIMER5: .word HandleTIMER5 HandlerTIMER4: .word HandleTIMER4 HandlerTIMER3: .word HandleTIMER3HandlerTIMER2: .word HandleTIMER2HandlerTIMER1: .word HandleTIMER1HandlerTIMER0: .word HandleTIMER0HandlerUERR01: .word HandleUERR01HandlerWDT: .word HandleWDTHandlerBDMA1: .word HandleBDMA1HandlerBDMA0: .word HandleBDMA0HandlerZDMA1: .word HandleZDMA1HandlerZDMA0: .word HandleZDMA0HandlerTICK: .word HandleTICKHandlerEINT4567: .word HandleEINT4567HandlerEINT3: .word HandleEINT3HandlerEINT2: .word HandleEINT2HandlerEINT1: .word HandleEINT1HandlerEINT0: .word HandleEINT0/*One of the following two routines can be used for non-vectored interrupt.*/IsrIRQ: //using I_ISPR register.stmdb r13!,{r0-r8,r12,r14}bl IRQldmia r13!,{r0-r8,r12,r14}subs pc,r14,#0x4IRQ:sub sp,sp,#4 //reserved for PCstmfd sp!,{r8-r9}ldr r9,I_ISPRldr r9,[r9]mov r8,#0x0F0:movs r9,r9,lsr #1bcs F1add r8,r8,#4b F0F1:ldr r9,HandleADCadd r9,r9,r8ldr r9,[r9]str r9,[sp,#8]ldmfd sp!,{r8-r9,pc}/****************************************************** START ******************************************************/ ResetHandler:ldr r0,WTCON //watch dog disableldr r1,=0x0str r1,[r0]ldr r0,INTMSKldr r1,MASKALL //all interrupt disablestr r1,[r0]/* ***************************************************** Set clock control registers ******************************************************/ldr r0,LOCKTIMEldr r1,=800 // count = t_lock * Fin (t_lock=200us, Fin=4MHz) = 800str r1,[r0]ldr r0,PLLCON //temporary setting of PLLldr r1,PLLCON_DAT //Fin=10MHz,Fout=40MHzstr r1,[r0]ldr r0,CLKCONldr r1,=0x7ff8 //All unit block CLK enablestr r1,[r0]/* ***************************************************** Set memory control registers ******************************************************/adr r0,SMRDATAldmia r0,{r1-r13}ldr r0,=0x01c80000 //BWSCON Addressstmia r0,{r1-r13}/* **************************************************** Initialize stacks ******************************************************/ldr sp, SVCStack //Why?bl InitStacks/* ***************************************************** Setup IRQ handler ******************************************************/ldr r0,HandleIRQ //This routine is neededldr r1,IsrIRQ //if there isn't 'subs pc,lr,#4' at 0x18, 0x1cstr r1,[r0]BL Main //Don't use main() because ......B ./*****************************************************The function for initializing stack */*****************************************************/InitStacks://Don't use DRAM,such as stmfd,ldmfd......//SVCstack is initialized before//Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'mrs r0,cpsrbic r0,r0,#0X1Forr r1,r0,#0xDB //UNDEFMODE|NOINTmsr cpsr,r1 //UndefModeldr sp,UndefStackorr r1,r0,#0XD7 //ABORTMODE|NOINTmsr cpsr,r1 //AbortModeldr sp,AbortStackorr r1,r0,#0XD2 //IRQMODE|NOINTmsr cpsr,r1 //IRQModeldr sp,IRQStackorr r1,r0,#0XD1 //FIQMODE|NOINTmsr cpsr,r1 //FIQModeldr sp,FIQStackbic r0,r0,#0XDF //MODEMASK|NOINTorr r1,r0,#0X13msr cpsr,r1 //SVCModeldr sp,SVCStack//USER mode is not initialized.mov pc,lr //The LR register may be not valid for the mode changes./****************************************************** The function for entering power down mode ******************************************************//*void EnterPWDN(int CLKCON)*/EnterPWDN:mov r2,r0 //r0=CLKCONldr r0,REFRESHldr r3,[r0]mov r1, r3orr r1, r1, #0x400000 //self-refresh enablestr r1, [r0]nop //Wait until self-refresh is issued. May not be needed.nop //If the other bus master holds the bus, ...nop // mov r0, r0nopnopnopnop/*enter POWERDN mode*/ldr r0,CLKCONstr r2,[r0]/*wait until enter SL_IDLE,STOP mode and until wake-up*/mov r0,#0xffB0: subs r0,r0,#1bne B0/*exit from DRAM/SDRAM self refresh mode.*/ldr r0,REFRESHstr r3,[r0]mov pc,lrSMRDATA:/****************************************************************** * Memory configuration has to be optimized for best performance ** The following parameter is not optimized. *******************************************************************//**** memory access cycle parameter strategy ***// 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock // 2) The memory settings,here, are made the safe parameters even at 66Mhz. // 3) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.// 4) DRAM refresh rate is for 40Mhz. */.long 0x11110090 //Bank0=OM[1:0], Bank1~Bank7=16bit, bank2=8bit//.long 0X600 //GCS0.long 0X7bc0 //GCS1.long 0X7fc0 //GCS2.long 0X7ffc //GCS3.long 0X7ffc //GCS4.long 0X7ffc //GCS5.long 0X18000 //GCS6.long 0X18000 //GCS7.long 0x820591 //REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019.long 0x16 //SCLK power mode, BANKSIZE 32M/32M.long 0x20 //MRSR6 CL=2clk.long 0x20 //MRSR7UserStack: .word 0xc7ffa00SVCStack: .word 0xc7ffb00UndefStack: .word 0xc7ffc00AbortStack: .word 0xc7ffd00IRQStack: .word 0xc7ffe00FIQStack: .word 0xc7fff00HandleReset: .word 0xc7fff00HandleUndef: .word 0xc7fff04HandleSWI: .word 0xc7fff08HandlePabort: .word 0xc7fff0cHandleDabort: .word 0xc7fff10HandleReserved: .word 0xc7fff14HandleIRQ: .word 0xc7fff18HandleFIQ: .word 0xc7fff1c//Don't use the label 'IntVectorTable',//because armasm.exe cann't recognize this label correctly.//the value is different with an address you think it may be. //IntVectorTableHandleADC: .word 0xc7fff20HandleRTC: .word 0xc7fff24HandleUTXD1: .word 0xc7fff28HandleUTXD0: .word 0xc7fff2cHandleSIO: .word 0xc7fff30HandleIIC: .word 0xc7fff34HandleURXD1: .word 0xc7fff38HandleURXD0: .word 0xc7fff3cHandleTIMER5: .word 0xc7fff40HandleTIMER4: .word 0xc7fff44HandleTIMER3: .word 0xc7fff48HandleTIMER2: .word 0xc7fff4cHandleTIMER1: .word 0xc7fff50HandleTIMER0: .word 0xc7fff54HandleUERR01: .word 0xc7fff58HandleWDT: .word 0xc7fff5cHandleBDMA1: .word 0xc7fff60HandleBDMA0: .word 0xc7fff64HandleZDMA1: .word 0xc7fff68HandleZDMA0: .word 0xc7fff6cHandleTICK: .word 0xc7fff70HandleEINT4567: .word 0xc7fff74HandleEINT3: .word 0xc7fff78HandleEINT2: .word 0xc7fff7cHandleEINT1: .word 0xc7fff80HandleEINT0: .word 0xc7fff84/* some parameters for the board *//*Interrupt Control*/INTPND:.long 0x01e00004INTMOD:.long 0x01e00008INTMSK:.long 0x01e0000cI_ISPR:.long 0x01e00020I_CMST:.long 0x01e0001c/*;Watchdog timer*/WTCON:.long 0x01d30000/*;Clock Controller*/PLLCON:.long 0x01d80000CLKCON:.long 0x01d80004LOCKTIME:.long 0x01d8000c/*;Memory Controller*/REFRESH:.long 0x01c80024/*;Pre-defined constants*/USERMODE:.long 0x10FIQMODE:.long 0x11IRQMODE:.long 0x12SVCMODE:.long 0x13ABORTMODE:.long 0x17UNDEFMODE:.long 0x1bMODEMASK:.long 0x1fNOINT:.long 0xc0_ISR_STARTADDRESS:.long 0xc7fff00 //GCS6:64M DRAM/SDRAMPLLCLK:.long 40000000PLLCON_DAT:.long ((2 << 0) + (3 << 4) +( 0x48<< 12))MASKALL:.long 0x07ffffff(2)44blcd.c#include <string.h>#include <malloc.h>#include "..\inc\option.h"#include "..\inc\def.h"#include "..\inc\44b.h"#include "..\inc\44blib.h"//#include "..\inc\lcd.h"#include "..\inc\lcdlib.h"#include "..\inc\44blcd.h"#include "..\inc\clock.h"#include "..\inc\plm.h"void clrscreen(void);void Lcd_MonoInit(void);extern int hour,min,sec,year,month,day,ye;#define frameBuffer1 0xc400000void LcdInit(void){Lcd_MonoInit();clrscreen();//displaylcd();display(10,4,3);display(10,4,6);}void Lcd_MonoInit(void){//160x240 1bit/1pixel LCD#define MVAL_USED 0rLCDCON1=(0)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_MON O<<12);// disable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL<<10)|(10<<21);//LINEBLANK=10 (without any calculation)rLCDSADDR1= (0x0<<27) | ( ((U32)frameBuffer1>>22)<<21 ) |M5D((U32)frameBuffer1>>1);// monochrome, LCDBANK, LCDBASEUrLCDSADDR2= M5D( (((U32)frameBuffer1+(SCR_XSIZE*LCD_YSIZE/8))>>1) ) | (MVAL<<21)|(1<<29);rLCDSADDR3= (LCD_XSIZE/16) | ( ((SCR_XSIZE-LCD_XSIZE)/16)<<9 );rLCDCON1=(1)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_MON O<<12);// enable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,}void clrscreen(void){int i,j;unsigned int *pbuffer;pbuffer =(U32*) frameBuffer1;for (i=0;i<4800/4;i++){pbuffer[i] =0;} //(0x0FFFFFFFF);}void DisplayRtc(void){ int ye;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;year=rBCDYEAR;month=rBCDMON;day=rBCDDAY;ye=0x20;display(ye>>4,3,1);display(ye&0xf,3,2);display(year>>4,3,3);display(year&0xf,3,4);display(month>>4,3,6);display(month&0xf,3,7);display(day>>4,3,9);display(day&0xf,3,10);display(hour>>4,4,1);display(hour&0xf,4,2);display(min>>4,4,4);display(min&0xf,4,5);display(sec>>4,4,7);display(sec&0xf,4,8);}void display(unsigned int Code,unsigned char line,unsigned char xdot) {unsigned short *pbuffer;unsigned char i;pbuffer =(U16*) frameBuffer1;for (i=0;i<16;i++){pbuffer[20*i+320*line+xdot]=((RTclock[Code].Data[i*2])+(RTclock[Code] .Data[i*2+1]<<8));}}void displaylcd(void){unsigned int *pbuffer,temp_data;int i;unsigned char *Buf;Buf= (unsigned char *)plm;pbuffer =(U32*) frameBuffer1;for(i = 0; i< (4800/4) ;i++){temp_data = (Buf[i*4+3] << 24) + (Buf[i*4+2] << 16) + (Buf[i*4+1] << 8) +(Buf[i*4]);pbuffer[i] = ~temp_data;Delay(10);}}// +++void DisStrhzk(char * hzku, int x1, int y1 ,unsigned char color,int charcount){ int i;int j;unsigned char hz;int xx,yy;char * hzk;unsigned char flag = 128;for(hzk=hzku,xx=x1,yy=y1;(hzk-hzku)<charcount;hzk+=32) {for(i=0;i<16;i++){hz=hzk[2*i];for(j=0;j<8;j++){if(hz & (flag>>j)){PutPixelColor(xx+j,yy+i,color);}}hz=hzk[2*i+1];for(j=0;j<8;j++){if(hz & (flag>>j)){PutPixelColor(xx+8+j,yy+i,color);}}}xx+=16;if(xx>=(SCR_XSIZE-16)){xx=x1;yy+=16;}}}(3)44blib.c/************************************************* NAME : 44BLIB.C *************************************************/#include "..\inc\44b.h"#include "..\inc\44blib.h"#include "..\inc\def.h"#include "..\inc\option.h"#include <stdarg.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <ctype.h>/************************* SYSTEM *************************/static int delayLoopCount=400;void Delay(int time)// time=0: adjust the Delay function by WatchDog timer.// time>0: the number of loop time// 100us resolution.{int i,adjust=0;if(time==0){time=200;adjust=1;delayLoopCount=400;rWTCON=((MCLK/1000000-1)<<8)|(2<<3); //1M/64,Watch-dog,nRESET,interrupt disablerWTDAT=0xffff;rWTCNT=0xffff;rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5); // 1M/64,Watch-dog enable,nRESET,interrupt disable}for(;time>0;time--)for(i=0;i<delayLoopCount;i++);if(adjust==1){rWTCON=((MCLK/1000000-1)<<8)|(2<<3);i=0xffff-rWTCNT; // 1count/16us?????????delayLoopCount=8000000/(i*64); //400*100/(i*64/200)}}/************************* PORTS ****************************/void Port_Init(void){ //CAUTION:Follow the configuration order for setting the ports. // 1) setting value// 2) setting control register// 3) configure pull-up resistor.//PORT A GROUP//GPA9 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0// 0, 1, 1, 1, 1, 1, 1, 1, 1,1rPCONA=0x1ff;rPDATA=0x0;//PORT B GROUP//GPB10 GPB9 nGCS3 nGCS2 nGCS1 GPB5 GPB4 nSRAS nSCAS SCLK SCKE// 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1rPCONB=0x1Cf;//PORT C GROUP//IISLRCK IISD0 IISDI IISCLK VD7 VD6 VD5 VD4 nXDACK1 nXDREQ1 GPC10 GPC11 TXD1 RXD1 GPC14 GPC15//All input// 11 11 11 11 11 11 11 11 11 11 0101 11 11 01 01rPDATC=0x8400;rPCONC=0x5F5FFFFF;rPUPC=0x33ff; //should be enabled//PORT D GROUP//VFRAME VM VLINE VCLK VD3 VD2 VD1 VD0// 10,10, 10, 10, 10, 10, 10, 10rPCOND=0xaaaa;rPUPD=0xff;//PORT E GROUP//PE0:FOUT, PE1:TxD0, PE2:RxD0, GPE3, GPE4, GPE5,GPE6,GPE7, CODECLK // 10 10, 10, 01 , 01, 01, 01, 01, 10rPCONE=0x2552b;rPUPE=0x0;rPDATE=0X60;//PORT F GROUP//IICSCL IICSDA nWAIT nXBACK0 nXDREQ0 GPF5 GPF6 GPF7 GPF8// 10 10 10 10 10 0 0 0 0rPCONF=0x2A;rPUPF=0x0;//PORT G GROUP//EINT0 EINT1 EINT2 EINT3 GPG4 GPG5 GPG6 GPG7// 0x0// 11 11 11 11 01 01 01 01rPDATG=0x0;rPCONG=0x55FF;rPUPG=0x0;rSPUCR=0x7; //pull-up disablerEXTINT=0x22222022; //All EINT[7:0] will be falling edge triggered. }/************************* UART ****************************/static int whichUart=0;void Uart_Init(int mclk,int baud){int i;if(mclk==0)mclk=MCLK;rUFCON0=0x0; //FIFO disablerUFCON1=0x0;rUMCON0=0x0;rUMCON1=0x0;//UART0rULCON0=0x3; //Normal,No parity,1 stop,8 bitrUCON0=0x245; //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or pollingrUBRDIV0=( (int)(mclk/16./baud + 0.5) -1 );//UART1rULCON1=0x3;rUCON1=0x245;rUBRDIV1=( (int)(mclk/16./baud + 0.5) -1 );for(i=0;i<100;i++);}void Uart_Select(int ch){whichUart=ch;}void Uart_TxEmpty(int ch){if(ch==0)while(!(rUTRSTAT0 & 0x4)); //wait until tx shifter is empty.elsewhile(!(rUTRSTAT1 & 0x4)); //wait until tx shifter is empty. }char Uart_Getch(void){if(whichUart==0){while(!(rUTRSTAT0 & 0x1)); //Receive data read return RdURXH0();}else{while(!(rUTRSTAT1 & 0x1)); //Receive data ready return rURXH1;}}char Uart_GetKey(void){if(whichUart==0){if(rUTRSTAT0 & 0x1) //Receive data ready return RdURXH0();elsereturn 0;}else{if(rUTRSTAT1 & 0x1) //Receive data readyreturn rURXH1;elsereturn 0;}}void Uart_GetString(char *string){char *string2=string;char c;while((c=Uart_Getch())!='\r'){if(c=='\b'){if( (int)string2 < (int)string ){Uart_Printf("\b \b");string--;}}else{*string++=c;Uart_SendByte(c);}}*string='\0';Uart_SendByte('\n');}int Uart_GetIntNum(void){char str[30];char *string=str;int base=10;int minus=0;int lastIndex;int result=0;int i;Uart_GetString(string);if(string[0]=='-'){minus=1;string++;}if(string[0]=='0' && (string[1]=='x' || string[1]=='X')) {base=16;string+=2;}lastIndex=strlen(string)-1;if( string[lastIndex]=='h' || string[lastIndex]=='H' ) {base=16;string[lastIndex]=0;lastIndex--;}if(base==10){result=atoi(string);result=minus ? (-1*result):result;}else{for(i=0;i<=lastIndex;i++){if(isalpha(string[i])){if(isupper(string[i]))result=(result<<4)+string[i]-'A'+10;elseresult=(result<<4)+string[i]-'a'+10;}else{result=(result<<4)+string[i]-'0';}}result=minus ? (-1*result):result;}return result;}void Uart_SendByte(int data){if(whichUart==0){if(data=='\n'){while(!(rUTRSTAT0 & 0x2));Delay(10); //because the slow response of hyper_terminal WrUTXH0('\r');}while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.Delay(10);WrUTXH0(data);}else{if(data=='\n'){while(!(rUTRSTAT1 & 0x2));Delay(10); //because the slow response of hyper_terminal rUTXH1='\r';}while(!(rUTRSTAT1 & 0x2)); //Wait until THR is empty.Delay(10);rUTXH1=data;}}void Uart_SendString(char *pt){while(*pt)Uart_SendByte(*pt++);}//if you don't use vsprintf(), the code size is reduced very much. void Uart_Printf(char *fmt,...){va_list ap;char string[256];va_start(ap,fmt);vsprintf(string,fmt,ap);Uart_SendString(string);va_end(ap);}/******************** S3C44B0X EV. BOARD LED **********************/ // -g-- a: data0 b: data1// a/_b_/f c: data2 d: data3 dp: data4// c/_d_/e dp e: data5 f: data6 g: data7void Led_Display(unsigned char data){unsigned char * ledbuffer = (unsigned char *)led_Address;switch(data){case 0:*ledbuffer=0x12;break;case 1:*ledbuffer=0x9F;break;case 2:*ledbuffer=0x31;break;case 3:*ledbuffer=0x15;break;case 4:*ledbuffer=0x9C;break;case 5:*ledbuffer=0x54;break;case 6:*ledbuffer=0x50;break;case 7:*ledbuffer=0x1F;break;case 8:*ledbuffer=0X10;break;case 9:*ledbuffer=0x14;break;case 0xa:*ledbuffer=0x8;break;case 0xb:*ledbuffer=0xC0;break;case 0xc:*ledbuffer=0x62;break;case 0xd:*ledbuffer=0x81;break;case 0xe:*ledbuffer=0x60;break;case 0xf:*ledbuffer=0x68;break;}}/************************* PLL ********************************/ void ChangePllValue(int mdiv,int pdiv,int sdiv){rPLLCON=(mdiv<<12)|(pdiv<<4)|sdiv;}(4)44btest.c#include <string.h>#include <ctype.h>#include<stdlib.h>#include "..\inc\option.h"#include "..\inc\44b.h"#include "..\inc\44blib.h"#include "..\inc\def.h"#include "..\inc\rtc.h"#include "..\inc\44blcd.h"#include "..\inc\lcdlib.h"#include "..\inc\shuizu.h"unsigned int (*frameBuffer1)[SCR_XSIZE/32];unsigned int (*frameBuffer4)[SCR_XSIZE/16];unsigned int (*frameBuffer16)[SCR_XSIZE/8];unsigned int (*frameBuffer256)[SCR_XSIZE/4];U8 High_Low( U8 x );void PutPixelColor(int x,int y,U8 c);void Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);#include "..\inc\asc.h"#include "..\inc\DC.h"#include "..\inc\option.h"#include "..\inc\def.h"#include "..\inc\44b.h"#include "..\inc\44blib.h"#include "..\inc\lcdlib.h"#include "..\inc\44blcd.h"#include "..\inc\ASII.H"void Main(void)int i;extern const unsigned char acBmp2_320_240_C256[];rSYSCFG=SYSCFG_8KB;Isr_Init();Port_Init();Uart_Init(0,115200);LcdInit(); //to avoid LCD damage.Uart_Select(0);Delay(0); //calibrate Delay()Uart_Printf("\nPlease check the VDDRTC!!!");Uart_Printf("\nRTC and WDT test");Rtc_Init();Uart_Printf("\nCLOCK DISPLAY ON LCD");while(1){Display_Rtc();DisStrhzk(sj,0,0,0x1f ,sizeof(sj));Lcd_C256_Bmp( 0, 0, 320, 240, acBmp2_320_240_C256 ) ;asm("nop");Delay(2000);}}void Isr_Init(void){U32 i;pISR_UNDEF=(unsigned)HaltUndef;pISR_SWI =(unsigned)HaltSwi;pISR_PABORT=(unsigned)HaltPabort;pISR_DABORT=(unsigned)HaltDabort;for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4){*((volatile unsigned *)i)=0xEA000000+0x1FFE;}rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disablerINTMOD=0x0; // All=IRQ moderINTMSK|=BIT_GLOBAL|BIT_EINT3; // All interrupt is masked. }void HaltUndef(void){Uart_Printf("Undefined instruction exception!!!\n");while(1);}void HaltSwi(void){Uart_Printf("SWI exception!!!\n");while(1);}void HaltPabort(void){Uart_Printf("Pabort exception!!!\n");while(1);}void HaltDabort(void){Uart_Printf("Dabort exception!!!\n");while(1);}void Lcd_C256_Bmp( U16 x0, U16 y0, U16 x1, U16 y1 , unsigned char bmp[] ) {int x, y ;int m = 0;for( y = y0; y < y1; y++ ) //画16色图片{for( x = x0; x < x1; x++ ){PutPixelColor( x, y, High_Low( bmp[m] ) );m++;}}}U8 High_Low( U8 x ){x = ( (x>>1)&0x1c ) | (x>>6) | (x<<5);return x ;}void PutPixelColor(int x,int y,U8 c){if(x>=0 && x<SCR_XSIZE && y>=0 && y<SCR_YSIZE)frameBuffer256[(y)][(x)/4]=( frameBuffer256[(y)][x/4] &~(0xff000000>>((x)%4)*8) )| ( (c)<<((4-1-((x)%4))*8) );}(5)rtc.c#include "..\inc\44b.h"#include "..\inc\44blib.h"#include "..\inc\rtc.h"void Rtc_Tick(void);void Rtc_display(void);void Wdt_Int(void);char *date[8] = {"","SUN","MON","TUE","WED","THU","FRI","SAT"}; volatile unsigned int sec_tick;int year,month,day,weekday,hour,min,sec;void Display_Rtc(void){int i;Uart_Printf("\nTyping any key to exit(press 1 will reset)!!!\n"); pISR_TICK=(unsigned)Rtc_display;rRTCCON = 0x01; // R/W enable, 1/32768, Normal(merge), No reset sec_tick=1;rINTMSK=~(BIT_GLOBAL|BIT_TICK);rTICINT = 127+(1<<7); //STARTi=Uart_GetIntNum();rINTMSK |= (BIT_GLOBAL | BIT_TICK);rRTCCON=0x0; //ENDif(i==1)Test_WDTimer();}void Rtc_display(void){rI_ISPC=BIT_TICK; //clear pending_bityear =0x2000+rBCDYEAR;month=rBCDMON;day=rBCDDAY;weekday=rBCDDATE;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2 x,%s,%2x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);DisplayRtc();}void Rtc_Init(void){int i,j;rRTCCON = 0x01; // R/W enable, 1/32768, Normal(merge), No resetUart_Printf("\nEnter Year(XX):");i=Uart_GetIntNum();rBCDYEAR = 0x2000+i+(i/10)*6;Uart_Printf("Enter month(XX):");i=Uart_GetIntNum();rBCDMON = i+(i/10)*6;Uart_Printf("Enter DAY:");i=Uart_GetIntNum();rBCDDAY = i+(i/10)*6; // SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7 Uart_Printf("Enter DATE((SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7):):");i=Uart_GetIntNum();rBCDDATE = i;Uart_Printf("Enter hours:");i=Uart_GetIntNum();rBCDHOUR =i+(i/10)*6;Uart_Printf("Enter minute:");i=Uart_GetIntNum();rBCDMIN=i+(i/10)*6;Uart_Printf("Enter sec:");i=Uart_GetIntNum();rBCDSEC=i+(i/10)*6;rRTCCON = 0x00; // R/W enable, 1/32768, Normal(merge), No reset }volatile int isWdtInt;/***************************************** Watch-dog timer test *****************************************/void Test_WDTimer(void){Uart_Printf("[WatchDog Timer Test]\n");rINTMSK=~(BIT_GLOBAL|BIT_WDT);pISR_WDT=(unsigned)Wdt_Int;isWdtInt=0;rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1<<2); // t_watchdog =1/66/128, interrupt enablerWTDAT=8448/4; // t_watchdog=1/(Prescalervalue+1)/Division_factorrWTCNT=8448/4;rWTCON=rWTCON|(1<<5); // 1/40/128,interruptwhile(isWdtInt!=10);rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1); // 1/66/128, reset enableUart_Printf("\nI will restart after 2 sec!!!\n");rWTCNT=8448*2;rWTCON=rWTCON|(1<<5); // 1/40/128,interruptwhile(1);rINTMSK=BIT_GLOBAL;}void Wdt_Int(void){rI_ISPC=BIT_WDT; //clear pending_bitUart_Printf("%d ",++isWdtInt);}六、实验结果超级终端显示LCD屏幕上的显示七、体会与收获经过一周的课程设计,我深刻的体会到动手实践的重要性。

相关文档
最新文档