嵌入式基本实验

合集下载

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 Cortex-M3处理器的开发板,开发板上运行的是嵌入式操作系统UCOS-II。

我们通过这个实验了解了嵌入式系统的工作流程,以及如何使用开发板进行程序编程和调试。

实验内容分为两个部分:第一个部分是编写一个简单的LED 闪烁的程序,第二个部分则是使用串口通信,将开发板和PC机进行连接,并通过PC机上的终端程序,实现与开发板之间的通信。

第一部分:LED闪烁程序在这个部分,我们首先学习了如何配置开发板上的GPIO(Generic Input/Output)接口,以控制LED的亮灭。

然后,我们编写了一个简单的程序,将LED的亮度不断地切换,使其看起来像在闪烁。

通过这个实验,我们学会了如何使用开发板上的寄存器,设置和读取相关的控制寄存器信息。

在程序编写的过程中,我们还学习了如何进行代码调试,以及如何使用JLink等开发工具对程序进行下载和烧录。

第二部分:串口通信在这个部分,我们使用了开发板上的UART(Universal Asynchronous Receiver/Transmitter)接口,将开发板和PC机进行连接。

之后,我们在PC机上安装了一个终端程序(TeraTerm),通过串口发送数据到开发板上,并将开发板返回的数据显示在终端窗口中。

通过这个实验,我们学习了如何使用UART接口进行数据的收发。

我们还学习了UCOS-II操作系统下的信号量使用方法,以及在多任务环境下,如何实现任务间的通信和同步。

总结在这个实验中,我们对嵌入式开发的基础知识进行了全面深入的了解,并通过实践的方式完成了两项实际应用场景的设计和实现。

我们大大提高了自己的嵌入式开发技能,同时也体验到了从开发到调试、测试、验证的整个流程,对我们日后的开发工作具有非常重要的启示意义。

嵌入式系统实验一 存储器实验

嵌入式系统实验一 存储器实验

嵌入式系统实验一存储器实验嵌入式系统实验一-存储器实验2022春季嵌入式系统课程实验报告《嵌入式系统》课程实验报告学生姓名:班级:讲师:记分及评价:项目满分:5分一、实验名称记忆实验二、实验目的了解S3C2410X处理器的内部存储空间分配;掌握存储区域配置方法;掌握对存储区进行读写访问的方法。

三、实验内容熟练使用命令脚本文件对arm存储控制器进行正确配置。

使用c语言编程,实现对ram的读写访问。

四、实验原理s3c2410a的存储器控制器提供访问外部存储器所需要的存储器控制信号,具有以下特性:●支持小/大端(通过软件选择)。

●地址空间:每个bank有128mb(总共有8个bank,共1gb)。

●除bank0只能是16/32位宽之外,其他bank都具有可编程的访问位宽(8/16/32位)。

●总共有8个存储器bank(bank0~bank7):一其中6个用于rom,sram等;一剩下2个用于rom,sram,sdram等。

●7个固定的存储器bank(bank0~bank6)起始地址。

●最后一个bank(bank7)的起始地址是可调整的。

●最后两个bank (bank6和bank7)的大小是可编程的。

● 所有内存库的访问周期都是可编程的。

● 可以通过插入外部等待来延长总线访问周期。

● 支持SDRAM的自刷新和断电模式。

《嵌入式系统》课程实验报告2021年春季五、实验结果超级终端上显示一下信息:六、练习编写程序对sram进行字节的读写访问。

#包括\voidmemory_test(void){因蒂;uint16tdata;intmemerror=0;uint16t*pt;2022春季嵌入式系统课程实验报告uart_printf(\0x00e00000,_ram_startaddress+0x00f00000);pt=(uint16t*)(_ram_startaddress+0x00e0000);//记忆书写while((uint32t)pt<(_ram_startaddress+0x00f00000)){*pt=(uint16t)pt;pt++;}//memoryreaduart_uuuprintf(\memorytest(%xh-%xh):rd\\n\uuu内存_uuuu起始地址+0x00e00000,uuu内存_uuu起始地址+0x00f00000);pt=(uint16t*)(_ram_startaddress+0x00e00000);而((uint32t)pt<(_ram_startaddress+0x00f00000)){data=*pt;如果(数据!=(uint16t)pt){memerror=1;uart_uPrintf(\break;}pt++;}if(memerror==0)uart_printf(\}。

嵌入式系统实验内容(全)

嵌入式系统实验内容(全)

实验一熟悉Linux开发环境一、实验目的1.熟悉Linux开发环境,学习Linux开发环境的配置和使用,掌握Minicom串口终端的使用。

2.学习使用Vi编辑器设计C程序,学习Makefile文件的编写和armv4l-unkonown-linux-gcc编译器的使用,以及NFS方式的下载调试方法。

3.了解UP-NETARM2410-S嵌入式实验平台的资源布局与使用方法。

4.初步掌握嵌入式Linux开发的基本过程。

二、实验内容本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。

创建一个新目录,并在其中编写hello.c和Makefile文件。

学习在Linux 下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。

下载已经编译好的文件到目标开发板上运行。

三、预备知识C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。

四、实验设备及工具(包括软件调试工具)硬件:UP-NETARM2410-S嵌入式实验平台、PC机Pentium 500以上, 硬盘10G以上。

软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境五、实验步骤1、建立工作目录[root@zxt smile]# mkdir hello[root@zxt smile]# cd hello2、编写程序源代码在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,我们在开发过程中推荐使用vim,用户需要学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。

Kdevelope、anjuta软件的界面与vc6.0 类似,使用它们对于熟悉windows环境下开发的用户更容易上手。

实际的hello.c源代码较简单,如下:#include <stdio.h>main(){printf(“hello world \n”);}我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:[root@zxt hello]# vi hello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:wq”保存并退出。

嵌入式开发环境搭建实验报告

嵌入式开发环境搭建实验报告

嵌入式开发环境搭建实验报告实验报告:嵌入式开发环境搭建实验目的:本实验旨在通过搭建嵌入式开发环境,使学生对嵌入式系统的开发流程和环境有更深入的了解,并能够进行简单的嵌入式开发实践。

实验材料:1. 一台支持嵌入式开发的电脑2. 开发板(如Arduino、Raspberry Pi等)3. USB数据线4. 开发软件(如Arduino IDE、Raspbian等)5. 软件安装包(如果需要单独安装)实验步骤:1. 准备开发环境软件:根据使用的开发板选择相应的开发软件,并从官方网站下载安装包。

将安装包保存到电脑上指定的路径。

2. 安装开发软件:运行安装包,按照安装向导的提示进行软件的安装。

完成安装后,打开软件,检查是否安装成功。

3. 连接开发板:使用USB数据线将开发板连接到电脑上,并确保连接良好。

4. 配置开发环境:打开开发软件,进入设置或配置界面。

根据使用的开发板,选择正确的开发板型号,并设置串行端口。

保存设置。

5. 编写并调试代码:使用开发软件创建一个新的代码文件或打开一个现有的示例代码文件。

编写嵌入式程序代码,并进行调试与测试。

根据需要,可以使用调试器、仿真器等进行代码调试。

6. 上传程序到开发板:完成代码编写和调试后,将程序通过USB数据线上传(烧录)到开发板上。

等待上传过程完成。

7. 运行程序:断开USB数据线,将开发板与目标设备(如传感器、电机等)连接。

开启目标设备的电源,观察目标设备的动作与反应。

8. 实验结果分析:根据实验结果,对比设计预期和实际观测,分析代码的执行情况,查找问题并提出解决方案。

实验总结:通过本实验,我们成功搭建了嵌入式开发环境,并进行了基本的嵌入式开发实践。

通过编写代码、调试和运行程序,我们能够控制目标设备进行特定的操作。

在实验过程中,我们对嵌入式系统的开发流程和环境有了更深入的了解,并具备了一定的嵌入式开发能力。

需要注意的是,在实际的嵌入式开发中,可能还需要考虑更多的因素,如硬件接口、通讯协议、资源管理等。

嵌入式实验4(中断处理程序设计)

嵌入式实验4(中断处理程序设计)

北华航天工业学院《嵌入式系统基础》课程实验报告实验名称编号:实验4 中断处理程序设计作者所在系部:计算机科学与工程系作者所在专业:计算机科学与技术作者所在班级:B09513作者学号:20094051329作者姓名:康建云教师姓名:李建义一、实验内容1.本实验涵盖实验手册《ARM嵌入式系统设计及接口编程实验教程》中的实验9 中断处理程序设计。

2.修改程序,使得当四个中断源中断时分别调用实验二跑马灯实验的实验内容第二项中编写的一个函数,即不同中断将控制四个跑马灯的闪烁顺序。

二、实验要求1.了解ARM处理器中断处理过程。

2.掌握S3C2440下进行中断编程的方法,包括中断设置、中断服务子程序的编写。

3.理解实验手册中的实验9的实验程序。

4.编程实现实验内容中第2项任务。

5.撰写实验报告描述实现上述个要求的情况。

三、实验思路在SinoSys-M3中,已经将EINT0、EINT1、EINT2、EINT19、EINT11作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4的这四个小按键相连。

在实验的过程中,在运行之后,按下开关板上这四个按钮,将触发处理器的四个外部中断,处理器转而去执行相应的中断服务程序,在中断服务程序中,向串口打印中断信息,并输出到开发主机的串口终端工具上。

因为key=1、key=3、key=5、key=7分别对应SW1、SW2、SW3、SW4四个按钮。

所以改程序时只需控制key值在不同值下的灯亮情况即可,修改程序实现跑马灯不同亮的次序并循环五次,所修改的程序如下:四、实验程序static void __irq Key_ISR(void){ int i; U8 key;if(rINTPND==BIT_EINT8_23) {ClearPending(BIT_EINT8_23);if(rEINTPEND&(1<<11)){ Uart_Printf("eint11\n");rEINTPEND |= 1<< 11; }if(rEINTPEND&(1<<19)) {Uart_Printf("eint19\n"); rEINTPEND |= 1<< 19; }}if(rINTPND==BIT_EINT0){//Uart_Printf("eint0\n");ClearPending(BIT_EINT0); } if(rINTPND==BIT_EINT2) {Uart_Printf("eint2\n");ClearPending(BIT_EINT2); }key=Key_Scan();if(key==1)//从左到右依次亮{ for(i=0;i<5;i++){ rGPFDAT=rGPFD AT&0x0F|0xE0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xD0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xB0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x70;Delay(2000); }}if(key==3) //从右到左依次亮{ for(i=0;i<5;i++){ rGPFDAT=rGPFD AT&0x0F|0x70; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xB0; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xD0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xE0;Delay(2000); }}if(key==5) //从左边两个到右边两个到两边的两个到中间两个依次亮{ for(i=0;i<5;i++){ rGPFDAT=rGPFD AT&0x0F|0xC0; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x30; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x90; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x60; Delay(2000); }}if(key==7) //从中间两个到两边两个到右边的两个到左边两个依次亮{ for(i=0;i<5;i++){rGPFDAT=rGPFDAT&0x0F|0x60; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x90; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x30; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xC0; Delay(2000); }}五、实验结果及实验问题分析1.实验结果更改代码后,分别按下sw1、sw2、sw3、sw4按钮,主函数调用keyscan.c文件,继而调用中断服务子程序,根据相应key==1、key==3、key==5、key==7,按实验要求分别实现了使四个灯的闪烁顺序依次为左1灯亮→左2灯亮-→左3灯亮-→左4个灯亮-→四个灯全灭的中断控制;左4灯亮→左3灯亮-→左2灯亮-→左1个灯亮-→四个灯全灭;左1、2灯亮→左3、4个灯亮-→两边两个灯亮-→中间两灯亮-→四个灯全灭;左3、4灯亮-→左1、2个灯亮-→中间两个灯亮-→两边两个灯亮-→四个灯全灭。

嵌入式系统设计(实验一)

嵌入式系统设计(实验一)

工业控制
嵌入式系统被广泛应用于工业 自动化领域,如生产线控制、 机器人控制等。
医疗设备
嵌入式系统可以实现医疗设备 的自动化控制和数据采集,如 医疗监护仪、输液泵等。
其他领域
嵌入式系统还可以应用于通信、 能源、环保等领域,发挥着越 来越重要的作用。
03
硬件平台搭建与配置
硬件平台选择
ARM开发板
传感器与执行器
汇编语言
针对特定硬件平台,使用汇编语言可 以实现更高效的代码执行和更精确的 硬件控制。
软件架构设计
分层架构
将系统划分为多个层次,每个层次负责特定的功能,降低系统复 杂性并提高可维护性。
事件驱动架构
通过事件触发相应的处理函数,实现模块间的解耦和异步通信。
微内核架构
将核心功能集中在微内核中,通过插件或模块扩展系统功能,提高 灵活性和可扩展性。
嵌入式系统设计(实验一)
• 实验目的与要求 • 嵌入式系统概述 • 硬件平台搭建与配置 • 软件设计与实现 • 系统测试与验证 • 实验总结与展望
01
实验目的与要求
实验目的
掌握嵌入式系统基本概念
01
通过实验了解嵌入式系统的定义、特点、应用领域等基本概念。
熟悉嵌入式开发环境
02
学习搭建嵌入式开发环境,包括硬件平台、操作系统、开发工
THANKS
感谢观看
提交实验报告
按时提交完整的实验报告,展示实验成果和 收获。
02
嵌入式系统概述
嵌入式系统定义
01
嵌入式系统是一种专用的计算机 系统,它被设计为控制、监视或 者辅助操作机器和设备的运行。
02
与通用计算机系统不同,嵌入式 系统通常被嵌入到特定的设备中 ,执行特定的任务,并且不需要 人工干预。

嵌入式设计实验报告

嵌入式设计实验报告

一、实验目的1. 熟悉嵌入式系统开发的基本流程和常用工具;2. 掌握嵌入式系统硬件资源的使用方法;3. 熟悉嵌入式系统软件开发的基本方法;4. 提高嵌入式系统设计能力。

二、实验内容1. 硬件平台:基于STM32F103系列单片机的开发板;2. 软件平台:Keil uVision5集成开发环境;3. 实验任务:设计一个简单的嵌入式系统,实现按键输入和LED灯控制功能。

三、实验原理1. 硬件原理:STM32F103系列单片机是一款高性能、低功耗的ARM Cortex-M3内核微控制器,具有丰富的片上外设资源,如GPIO、定时器、ADC等。

在本实验中,主要使用GPIO进行按键输入和LED灯控制。

2. 软件原理:嵌入式系统软件开发主要包括底层驱动程序、中间件和应用层。

底层驱动程序负责硬件资源的管理和配置;中间件提供系统服务,如通信、定时器等;应用层实现用户功能。

在本实验中,主要使用C语言编写程序,实现按键输入和LED灯控制功能。

四、实验步骤1. 硬件连接:将开发板上的按键和LED灯分别连接到单片机的GPIO端口;2. 软件编写:(1)创建项目:在Keil uVision5中创建一个新的项目,选择STM32F103系列单片机作为目标设备;(2)添加源文件:添加一个C语言源文件,用于编写主程序;(3)配置GPIO:在源文件中编写GPIO初始化代码,配置按键和LED灯的GPIO端口为输入和输出模式;(4)编写按键输入程序:编写按键扫描函数,用于检测按键状态,并根据按键状态控制LED灯;(5)编译程序:编译项目,生成目标文件;(6)下载程序:将编译好的程序下载到开发板;3. 实验验证:在开发板上运行程序,观察按键输入和LED灯控制功能是否正常。

五、实验结果与分析1. 实验结果:按键按下时,LED灯点亮;按键松开时,LED灯熄灭;2. 实验分析:通过编写程序,实现了按键输入和LED灯控制功能,验证了嵌入式系统开发的基本流程和常用工具。

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

1.实验六(流水灯)(1)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */ void delay(void){int i,j;for(i=0;i<=1000;i++)for(j=0;j<=1000;j++);}void main(void) {DDRA=0xff;//定义A口输出PORTA=0x00;//灯全灭for(;;) {delay();PORTA=0x55;//高电平灯亮delay();PORTA=~PORTA;}}(2)高位到低位逐个点亮#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void delay(){unsigned int i,j;for(i=0;i<=100;i++)for(j=0;j<=100;j++);}void main(void){DDRA=0xFF;PORTA=0x80;for(;;){delay();PORTA>>=1;//右移一位if(PORTA==0x00)//反复循环PORTA=0x80;}}低位到高位逐个点亮#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void delay(){unsigned int i,j;for(i=0;i<=100;i++)for(j=0;j<=100;j++);}void main(void){DDRA=0xFF;PORTA=0x01;for(;;){delay();PORTA<<=1;//左移一位if(PORTA==0x00)//反复循环PORTA=0x01;}}(3)与按键结合#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void main(void) {DDRA=0xff;DDRH=0x00;for(;;) {PORTA=PTH^0x0f;//按下时灯灭,取反后按键灯亮}}2.实验七(定时器延迟流水灯)(1)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void liangdeng(void){PORTA=~PORTA;while(TCNT!=0x0000);//计数到0停止}void main(void) {EnableInterrupts;TSCR1=0x80;//定时器使能TSCR2=0x07;//128分频,计数频率=时钟频率/分频DDRA=0xff;//A口输出PORTA=0x55;for(;;){liangdeng();}}(2)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void liangdeng(void){while(TCNT!=0x0000);PORTA<<=1;if(PORTA==0x00)PORTA=0x01;}void main(void) {EnableInterrupts;TSCR1=0x80;//定时器使能TSCR2=0x05;//128分频DDRA=0xff;//A口输出PORTA=0x01;for(;;){liangdeng();}}3.实验八(数码管显示连续4位)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */ Const unsigned char DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7b,0x71}; const unsigned char WeiMa[]={0xf7,0xfb,0xfd,0xfe};void delay(void){int i,j;for(i=0;i<=100;i++)for(j=0;j<=100;j++);}void display(unsigned char wei,int data){PTP=WeiMa[wei-1];PTT=DuanMa[data];delay();}void dis(int time,int a,int b,int c,int d){int i;for(i=1;i<=time;i++){display(1,a);display(2,b);display(3,c);display(4,d);}}void main(void){EnableInterrupts;DDRP=0xff;DDRT=0xff;for(;;){dis(20,6,7,8,9);dis(20,1,2,3,4);}}4.实验九(定时器延迟数码管)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */const unsigned char DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7b,0x 71};const unsigned char WeiMa[]={0xf7,0xfb,0xfd,0xfe};void SET_PLL(void) //总线时钟频率为4MHz{CLKSEL=0x00;PLLCTL=0xe1;SYNR=3;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)=8MHz//实验板上OSCCLK=4MHzREFDV=3;PLLCTL=0x60;asm NOP;asm NOP;asm NOP;while((CRGFLG&0x08)==0);//等待时钟校正同步CLKSEL=0x80;//选定PLL时钟,Bus Clock=PLLCLK/2=4MHz}void display(unsigned char wei,int data){PTP=WeiMa[wei-1];PTT=DuanMa[data];while(TCNT!=0x0000);}void dis(int time,int a,int b,int c,int d){int i;for(i=1;i<=time;i++){display(1,a);display(2,b);display(3,c);display(4,d);}}void main(void){SET_PLL();EnableInterrupts;TSCR1=0x80;TSCR2=0x01;DDRP=0xff;DDRT=0xff;for(;;){dis(20,6,7,8,9);dis(20,1,2,3,4);}}5.实验十(AD连续采样求平均值送数码管显示)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */const unsigned char duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff,0x88,0x83,0xc6,0XA1,0x86,0x8e,};//A~F段码,dp不同对应的高低电位不同const unsigned char weima[]={0xfe,0xfd,0xfb,0xf7};//PORTP口对应的位码,低电平有效unsigned int i,result,d;int ADdata[8];//8次转换结果void SET_PLL(void) //总线时钟频率为4MHz{CLKSEL=0x00;PLLCTL=0xe1;SYNR=3;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)=8MHz//实验板上OSCCLK=4MHzREFDV=3;PLLCTL=0x60;asm NOP;asm NOP;asm NOP;while((CRGFLG&0x08)==0);//等待时钟校正同步CLKSEL=0x80;//选定PLL时钟,Bus Clock=PLLCLK/2=4MHz}void delay()//延迟设置{int i,j;for (i=0;i<100;i++)for (j=0;j<100;j++);}void AD_init(void)//AD初始化{A TD0CTL2=0x80;//使能AD,正常清除标志A TD0CTL3=0x08;//单次转换,非FIFO,完成转换后继续A TD0CTL4=0x25;//10精度,4AD转换周期总线时钟频率的十二分之一A TD0CTL5=0xa7;//10精度,右对齐,无符号数据位,模拟量输入通道7A TD0DIEN=0x00;//输入允许}void dis(unsigned int wei,unsigned int data){PTP=weima[wei-1];//PORTP口对应位码PTT=duanma[data];//PORTT口对应段码delay();//送一个数码管的段码位码,延迟后送另一位数码管}void display(int a,int b,int c,int d) {for(;;){dis(1,a);//动态显示,四个数码管几乎同时点亮dis(2,b);dis(3,c);dis(4,d);}}void AD(void){for(i=0;i<8;i++){while(!A TD0STA T0_SCF);//每次采样一个通道,循环采样8次{d=A TD0DR0;A TD0STA T0_SCF=1;//清标志位ADdata[i]=d;}}}void lvbo(void) {int i,j,temp;d=0;for(i=0;i<7;i++)for(j=0;j<i;j++){if(ADdata[j]>ADdata[j+1]){temp=ADdata[j];ADdata[j]=ADdata[j+1];//冒泡排序法,从小到大排序ADdata[j+1]=temp;}}for(i=2;i<=5;i++){d+=ADdata[i];//排序后滤波,取中间几位并求平均值}result=d>>2;}void main(void){SET_PLL(); //锁相环AD_init();//AD初始化EnableInterrupts;DDRP=0xff;//P口T口均为输出DDRT=0xff;for(;;){AD();//8次转换结果存数组lvbo();//排序求平均display(result/1000,(result/100)%10,(result/10)%10,result%10);//数码管十进制显示}}6.综合(AD与秒表计时切换)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */unsigned char duanma[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E Funsigned char weima[4]={0xfe,0xfd,0xfb,0xf7};unsigned int clock1,seconds,result,time,key,b;unsigned int d1,d2,d3,d4;unsigned int T1,T2,T3,T4;int ADdata[8];//8次转换结果void display(unsigned int time,unsigned int a1,unsigned int a2,unsigned int a3,unsigned int a4); void dis(unsigned int wei,unsigned int shuju);void SET_PLL(void);void AD(void);void lvbo(void);void button(void);void Delay(unsigned int i){while(i--);}void main(void){/* put your own code here */SET_PLL();RTICTL = 0x7e;//4M/15*2^16 = 4HzCRGINT = 0x80;clock1=0;key=0;EnableInterrupts;A TD0CTL2=0xc0;//使能AD,快速清除标志A TD0CTL3=0x08;//1次转换,非FIFO,完成转换后暂停A TD0CTL4=0x45;//10精度,8AD转换周期总线时钟频率的十二分之一A TD0CTL5=0xa7;//10精度,右对齐,无符号数据位,模拟量输入通道7 A TD0DIEN=0x00;//输入允许*/DDRT=0XFF;DDRP=0XFF;DDRH=0x00; //设置数码管输出IO均为输出for(;;){AD();//8次转换结果存数组lvbo();//排序求平均if(key%2==0)display(2,T1,T2,T3,T4);elsedisplay(2,d1,d2,d3,d4);//button();//display(2,T1,T2,T3,T4);//AD转换数码管十进制显示//display(2,d1,d2,d3,d4);//数码管十六进制显示}for(;;){}}void AD(void){int i;for(i=0;i<8;i++){while(!A TD0STA T0_SCF);{ADdata[i]=A TD0DR0;}}}void lvbo(void) {int i,j,temp;int sum=0;for(i=0;i<7;i++)for(j=0;j<i;j++){if(ADdata[j]>ADdata[j+1]){temp=ADdata[j];ADdata[j]=ADdata[j+1];//冒泡排序法,从小到大排序ADdata[j+1]=temp;}}for(i=2;i<=5;i++){sum+=ADdata[i];//排序后滤波,取中间几位并求平均值}result=sum>>2;T1=result/1000,T2=(result/100)%10,T3=(result/10)%10,T4=result%10;}void display(unsigned int time,unsigned int a1,unsigned int a2,unsigned int a3,unsigned int a4) {int i;for(i=1;i<=time*250;i++){dis(1,a1);dis(2,a2);dis(3,a3);dis(4,a4);}}void dis(unsigned int wei,unsigned int shuju){PTT=duanma[shuju];PTP=weima[wei-1];Delay(100);}void SET_PLL(void) //总线时钟频率为4MHz{CLKSEL=0x00;PLLCTL=0xe1;SYNR=3;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)=8MHz//实验板上OSCCLK=4MHzREFDV=3;PLLCTL=0x60;asm NOP;asm NOP;asm NOP;while((CRGFLG&0x08)==0);//等待时钟校正同步/*注意:有一个实验板,在设置锁相环时锁相环频率稳定不下来,这个while循环一直等待,退不出来。

相关文档
最新文档