基于ARM9单片机多功能数字电压表的设计_第1页
基于ARM9单片机多功能数字电压表的设计_第2页
基于ARM9单片机多功能数字电压表的设计_第3页
基于ARM9单片机多功能数字电压表的设计_第4页
基于ARM9单片机多功能数字电压表的设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学号 2012051448 数字电压表的设计( 2012 级本科)课程名称: 嵌入式Linux应用开发 学 院: 信息工程学院 专 业: 计算机科学与技术 班 级: 2012级(4)班 作者姓名: 张 倩 完成日期: 2015 年 6 月 25 日 摘 要数字电压表是诸多数字化仪表的核心与基础,在日常维修、教学和科研中,电压表是不可缺少的。本文以ARM9-S3C2440单片机为基础设计出一种结构简单、工作可靠、灵活性好的多功能数字电压表。本文设计的数字电压表主要包括两部分:硬件电路的分析及软件程序的设计。基于单片机的数字电压表的硬件系统、软件系统的设计原理及具体实现方案作以详细介绍。其中,在软

2、件部分,大致介绍了软件设计所使用的编程语言和编程思路,及运行期间出现的问题及解决方案。在硬件部分,详细分析了设计原理、使用方法和功能,同时,对各部分接口电路作大致介绍。该设计主要由四个模块组成:A/D转换模块,数据处理模块,显示模块及各驱动控制模块组成。设计过程中对单路的选择进行了扩展研究,提出了通过按键控制实现多路选择的新思路,使其具有更大的发展空间,可用性更大,更能满足实际生活的需要。本设计总体实现基于ARM9-S3C2440平台实现AD转换,并设计显示屏背景,在TFT LCD屏上显示电压值及AD转换的高测量精度的数字值,同时超出一定电压值时具有报警功能,并且能实现多路测量,可通过按键选择

3、某路通道等多功能的数字电压表。 关键词:数字电压表,A/D转换,LCD屏,多路,键盘控制 目录第1章 需求分析3§1.1 设计目的3§1.2 系统设计3§1.3 设计的功能要求4§1.4 应用软件简介5第2章 硬件电路设计分析6§2.1 单片机模块6§2.2 ADC数模转换6第3章 软件设计8§3.1 软件设计总流程图8§3.2 A/D转换模块9§3.3 显示模块11§3.4 键盘输入模块15§3.5 报警模块16§3.6 LED灯闪亮模块16§3.7 字符取模模块

4、17结论19参考文献20第1章 需求分析§1.1 设计目的通过制作简易的数字电压表,加深对所学专业知识的认识,提高分析,解决工程实际问题的能力,提高对单片机的应用能力,提高收集文献,资料的能力,从而达到综合运用所学的专业知识进行电子产品设计,制作与调试的能力。这个课题的目的和意义在于使自己掌握对数字电压表的理解,自己动手设计数字电压表,它可以广泛的应用于电压测量, DVM广泛应用于测量领域每期测量的准确度和可信度取决于它的主要性能和技术指标。所示我们要学习和掌握如何设计DVM就显得十分重要。§1.2 系统设计本文设计的数字电压表主要包括两部分:硬件电路的分析及软件程序的编程

5、。基于单片机的数字电压表的硬件系统、软件系统的设计原理及具体实现方案作以详细介绍。1 在硬件电路部分,大致介绍了数字电压表的设计原理、使用方法和功能。同时,对各部分接口电路作大致介绍。该设计主要由四个模块组成:A/D转换模块,数据处理模块,显示模块,键盘控制模块组成。2 在软件部分,较为详细的讨论了本设计软件所使用的编程语言和编程思路,及运行期间出现的问题及解决方案,扩展部分在现有功能的电压表基础上,发现新的更好的思路。软件的程序可采用C语言或汇编,这里主要采用C语言,详细的设计思路在后面介绍。3 总体上,设计过程中对单路的选择进行了扩展研究,提出了通过按键控制实现多路选择的新思路,使其具有更

6、大的发展空间,可用性更大,更能满足实际生活的需要。4 详细如下图2-1系统框图所示。 图2-1 系统框图§1.3 设计的功能要求本课题采用模-数(A/D)转换的方法实现电压数字化测量,设计的功能要求满足下述五点:1. 以ARM9-S3C2440单片机为核心器件,组成一个多功能的直流数字电压表,在该平台上实现了AD转换。2. 设计显示屏背景,在TFT LCD屏上显示电压值及AD转换的数字值,至少能过显示两位小数。3. 超出一定电压值时具有报警功能,如:LED灯点亮,蜂鸣器循环报警,屏幕上方出现红色警报图标(正常情况下是绿色)等,以便及时提醒用户。4. 实现多路模拟量输入,能过测量0-5

7、V之间的直流电压值。5. 用户可通过按键选择某路测量等多功能的数字电压表。§1.4 应用软件简介本课题中运用到多种软件,常用的有keil软件,J-LINK调试器软件,RGB颜色查询软件,字符取模软件,及图像取模软件等多款软件,要求熟练Keil,取模软件的使用。1.4.1 Keil软件的使用Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(Vision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等

8、操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果使用C语言编程,那么Keil几乎就是的不二之选(目前在国内只能买到该软件、而买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍.C51工具包的整体结构,其中Vision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由L

9、IB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。第2章 硬件电路设计分析 §2.1 单片机模块2.1.1 S3C2440单片机原理图 S3C2440A是三星公司的16/32位精简指令集(RISC)微处理器。三星公司的S3C2440A为手持设备和普通应用提供了低功耗和高性能的小型芯片微控制器的解决方案。S3C2440A基于ARM920T核心,0.13µ

10、m的CMOS标准宏单元和存储器单元。低功耗,简单,精致,且全静态设计特别适合于对成本和功率敏感型的应用。它采用了新的总线架构如先进微控制总线构架(AMBA)。 1. S3C2440单片机实物图 图3-1 S3C2440单片机 包括:串口线,JLINK,大排线,转接小板,小排线,USB转串口线,电源,开发板,JLINK连接线,网线等组成。§2.2 ADC数模转换2.2.1 S3C2440ADC的主要特性 A/D转换,又称为模数转换,是将模拟信号转换为计算机能够处理的数字信号。S3C2440集成了8通道10位CMOS A/D转换器。S3C2440的CMOS模拟数字转换器ADC可

11、以对8通道模拟输入信号进行循环检测,S3C2440的ADC和触摸屏公用一个ADC转换器。2.2.2 ADC转换原理ADC是一种将模拟信号转化为数字信号的方法,一般要经过采样、保持、量化、编码4个步骤。在实际电路中,有些过程是合并进行的,如采样和保持,量化和编码在转换过程中时同时实现的。由奈奎特采样定理可知,当采样频率大于模拟信号中最高频率的2倍时,采样值才能不失真地反映原来模拟信号。第3章 软件设计§3.1 软件设计总流程图 1. 总体程序流程图,如图4-1所示 图4-1软件设计总流程图 §3.2 A/D转换模块3.2.1 A/D转换流程图A/D转换子程序用来控制对输入的模

12、块电压信号的采集测量,并将对应的数值存入相应的内存单元。首先系统初始化,启动A/D转换,采集A/D转换值,进行数据转换,转换结束,显示到屏幕上,若屏幕中没有显示出数值,则返回重新调用显示函数,否则用户读出示数。其转换流程图如图4-2所示。 图4-2 A/D转换流程3.2.2 A/D接口设计 ReadAdc()函数的功能是读取指定的ADC模拟通道,得到十位十进制的ADC转换的结果。分为以下几步:1. 设置分频系数;2. 预分频使能,设置分频值preScaler = 1;3. 启动ADC转换;等待ADC启动完成,开始转换ADCCON0自动变成0;4. 等待ADC转换结果;5. 返回10位二进制AD

13、转换结果。具体源程序: unsigned short ReadAdc(int ch)/*设置分频系数*/ preScaler = 50000000/2500000 -1; /*第一步:预分频使能,设置分频值preScaler=19,选择读取通道 ch*/ rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);/setup channel/*第二步:启动ADC转换*/ rADCCON|=0x1; /*等待ADC启动完成,开始转换ADCCON0自动变为0*/ while(rADCCON & 0x1);/*第三步:等待ADC转换

14、结束*/ while(!(rADCCON & 0x8000);/*第四步:返回10位二进制AD转换结果*/ return ( (int)rADCDAT0 & 0x3ff );/0011 1111 1111 §3.3 显示模块3.3.1 显示模块流程图通过LCD控制器可产生LCD驱动器所需要的控制信号来控制TFT屏。先对系统 rGPCUP,rGPCCON,rGPDUP寄存器进行初始化,启动rGPDCON 既LCD像素数据输出端口,再启动帧缓冲地址寄存器RLCDSADDR1RLCDSADDR3,设置LCD电源管脚开电源使能即可。详细流程图如下4-3所示: 图4-3 显示模

15、块流程图3.3.2 显示模块接口设计该部分主要完成数据的显示功能。在硬件设计中,显示电路直接与单片机的数据I/O口进行连接。该模块主要包括端口初始化和数据显示两部分,下面是对LCD正常运行时所需程序的编写。void LCD_Init(void) /*GPCUP-上拉功能禁用寄存器,共16位,每位对应一个引脚 0-启用,1-禁用设置C端口所有引脚均用作上拉功能*/rGPCUP = 0x00000000;/*GPCCON-C端口引脚功能配置寄存器,共32位,每两位配置 完 成 完成一个引脚的配置00-输入01-输出10-不同引脚的定义不同11-保留0xaaaa02a9-0b1010 1010 10

16、10 1010 0000 0010 1010 1001对应以上关系可得到具体每个引脚的配置*/ rGPCCON = 0xaaaa02a9; /*GPDUP-上拉功能禁用寄存器,共16位,每位对应一个引脚0-启用,1-禁用设置D端口所有引脚均用作上拉功能*/ rGPDUP = 0x00000000;/*GPDCON-C端口引脚功能配置寄存器,共32位,每两位配置完成 完成一个引脚的配置,Initialize VD15:800-输入01-输出10-VD8VD2311-保留0xaaaa02a9-0b1010 1010 1010 1010 1010 1010 1010 1010对应以上关系可得到具体每

17、个引脚的配置*/ rGPDCON=0xaaaaaaaa;/* LCDCON1 - LCD控制寄存器1CLKVAL_TFT<<8 - 设置时钟信号MVAL_USED<<7 - 设置计时频率PNRMODE_TFT<<5 - 选择显示模式 (BPPMODE_TFT<<1 - 选择bpp模式*/ rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_ TFT<<5)|(BPPMODE_TFT<<1)|0; /*LCDCON2 - LCD控制寄存器2 VBPD (1

18、1) - 垂直同步信号的后肩 LINEVAL (LCD_HEIGHT-1) - 横向显示尺寸 VFPD (3) - 垂直同步信号的前肩 VSPW (0) - 垂直同步信号的脉宽(X35屏只能是该值)*/ rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);/*LCDCON3 - LCD控制寄存器3 HBPD (68) - 水平同步信号的后肩 HOZVAL (LCD_WIDTH-1) - 纵向显示尺寸 HFPD (1) - 水平同步信号的前肩*/ rLCDCON3=(HBPD<<19)|(HOZVA

19、L<<8)|(HFPD);/*LCDCON4 - LCD控制寄存器4 HSPW (0) - 水平同步信号的脉宽*/ rLCDCON4=(HSPW); /*LCDCON5 - LCDCON控制寄存器5 1<<11 - 选择bpp输出视频格式为 5:6:5 0<<7 - 选择视频数据脉冲的极性为1(反转) INVVCLK 1 /像素值在VCLK下降沿有效 INVVLINE 1 /翻转HSYNC信号 INVVFRAME 1 /翻转VSYNC信号 INVVDEN 1 /翻转VDEN信号极性 PWREN 1 /使能PWREN信号 BSWP 0 /颜色数据字节不交换 H

20、WSWP 1 /颜色数据半字不交换(24BPP时不用交换)*/ rLCDCON5=(1<<11)|(INVVCLK<<10)|(INVVLINE<<9)|(rLCDCON 5=(1<<11)|(INVVCLK<<10)|(INVVLINE<<9)|(INVVFRAME<<8) |(0<<7)(INVVDEN<<6)|(PWREN<<3)|(BSWP<<1)|(HWSWP); /*如果是24BPP时M5D( (U32)LCD_BUFFER+(LCD_WIDTH*LC

21、D_HEIGH T*4) >>1 );因为24BPP一个字占4字节*/ rLCDSADDR1=(U32)LCD_BUFFER>>22)<<21)| M5D(U32)LCD_BUFFER>>1); /*如果是24BPP时是LCD_WIDTH*4/2 因为24BPP一个字占4字节*/ rLCDSADDR2=M5D( (U32)LCD_BUFFER+(LCD_WIDTH*LCD_ rHEIGHT*2)>>1 ); rLCDSADDR3=LCD_WIDTH*2/2; /*MASK LCD Sub Interrupt LCD里应用一般用不到中断

22、,关掉*/ rLCDINTMSK|=(3); / Disable LPC3480 rTCONSEL = 0; / Pull-up disable rGPGUP=rGPGUP&(1<<4)|(1<<4); /*GPG4=LCD_PWREN (设GPG4为LCD电源管脚)*/ rGPGCON=rGPGCON&(3<<8)|(3<<8); rGPGDAT = rGPGDAT | (1<<4) ; /10000 rLCDCON5=rLCDCON5&(1<<3)|(1<<3); / PWREN(开

23、电源使能) /*INVPWREN(电源使能信 号不反转)*/ rLCDCON5=rLCDCON5&(1<<5)|(0<<5); rLCDCON1|=1; /开启LCD显示这句不能少§3.4 键盘输入模块3.4.1 键盘输入流程图 键盘输入电路主要是用来输入数据,从而实现人机交互。该系统的键盘设计是采用S3C2440芯片自带的key管脚。图4-4 键盘输入流程图3.4.2 键盘输入接口该模块主要包括对寄存器初始化部分;该部分主要完成端口的初始化和通道的初始化。void key_init() /键盘输入接口初始化 /* 0xffffff00;使F端口的前4

24、个引脚用作输入, 以 以便按键输入*/ rGPFCON &= 0xff; int get_rout() /获取检测电压的通道 if( (rGPFDAT &(1<<0) = 0 ) /按下key1时F端口0引脚置0 return 0; /返回0通道if( (rGPFDAT&(1<<1) = 0 ) /按下key2时F端口1引脚置0 return 1; /返回1通道return -1; /返回-1error§3.5 报警模块报警处埋模块相当简单,这里只是简单的在一个I/O口上送出数据来驱动蜂鸣器,该模块包括初始化端口和数据产生两个部分,下面

25、就各个部分给出具体的程序代码到。初始化部分:该部分将输出端口设置为输出方向。程序代码如下:void beep_init()/启动蜂鸣器 /*0100 将B端口第二个引脚用作输出,以控制蜂 鸣器*/rGPBCON |= 0X4; rGPBDAT |= (1<<1);/关掉蜂鸣器 数据产生部分:该部分主要是在输出端口产生数据,设置低电平蜂鸣器将报警,高电平蜂鸣器蜂关闭。下面给出代码,#define BEFP_ON( ) (rGPBDAT &= (1<<1) /启动蜂鸣器#define BEEP_OFF( ) (rGPBDAT |= (1<<1) /关闭蜂

26、鸣器在上面的程序中,通过宏函数实现的。§3.6 LED灯闪亮模块LED灯的闪亮处埋模块同报警模块同理也相当简单,同样只是简单的在一个I/O口上送出数据来驱动LED灯,该模块包括初始化端口和数据产生两个部分,下面就各个部分给出具体的程序代码。初始化部分:该部分将输出端口设置为输出方向。程序代码如下:void led_init()rGPFCON &= 0xffff;/GPFCON所有位置0rGPFCON |= 0x5500; /0101 0101 0000 0000 ,F端口4到7引脚用作输出 rGPFDAT = 0xFF;/引脚电平置1,关掉led灯 数据产生部分:该部分主要是

27、在输出端口产生数据,设置低电平LED灯闪亮,高电平LED灯关闭。下面给出代码, rGPFDAT &= 0xf0; /打开所有的LED灯 rGPFDAT |= 0xf0; /关闭所有的LED灯§3.7 字符取模模块Draw_Text35x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch)该函数为字符取模函数,函数参数的意义不同,其中x表示的是横坐标数值,y表示的是纵坐标数值,color表示的是文字的颜色,backColor为背景颜色,常见的有全红0xf800,全绿0x07c0,全蓝0x001f,黑色0x0

28、,白色0xffff:等,ch表示字模数组。函数实现代码如下:void Draw_Text35x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch) unsigned short int i,j; /定义变量 unsigned char mask,buffer; for(i=0;i<35;i+) mask=0x80; /掩码 buffer=chi*3; /提取一行的第一个字节 for(j=0;j<8;j+) if(buffer&mask) PutPixel(x+j,y+i,color); /为画笔上色 else PutPix

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论