智能数字万用表的设计
《数字万用表设计》课件

小巧轻便,可充电,适用于小电路维修
台式数字万用表
交直流通用,精度高,常用于实验室和工厂
专用数字万用表
针对一些特定的测量任务而设计的
数字万用表的构成和原理
构成
熔丝、旋转开关、电池、电源电路等
原理
根据欧姆定律、基尔霍夫定理等,通过电路分析获 得电荷和电流信息
数字万用表的准确性和精度
数字万用表的准确性和精度是评价其好坏的重要指标,精度取决于数码显示 的位数和转换电路的噪声程度。准确性受到测量误差、校准及环境因素等影 响。
数字万用表的常见误差和解决方法
1 电压误差
应选择合适量程,保证电源稳定
3 温度误差
保持恒温环境,适当预热电路
2 电流误差
正确接入测试电路,选择合适的保险丝
4 其他误差
合理放置,合理使用,定期校准
数字万用表的测量范围和分辨率
电压
范围:200mV-1000V,分辨率: 0.1mV-1V
电流
范围:200μA-10A,分辨率: 0.1μA-10mA
电阻
范围:200Ω-200MΩ,分辨率: 0.1Ω-100KΩ
数字万用表的通用性和适用范围
数字万用表通用性强,可用于工业自动化、实验室测量、电路调试等多种场合。适用于电子、通信、计算机、 机械、化工等领域。
数字万用表的常见测量方法
1
直流电压测量
将旋钮拨至VΩmA档位,将电表红表笔连接正极,黑表笔连接负极进行测量
数字万用表与智能化科技的融 合测量
数字万用表将与智能家居、智能汽车、智能医疗等领域紧密结合,呈现多种 形态和使用场景。
ቤተ መጻሕፍቲ ባይዱ
数字万用表的研发和生产技术 创新
语音数字万用表

语音数字万用表的设计姓名:崔文娟学号:201010008专业:电子科学与技术1、概述万用电表是测量基本电气量的有力工具,数字式万用电表又具有操作简单、使用方便等优点倍受电气工程师的喜爱。
本文采用的是凌阳SPCE061A单片机实现语音数字万用表的设计,设计一款能“说话”的智能型数字式万用电表。
该数字式万用电表可以将测量值直接告诉测量者。
语音发声功能弥补了以往产品人机交互界面单调乏味的缺陷,具有直观、实用、安全的特点。
语音数字万用电表基本技术功能要求:(1)具有语音发声功能;(2)具有测量直流电压功能;(3)具有测量交流电压功能;(4)具有测量直流电流功能;(5)具有测量交流电流功能;(6)测量电阻功能;(7)测量二极管好、坏功能;(8)测量三极管放大倍数功能;(9)测量电容功能。
技术指标:(1)正常工作电压范围: 9V(使用9V叠层电池);(2)体积: 190mm×88. 5mm×27. 5mm(长×宽×高);(3)电路工作环境:工作温度范围: 0~40℃;储存温度范围: - 10~50℃;相对湿度:小于80%。
2系统设计2. 1系统的硬件设计将待测量转换为电压量送至SPCE061A进行测量。
系统电路主要由DCV、DCA、ACV、ACA、CAP、HFE、电阻测量电路、二极管测量电路、语音播放电路、自动关机电路和LCD显示电路组成,结构框图如图1所示。
图1系统硬件结构框图2. 2系统的软件设计整个系统输入包括:初始化、LCD显示、语音播放、数值的计量等几个主要的模块,流程如图2所示。
系统首先进行初始化,接着进入主循环。
主循环包括以下操作: 通过判断转换开关的位置来判断即将测量的内容; 测量数值、并将测量值通过LCD显示并伴有语音提示; 响应中断;系统初始化:系统初始化包括:端口初始化、中断初始化、时钟初始化。
端口初始化:设置对应的端口状态为输入或输出。
打开2Hz、256Hz和TimerA中断: 2Hz用来进行计算时间, 256Hz用于LCD显示, TimerA用于语音播放。
智能数字万用表的设计

智能数字万用表的设计(总15页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--湖北经济学院电子设计大赛设计报告课题名称:数字智能万用表指导教师:汪成义王金庭刘光然学生姓名:汪凡夏晶晶张薇学生院系:电子工程系时间: 2011年7月智能数字万用表一 设计目的1、培养综合性电子线路的设计能力。
2、掌握综合性电子线路的安装和调试方法。
3、学会基于M3进行软件设计。
二 任务及要求 1、任务设计并制作一台具有直流电压、交流电压和电阻测量功能的智能数字万用表。
示意图如图1所示。
图1 智能数字万用表示意图2、要求1、基本要求(1)213数码显示,最大读数1999。
(2)直流电压量程:、2V 、20V ,精度为%1个字;输入阻抗≥10MΩ。
(3)交流电压量程:、2V 、20V ,精度为%2个字(以50 Hz 为 基准);输入阻抗≥10MΩ;频率响应范围为40~1000Hz 。
(4)电阻量程: 2Ω、200Ω、2M Ω,精度%2个字。
2、发挥部分(1)直流电压测量具有自动量程转换功能。
(2)具有“自动关机”功能,即在测量过程中,若1分钟内无任何键按下,仪器会自动关闭显示并处于低功耗状态;再按任意键,仪器能返回“自动关机”前的工作状态。
(3)具有相对误差(△%)测量功能,即在进行某项测量时,首先通过示屏提示用户从键盘输入标称值,一旦输入确认后,仪器能显示相对误差中的△值。
(4)其它。
三总体设计方案1、系统模块图根据题目要求和本系统的设计思想,系统主要包括图2所示的模块:图2系统模块框2、总体方案分析若被测量为电阻,则须经过电阻测量电路将电阻量转化为直流电压量后才可以进入量程自动转换电路;若被测量为直流电压,则可以直接进入量程自动转换电路;若被测量为交流电压,则需要先经过交直流转换电路将交流电压转换为直流电压后再进入量程自动转换电路。
单片机系统通过对CD4052芯片A、B 端的控制实现量程自动转换。
ICL7106数字万用表设计

ICL7106设计题目:专业:班级:姓名:学号:分数:2013年12月15摘要:数字万用表是由数字电压表配上相应的功能转换电路构成的,它可对交、直流电压,交、直流电流,电阻,电容以及频率等多种参数进行直接测量。
本文主要通过对现有通用数字万用表的测量理论和实现电路的研究,详细分析了直流电压、直流电流、交流电压、直流电阻的测量理论和实现电路,研究了模拟量转变为数字量的误差问题,详细阐述了现有通用数字万用表测电压的误差问题,设计出1种数字万用表的测量电路——由ICL 7106构成的3 1/2位自动量程数字万用表电路。
此电路量程广,并且具有手动/自动量程两种模式和读数保持、相对值测量、蜂鸣器驱动等功能,能显示超量程、负极性、低电压指示符以及各种标志符(含单位符号),并且功耗小。
关键字:数字万用表;模拟量;数字量;A/D 转换目录摘要: (2)第1章绪论 (4)1.1 数字万用表的主要特点 (5)1.2 万用表发展趋势 (7)第2章数字万用表总体设计方案 (8)2.1数字万用表的基本原理 (8)2.2系统设计方案 (9)2.3ICL7106介绍 (9)2.3.1 ICL7106简介 (9)2.3.2 ICL7106管脚排列 (10)2.3.3 ICL7106数字电路 (10)第3章智能型数字式多用表硬件设计 (11)3.1A/D转换电路 (11)3.2ICL7106各测量电路 (12)3.2.1直流电压测量电路 (12)3.2.2交流电压测量电路 (13)3.2.3直流电流测量电路 (14)3.2.4电阻测量电路 (15)3.2.5二极管测试电路 (15)3.3数字万用表原理图 (16)第4章用数字万用表的检测 (16)4.1测量电压 (16)4.2测电流 (17)4.3测电阻 (18)4.4测二极管 (18)4.5注意事项 (19)第1章绪论随着微电子技术的高速发展,单片机的功能集成化,智能仪器也发展到了一个新的阶段。
基于SPCE061A的智能数字万用表

9 个部分组成 , 其结构框图 。 如图 1 所示 .
2 主 要 单 元 电路 的设 计
2 . 1 电源 电路 采用 S P C E 0 6 1 A单 片机进行 控制 , 需要 提供 + 5 V和 + 3 . 3 V 2种 电源 , 采 用 2节 3 . 7 V
-- _
J 一
‘
T
G ‘
1 0 F
F l 1 0 4 F
图 2 电 源 电路
2 . 2 控 制 电路
控 制 电路 是一 个 系统 的核心 , 主控制 器性 能 的优劣 将 直接 影 响系统 的精度 、 速 度 等性 能
指标 . 该 控制 电路 由凌 阳单 片机 S P C E 0 6 1 A及 其外 围 电路 组成 , S P C E 0 6 1 A具有 宽 范 围的 电压 晶振 频 率 , 可 以支持 高达 4 0 M 的频 率输 入 , 同时 内部集成 了 7通道 1 0位 电压 模 一数转 换 器 和单 通道 语 音模 一数转 换器 , 其 电路 如 图 3所 示 .
收稿 日期 : 2 0 1 2— 0 9— 0 3 基金项 目:山东省科学研究 基金项 目资助课题 ( J 0 9 L D 5 5 ) ; 菏泽学 院科 学研究基 金项 目资助课 题 ( X Y 0 9 J X 0 1 )
作者简介 : 杨桂林 ( 1 9 7 8一) , 男, 天津静海人 , 菏 泽学 院蒋震机 电工程学院讲师 , 硕士.
用表, 阐述 了系统 的硬 件组 成和软件设计 , 并给出了主要 的单 元 电路 .该表 能 自动 识别 电压 、 电阻等被 测物
理 量并 自动测量 , 其精 度符合国家标准 , 并具有精度高 、 智能化 程度高 等优点 , 而且 还具有元 器件 筛选 、 语音 播 报等功能 , 是一种现 代化的智能仪器 . 关键词 : S P C E 0 6 1 A; 智能 ;数字万用表 ;振荡电路
(整理)单片机做万用表

单片机的数字万用表摘要:本系统是一种基于STC89C52单片机的交直流电压、电流测量和电阻阻值、二极管正向导通压降测量以及三极管h FE值的测量电路。
该设计采用高精度、双积分A/D转换芯片ICL7135构成主要的测量电路,其测量范围广而且可以由继电器的闭合与关断量程自动转换,使用串行5位LED显示电路和发光二极管测量类型以及测量单位的显示电路。
此外,该电路设计新颖、功能强大、可扩展性强。
关键词:单片机,双积分A/D转换器,量程自动转换1 引言随着电子技术的发展,数字电路应用领域的扩展,软件技术的高度发展及其在电子测量技术与仪器上的应用,新的测试理论、新的测试方法、新的测试领域以及新的仪器结构不断出现,产品智能化、数字化已成为人们追求的一种趋势,设备的性能、价格、发展空间等备受人们的关注,尤其对电子设备的精密度和稳定度最为关注。
在许多方面已经冲破了传统仪器的概念,电子测量仪器的功能和作用发生了质的变化。
纵览目前国内外的高精度数字式仪表,硬件电路往往比较复杂,体积比较庞大,不便携带,而且价格比较昂贵。
例如,传统的电桥平衡法等方法在测试过程中不够智能而且体积笨重,价格昂贵,需要外围环境优越,测试操作过程中需要调很多参数,对初学者来说很不方便,当今社会,基于数字显示的仪表虽然已经很成熟了,但是价格和操作简单特别是智能方面有待发展,价格便宜和操作简单、智能化的仪表开发和应用存在巨大的发展空间,本系统正是应社会发展的要求,研制出一种价格便宜和操作简单、自动转换量程、体积更小、功能强大、便于携带的数字式万用表,充分利用现代单片机技术,研究了基于单片机的智能数字式仪表,人机界面友好、操作方便的智能数字式万用表,具有十分重要的意义。
本系统是用模拟电路将待测量转换成0~2.0000V的电压,再经过A/D转换器采集并转换成数字量,然后送入单片机运算、处理以及输出显示,所以用起来非常方便而且准确度高,显示清晰,测量误差保持在5%以内。
基于单片机AT89c51的数字万用表设计

基于单片机AT89c51的数字万用表设计摘要:本次设计用单片机芯片AT89c51 设计一个数字万用表,能够测量交、直流电压值、直流电流、直流电阻以及电容,四位数码显示。
此系统由分流电阻、分压电阻、基准电阻、电容测试芯片电路、51 单片机最小系统、显示部分、报警部分、AD 转换和控制部分组成。
为使系统更加稳定,使系统整体精度得以保障,本电路使用了AD0809 数据转换芯片,单片机系统设计采用AT89S51 单片机作为主控芯片,配以RC上电复位电路和11.0592MHZ 震荡电路,显示芯片用TEC6122,驱动8 位数码管显示。
程序每执行周期耗时缩到最短,这样保证了系统的实时性。
本文全面、深入、系统地介绍了4 3/4位智能数字万用表的系统设计与研究。
设计中采用了美国MAXIM公司生产的专配万用表芯片MAX134,以及Intel 公司生产的MCS8051单片机。
整个系统结构由MAX134外加一些外围元件构成,然后再与单片机8051相连,驱动LED数码显示。
文章主要介绍了MAX134的性能特点、内部结构、数字接口、输入输出数据及一些功能和原理。
整个设计包括硬件电路设计及软件设计。
硬件电路设计包括处理器、外部设备元件的选择及电路设计,而软件设计则主要是实现仪表的各功能的控制。
关键词数字万用表AT89S51 单片机AD转换与控制AbstractThis design is design a digital universal meter with chip AT89s51 of one-chip computer, can measure and hand in , direct current pressing value , direct current flow , the direct current is hindered, four numbers show. This system is shunted resistance, resistance of partial pressure, basic resistance, minimum system of 51 one-chip computers, shown that some , warning part , AD change and control making up partly. In order to make the system more steady, make the whole precision of the system be ensured, this circuit has used AD0809 data to change the chip, the one-chip computer system is designed to adopt AT89S51 one-chip computer as the top management chip, the electricity is restored to the throne the circuit and 11.0592MHZ and shaken the circuit to match on RC, show that the chip uses TEC6122, urge 8 numbers to be in charge of showing. The every execution cycle consuming time of procedure contracts to get shortest, in this way the real-time character of the security system.In order to make the system more steady, make the whole precision of the system be ensured, this circuit has used AD0809 data to change the chip, the one-chip computer system is designed to adopt AT89S51 one-chip computer as the top management chip, the electricity is restored to the throne the circuit and 11.0592MHZ and shaken the circuit to match on RC, show that the chip uses TEC6122, urge 8 numbers to be in charge of showing.Keyword: Digital universal meter AT89S51 one-chip computer AD changes and controls目录摘要 (i)Abstract ................................................................................................................................ i i 1. 绪论 . (4)1.1 数字万用表的主要特点 (4)1.2 数字万用表设计背景 (6)1.2.1 数字万用表的设计目的和意义 (6)1.2.2 数字万用表的设计依据 (6)1.2.3 数字万用表的设计目的和意义 (6)1.3万用表发展趋势 (7)2. 数字万用表总体设计方案 (8)2.1数字万用表的基本原理 (8)2.2数字万用表的硬件系统设计总体框架图 (15)3. 选用芯片介绍及硬件电路设计方案 (16)3.1 芯片选择及功能简介 (16)3.1.1 AT89c51 芯片功能特性描述 (16)3.1.2 ADC0809 介绍 (19)3.1.2 TEC6122 简述 (21)3.2设计方案及数字万用表的硬件设计 (24)3.2.1 设计方案 (24)3.2.2 数字万用表的硬件设计 (26)3.2.2.1 分模块详述系统各部分的实现方法 (26)3.2.2.2 数字万用表控制硬件整体结构图 (32)3.2.2.1电路的工作过程描述 (32)4. 系统软件与流程图 (33)4.1 电路功能模块 (33)4.2系统总流程图 (33)4.3物理量采集处理流程 (35)4.4电压测量过程流程图 (36)4.5电流的测量过程流程图 (37)4.6电阻的测量过程流程图 (38)4.7电容测量过程流程图 (39)结论 (40)致谢 (41)参考文献 (42)附录 (43)1 绪论随着微电子技术的高速发展,单片机的功能集成化,智能仪器也发展到了一个新的阶段。
智能数字万用表的设计

智能数字万用表的设计摘要:本智能数字万用表由凌阳SPCE061A单片机、MC14433——3 位A/D 转换电路、自动量程转换电路、交直流转换电路和大、小电阻测量电路组成,能够对交流电压、直流电压、大电阻和小电阻进行精确测量。
使用凌阳SPCE061A 单片机作为控制模块,实现量程自动转化;使用MC14433实现A/D转换;使用简易软键盘、凌阳SPLC501液晶显示模组实现输入和显示;使用单片机读取MC14433的数字信号来控制模拟开关,从而改变反馈电阻的大小实现档位的不同选择;本设计能够准确对被测量进行测量,所有性能指标符合要求。
关键词:数字万用表单片机 MC14433 交直流电压测量电阻测量一、方案论证1.交流电压的测量:由于交流电压不能直接测量,必须转换为直流电压。
转换方案有3种:方案一、热电偶测量法:根据交流有效值的物理定义来实现测量的,利用热电偶电路平衡原理通过两端的电势比较得到有效值。
但热电偶转换线性度差,且热电偶具有配对较难、响应速度慢、负载能力差等缺点。
方案二、模拟运算法:根据有效值的数学定义,用集成器件乘法器、开放器等依次对被测信号进行平方、平均、开方等计算直接得到交流输入信号的有效值。
这种方案测量的动态范围小、精度不高且输入信号的幅度变小时,平均器输出电压的平均值下降值很快、输出幅度很小。
方案三、交流整形电路:使用AD637等集成有效值转换芯片,把交流电压信号转换为幅值等于交流有效值的直流电压信号,在对直流电压进行测量,这种方案电路简单、响应速度快、失真度小、工作稳定可靠。
综上,采用方案三进行交流电压的测量。
2.小电阻的测量:由于小电阻在通入电压后发热,测量出的电阻值会产生较大的误差,对于小电路有3种方案测量:方案一、直流电桥测量法。
直流电桥又分直流单电桥和直流双电桥。
采用这两种方法测量时很多操作需要手动,并且对元件精度要求高,通过数字电位器来改变需要的电阻参数,索然可以实现数控,但数字电位器的每一级步进电阻值不确定,调节困难,用单片机处理计算复杂并且测量时操作不便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖北经济学院电子设计大赛设计报告课题名称:数字智能万用表指导教师:汪成义王金庭刘光然学生姓名:汪凡夏晶晶张薇学生院系:电子工程系时间: 2011年7月智能数字万用表一 设计目的1、培养综合性电子线路的设计能力。
2、掌握综合性电子线路的安装和调试方法。
3、学会基于M3进行软件设计。
二 任务及要求 1、任务设计并制作一台具有直流电压、交流电压和电阻测量功能的智能数字万用表。
示意图如图1所示。
图1 智能数字万用表示意图2、要求1、基本要求(1)213数码显示,最大读数1999。
(2)直流电压量程:0.2V、2V、20V,精度为±0.2%±1个字;输入阻抗≥10MΩ。
(3)交流电压量程:0.2V、2V、20V,精度为±0.5%±2个字(以50 Hz为基准);输入阻抗≥10MΩ;频率响应范围为40~1000Hz。
(4)电阻量程: 2Ω、200Ω、2MΩ,精度±0.2%±2个字。
2、发挥部分(1)直流电压测量具有自动量程转换功能。
(2)具有“自动关机”功能,即在测量过程中,若1分钟内无任何键按下,仪器会自动关闭显示并处于低功耗状态;再按任意键,仪器能返回“自动关机”前的工作状态。
(3)具有相对误差(△%)测量功能,即在进行某项测量时,首先通过示屏提示用户从键盘输入标称值,一旦输入确认后,仪器能显示相对误差中的△值。
(4)其它。
三总体设计方案1、系统模块图根据题目要求和本系统的设计思想,系统主要包括图2所示的模块:图2系统模块框2、总体方案分析若被测量为电阻,则须经过电阻测量电路将电阻量转化为直流电压量后才可以进入量程自动转换电路;若被测量为直流电压,则可以直接进入量程自动转换电路;若被测量为交流电压,则需要先经过交直流转换电路将交流电压转换为直流电压后再进入量程自动转换电路。
单片机系统通过对CD4052芯片A、B端的控制实现量程自动转换。
A/D转换电路将测得的模拟量转化为数字量之后通过单片机系统在液晶显示屏上显示出来。
四单元电路设计与计算1、电阻测量电路利用运算放大器采用反相比例运算的方法,将测电阻转化为测电压,电路图如下:图3电阻测量电路由反相比例电路可知:Uo=(Rx/500)×5V,可推出Rx=Uo×100,测量电阻时若输出电压Uo=2V,则被测电阻Rx=200Ω如上图所示。
2、交直流转换电路测量交流电压时须先将交流转化为直流,这里采用全波精密整流电路,利用二极管的单向导电性,运放A1构成反相器,运放A2构成反相加法器,电路图如下所示:图4交直流转换电路当U I>0时 D1导通、D2截止 U O1= -2U I U O= - U O1-U I=U I当U I<0时 D1截止、D2导通 U O1=0 U O= - U O1-U I=-U I输入与输出信号波形如下:图5交直流转换电路输入与输出波形3、量程自动转换电路自动量程转换电路的作用是按输入信号条件(过量程、欠量程信号)和时钟信号(EOC、DS1~DS4)发生相应的量程信号控制。
通过单片机读取MC14433的数字信号,通过数字信号的大小来控制模拟开关,从而改变反馈电阻的大小来实现档位的不同选择。
模拟开关的导通由Q3和Q0决定,当被测电压过量程时(Q3=0且Q0=1),向高量程变化;欠量程时(Q3=1且Q0=1),向低量程变化;当量程适当时,保持原来状态不变。
其中,Au=-Rf/R ,R=10K ,如果要实现3个档位,可以将Rf设为1k、10k、100k,然后通过控制开关来接通电阻,从而实现换档。
CD4052是一个双 4 选一的多路模拟选择开关,其使用真值表如表 1所示:图6 CD4052芯片真值表应用时可以通过单片机对A/B的控制来选择输入哪一路,这里选择Y通道,电路图如下:图 7量程自动转换电路4、A/D 转换电路采用MC14433,集成芯片MC14433是是一个3 1/2位A/D 转换器,其中集成了双积分式A/D 转换器所有的CMOS 模拟电路和数字电路。
具有外接元件少,输入阻抗高,功耗低,电源电压范围宽,精度高等特点,并且具有自动校零和自动极性转换功能。
MC1403提供输出可调基准电压REF V ,当输入一个直流电压时,将进行A/D 转换,用单片机来处理MC14433的控制信号。
当A/D 转换结束时,MC14433的EOC 引脚输出一个高电平脉冲给单片机,单片机进入中断处理程序。
单片机对MC14433的DS1~DS4进行动态扫描,然后将Q0~Q3进行转换之后由LCD 显示。
相关理论推导:双积分过程可以由下面的式子表示:1112111011T C R V dt V C R V xt t x -=-=⎰X REFt t REF T C R V dt V C R V 112111021-=-=⎰因为0201V V =,故有REF xX V T T V 1=,式中1T =4000CP T ,1T 是定时时间,X T 是变时间,由1R 1C 确定斜率,若用时钟脉冲数N 来表示时间X T ,则被测电压就转换成了相应的脉冲数,实现了A/D 转换。
1R 1C 的参数计算:CX V TC V R ∆⨯=11(max) 式中C V ∆为积分电容上充电电压幅度,C V ∆=V V V x DD ∆--(max),V ∆=0.5V ,T =4000clkf 1⨯。
假定1C =0.1uF ,DD V =5V ,clk f =66kHz 。
当(max)x V =2V 时,代入式1,可得1R =480 Ωk ,取标称值470Ωk 。
电路图如下图所示:图 8 A/D 转换电路五 软件设计1、软件设计流程图:图 9软件设计流程2、程序代码:Systeminit.c 程序清单#include "systeminit.h"unsigned long TheSysClock = 12000000UL;// 定义KEY#define KEY_PERIPH SYSCTL_PERIPH_GPIOB#define KEY_PORT GPIO_PORTB_BASE#define KEY_PIN GPIO_PIN_5// 防止JTAG失效,解锁时需将EXP-LM3S811板卡上的JP13跳至左侧(短接1-2)void jtagWait(void){SysCtlPeripheralEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口GPIOPinTypeGPIOInput(KEY_PORT, KEY_PIN); // 设置KEY所在管脚为输入if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00) // 若复位时按下KEY,则进入{for (;;); // 死循环,以等待JTAG连接}SysCtlPeripheralDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口}// 系统时钟初始化void clockInit(void){SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置SYSCTL_OSC_MAIN | // 采用主振荡器SYSCTL_XTAL_6MHZ | // 外接6MHz晶振SYSCTL_SYSDIV_1); // 不分频TheSysClock = SysCtlClockGet(); // 获取当前的系统时钟频率}main.c程序清单#include "Systeminit.h"#include "lcd.h"#define KEY_PORT GPIO_PORTD_BASE#define KEY_Row GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0 //扫描信号输出PD3~0#define KEY_clo GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4 //按键信号输入PD7~4#define KEY_PERIPH SYSCTL_PERIPH_GPIODextern void display_dianzu_val(void);extern void display_menu1(void);extern void display_menu2(void);extern void dianya_judge_display(void);extern void dianzu_judge_display(void);extern void GPIO_Init(void) ;extern void display_zhiliu_val(void);extern void display_jiaoliu_val(void);extern void display_wucha_val(void);extern void sleep(void) ;unsigned char key_val; // 键值void key_check(void){key_val=0;GPIOPinWrite(KEY_PORT,KEY_Row,0x0f);GPIOPinWrite(KEY_PORT,GPIO_PIN_0,0);if( (GPIOPinRead(KEY_PORT,KEY_clo)&0xf0)!=0xf0){if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_val=1;if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_val=2;if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_val=3;if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_val=4;}GPIOPinWrite(KEY_PORT,KEY_Row,0x0f);GPIOPinWrite(KEY_PORT,GPIO_PIN_1,0);if( (GPIOPinRead(KEY_PORT,KEY_clo)&0xf0)!=0xf0){if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_val=5;if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_val=6;if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_val=7;if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_val=8;}GPIOPinWrite(KEY_PORT,KEY_Row,0x0f);GPIOPinWrite(KEY_PORT,GPIO_PIN_2,0);if( (GPIOPinRead(KEY_PORT,KEY_clo)&0xf0)!=0xf0){if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_val=9;if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_val=10;if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_val=11;if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_val=12;}GPIOPinWrite(KEY_PORT,KEY_Row,0x0f);GPIOPinWrite(KEY_PORT,GPIO_PIN_3,0);if( (GPIOPinRead(KEY_PORT,KEY_clo)&0xf0)!=0xf0){if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_val=13;if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_val=14;if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_val=15;if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_val=16;}}int main(){jtagWait();clockInit();SysCtlPeripheralEnable(KEY_PERIPH);GPIOPinTypeGPIOOutput(KEY_PORT,KEY_Row); //扫描信号输出GPIOPinTypeGPIOInput(KEY_PORT,KEY_clo); //按键信号输入GPIO_Init();for(;;){display_menu1(); //一级菜单do {key_check();}while(key_val==0);switch(key_val){case 6:display_dianzu_val();break; //显示电阻键2case 5: //进入二级菜单键1do{display_menu2();do {key_check();}while(key_val==0);switch(key_val){case 12:display_zhiliu_val();break; //进入直流电压测量键Bcase 16:display_jiaoliu_val();break; //进入交流电压测量键Adefault: break;}//sleep();} while(key_val !=4);}}}Lcd_temp.c 程序清单#include "systemInit.h"#include "lcd.h"#include "test.h"#define CTL_PERIPH SYSCTL_PERIPH_GPIOC // 控制液晶所用的片内端口外设定义#define CTL_PORT GPIO_PORTC_BASE#define SCK GPIO_PIN_4 // 定义信号SCK#define SID GPIO_PIN_5 // 定义信号SID#define CS GPIO_PIN_6 // 定义信号CS#define PSB GPIO_PIN_7 // 定义信号PSB#define SCK_L GPIOPinWrite(CTL_PORT,SCK,0x00); // 定义信号输出低电平#define SID_L GPIOPinWrite(CTL_PORT,SID,0x00);#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00);#define PSB_L GPIOPinWrite(CTL_PORT,PSB,0x00);#define SCK_H GPIOPinWrite(CTL_PORT,SCK,0xFF); // 定义信号输出高电平#define SID_H GPIOPinWrite(CTL_PORT,SID,0xFF);#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF);#define PSB_H GPIOPinWrite(CTL_PORT,PSB,0xFF);#define SID_READ GPIOPinRead(CTL_PORT,SID); // 定义读回的数据#define SID_IN GPIOPinTypeGPIOInput(CTL_PORT,SID); // 定义SID信号为输入#define SID_OUT GPIOPinTypeGPIOOutput(CTL_PORT,SID);// 定义SID信号为输出unsigned char AC_TABLE[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, // 第一行汉字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, // 第二行汉字位置} ;unsigned char menu1_1[]="请选择测量项目:"; // 选择提示unsigned char menu1_2[]="1:电压 2:电阻 " ;unsigned char menu2_1[]="请选择测量项目:" ;unsigned char menu2_2[]="A:交流 B:直流 " ;unsigned char menu3_1[]="输入标称值:" ;unsigned char menu3_2[]=" " ;unsigned char menu3_3[]="相对误差:" ;unsigned char menu3_4[]=" " ;unsigned char str1[]="电阻为:" ;unsigned char str5[]="C:误差分析" ;unsigned char str[]="直流电压" ;unsigned char str2[]="电压×0.1" ;unsigned char str3[]="电压×10";unsigned char str4[]="交流电压";unsigned char c1[];extern unsigned char key_val;extern void key_check(void);extern void set_para(void);extern void para_input_display(void);// 所用的芯片端口初始化void init(void){SysCtlPeripheralEnable( CTL_PERIPH ); // 使能所用的端口GPIODirModeSet(CTL_PORT, (SCK | PSB | CS ) ,GPIO_DIR_MODE_OUT);// 设置信号的方向GPIOPadConfigSet(CTL_PORT, (SCK | PSB | CS ), GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU); // 设置IO的驱动能力}// 串行方式发送一个字节void SendByte(unsigned char Dbyte){unsigned char i ;for(i=0 ;i< 8 ;i++){SCK_L ;SID_OUT;if (Dbyte & 0x80){SID_H;}else{SID_L;}Dbyte=Dbyte<<1 ;SCK_H ;SCK_L ;}}// 串行方式接收一个字节unsigned char ReceiveByte(void){unsigned char i,temp1,t,temp2;temp1=temp2=0 ;for(i=0 ;i<8 ;i++){temp1=temp1<<1 ;SCK_L ;SCK_H ;SCK_L ;SID_IN;t=SID_READ;if (t){temp1++ ;}}for(i=0 ;i<8 ;i++){temp2=temp2<<1 ;SCK_L ;SCK_H ;SCK_L ;SID_IN;t=SID_READ;if (t){temp2++ ;}}return ((0xf0&temp1)+(0x0f&temp2)) ;}// 判断是否忙碌void CheckBusy( void ){do SendByte(0xfc) ;while(0x80&ReceiveByte()) ; // 判断是否忙碌:BF(.7)=1 Busy}// 向液晶发送命令void WriteCommand( unsigned char Cbyte ){CS_H;CheckBusy() ;SendByte(0xf8) ;SendByte(0xf0&Cbyte) ; // 高四位 SendByte(0xf0&Cbyte<<4) ; // 低四位(先执行< ;< ;)CS_L;}// 向液晶发送显示数据void WriteData( unsigned char Dbyte ) //显示字符{CS_H ;CheckBusy() ;SendByte(0xfa) ; // 字节格式:11111,RW(0),RS(1),0SendByte(0xf0&Dbyte) ; // 高四位SendByte(0xf0&Dbyte<<4) ; // 低四位(先执行< ;< ;) CS_L ;}// 延时函数void Delay(unsigned int MS){unsigned char us,usn ;while(MS!=0){usn = 2 ;while(usn!=0){us=0xf5 ;while (us!=0){us-- ;} ;usn-- ;}MS-- ;}}// 维捷登测试架专用延时函数void DelayKey(unsigned int Second , unsigned int MS100){ // 输入精确到0.1S,是用","unsigned int i ;for(i=0 ;i<Second*100+MS100*10 ;i++){Delay(10) ;}}// 液晶初始化函数void LcmInit( void ){WriteCommand(0x30) ; // 8BitMCU,基本指令集合 WriteCommand(0x03) ; // AC归0,不改变DDRAM 内容WriteCommand(0x0c) ; // 显示ON,游标Off,游标位反白OFFWriteCommand(0x01) ; // 清屏,AC归0WriteCommand(0x06) ; // 写入时,游标右移动}void PutStr1(unsigned char row,unsigned char col,unsigned char *puts) { // 128X32方式WriteCommand(0x30) ; // 8BitMCU,基本指令集合WriteCommand(AC_TABLE[8*row+col]) ; // 起始位置while(*puts != '\0') // 判断字符串是否显示完毕{if(col==8) // 判断换行{ // 若不判断,则自动从第一行到第三行col=0 ;row++ ;}if(row==2) // 一屏显示完,回到屏左上角,128x32时为row=2{row=0 ;DelayKey(1,5);Delay(2000) ;}WriteCommand(AC_TABLE[8*row+col]) ;WriteData(*puts) ; // 一个汉字要写两次puts++ ;WriteData(*puts) ;puts++ ;col++ ;}}// 显示直流电压函数void display_zhiliu_val(void){PSB_L; // 串行方式Delay(100) ;LcmInit() ; // 液晶初始化PutStr1(1,0,str5); //显示第一行DelayKey(1,5) ;if ((GPIOPinRead(OUTPUT_PORT, GPIO_PIN_1)==0x00)&&(GPIOPinRead(OUTPUT_PORT, GPIO_PIN_0)==0x00)){PutStr1(0,0,str); //显示"电压"DelayKey(1,5) ;}else if ((GPIOPinRead(OUTPUT_PORT, GPIO_PIN_1)==0xff)&&(GPIOPinRead(OUTPUT_PORT, GPIO_PIN_0)==0x00)){PutStr1(0,0,str3); //显示电压×10DelayKey(1,5) ;}else if ((GPIOPinRead(OUTPUT_PORT, GPIO_PIN_1)==0xff)&&(GPIOPinRead(OUTPUT_PORT, GPIO_PIN_0)==0xff)) {PutStr1(0,0,str2); //显示电压×0.1DelayKey(1,5) ;}else{PutStr1(0,0,str); //显示第一行DelayKey(1,5) ;}do{ key_check();do {key_check();}while(key_val==0);switch(key_val){case 8:display_wucha_val();break; //进入直流电压测量键Cdefault: break;}zhiliu_judge_display();} while(key_val !=4);}// 显示交流流电压函数void display_jiaoliu_val(void){PSB_L; // 串行方式Delay(100) ;LcmInit() ; // 液晶初始化if ((GPIOPinRead(OUTPUT_PORT, GPIO_PIN_1)==0x00)&&(GPIOPinRead(OUTPUT_PORT, GPIO_PIN_0)==0x00)){PutStr1(0,0,str4); //显示"电压"DelayKey(1,5) ;}else if ((GPIOPinRead(OUTPUT_PORT, GPIO_PIN_1)==0xff)&&(GPIOPinRead(OUTPUT_PORT, GPIO_PIN_0)==0x00)){PutStr1(0,0,str3); //显示电压×10DelayKey(1,5) ;}else if ((GPIOPinRead(OUTPUT_PORT, GPIO_PIN_1)==0xff)&&(GPIOPinRead(OUTPUT_PORT, GPIO_PIN_0)==0xff)) {PutStr1(0,0,str2); //显示电压×0.1DelayKey(1,5) ;}else{PutStr1(0,0,str); //显示第一行DelayKey(1,5) ;}do{ key_check();jiaoliu_judge_display();} while(key_val !=4);}// 显示电阻函数void display_dianzu_val(void){式Delay(100) ;LcmInit() ; // 液晶初始化PutStr1(0,0,str1); //显示第一行DelayKey(1,5)do{ key_check();dianzu_judge_display();} while(key_val !=4);}// 显示一级菜单函数void display_menu1(void){unsigned char i;init(); // 端口初始化PSB_L; // 串行方式SysCtlDelay(250*(SysCtlClockGet()/3000));LcmInit() ; // 液晶初始化WriteCommand(0x30) ;WriteCommand(0x80) ;for(i=0;menu1_1[i]!='\0';i++){WriteData(menu1_1[i]) ;}WriteCommand(0x90) ;for(i=0;menu1_2[i]!='\0';i++){WriteData(menu1_2[i]) ;}SysCtlDelay(500*(SysCtlClockGet()/3000));}//显示二级菜单void display_menu2(void){unsigned char i;init(); // 端口初始化式SysCtlDelay(250*(SysCtlClockGet()/3000));LcmInit() ; // 液晶初始化WriteCommand(0x30) ;WriteCommand(0x80) ;for(i=0;menu2_1[i]!='\0';i++){WriteData(menu2_1[i]) ;}WriteCommand(0x90) ;for(i=0;menu2_2[i]!='\0';i++){WriteData(menu2_2[i]) ;}SysCtlDelay(500*(SysCtlClockGet()/3000));}//误差显示 ,显示”输入标称值“”相对误差“void display_wucha_val(){set_para();para_input_display();}// 输出参数提示void set_para(void){init(); // 端口初始化PSB_L; // 串行方式SysCtlDelay(250*(SysCtlClockGet()/3000));LcmInit() ; // 液晶初始化PutStr1(0,0,menu3_1);DelayKey(1,5) ;Delay(20);PutStr1(1,0,menu3_3);DelayKey(1,5) ;Delay(20);SysCtlDelay(500*(SysCtlClockGet()/3000));}// 参数输入与显示void para_input_display(void){ int return_up_flag=0;WriteCommand(0x30) ;WriteCommand(0x85) ;while(return_up_flag==0){do {key_check();} while(key_val==0);switch(key_val){case 1:WriteData('0');DelayKey(1,5);break;case 2:;break;case 3:;break;case 4:return_up_flag=1;break;case 5:WriteData('1') ;DelayKey(1,5);break;case 6:WriteData('2') ;DelayKey(1,5);break;case 7:WriteData('3') ;DelayKey(1,5);break;case 8:;break;case 9:WriteData('4') ;DelayKey(1,5);break;case 10:WriteData('5') ;DelayKey(1,5);break;case 11:WriteData('6') ;DelayKey(1,5);break;case 12:;break;case 13:WriteData('7') ;DelayKey(1,5);break;case 14:WriteData('8') ;DelayKey(1,5);break;case 15:WriteData('9') ;DelayKey(1,5);break;case 16:;break;}}}void LCD_init(void){SysCtlPeripheralEnable( CTL_PERIPH ); // 使能所用的端口GPIODirModeSet(CTL_PORT, (SCK | PSB | CS ) ,GPIO_DIR_MODE_OUT);// 设置信号的方向GPIOPadConfigSet(CTL_PORT, (SCK | PSB | CS ), GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU); // 设置IO的驱动能力PSB_L; // 串行方式Delay(100) ;LcmInit() ; // 液晶初始化LcmClearTXT() ;}// 文本区清RAM函数void LcmClearTXT( void ){unsigned char i ;WriteCommand(0x30) ; // 8BitMCU,基本指令集合WriteCommand(0x80) ; // AC归起始位for(i=0 ;i<64 ;i++)WriteData(0x20) ;}void WriteNum(unsigned char num){WriteData(0x30+num);}test.c 程序清单#include "systemInit.h"#include "lcd.h"#include "test.h"unsigned char a[4],flag0,flag1,flag2,flag3;void GPIO_Init(){SysCtlPeripheralEnable(READDATA_PERIPH);GPIOPinTypeGPIOInput(READDATA_PORT,READDATA);GPIOPinTypeGPIOOutput(READDATA_PORT,LED);SysCtlPeripheralEnable(SCAN_PERIPH);GPIOPinTypeGPIOInput(SCAN_PORT,SCAN);SysCtlPeripheralEnable(OUTPUT_PERIPH);GPIOPinTypeGPIOOutput(OUTPUT_PORT,OUTPUT);GPIOPinTypeGPIOInput(READDATA_PORT,INT);GPIOIntTypeSet(READDATA_PORT,INT,GPIO_RISING_EDGE);GPIOPinIntEnable(READDATA_PORT,INT);IntEnable(INT_GPIOB);IntMasterEnable();}void scan(){unsigned char scan_num;scan_num=GPIOPinRead(SCAN_PORT,SCAN)&0x0f;switch (scan_num){case0x01:a[3]=GPIOPinRead(READDATA_PORT,READDATA)&0x0f;flag0=1;break;case0x02:a[2]=GPIOPinRead(READDATA_PORT,READDATA)&0x0f;flag1=1;break;case0x04:a[1]=GPIOPinRead(READDATA_PORT,READDATA)&0x0f;flag2=1;break;case0x08:a[0]=GPIOPinRead(READDATA_PORT,READDATA)&0x0f;flag3=1;GPIOPinWri te(READDATA_PORT,LED,0x00);break;}}//定义直流显示void zhiliu_judge_display(){unsigned char polarity=0;unsigned char qian=0,bai=0,shi=0,ge=0;if((a[3]&0x04)==0x04) //通过Q2判断极性,Q2=1为正polarity=1;elsepolarity=0;if((a[3]&0x09)==0x09) //Q3=1,Q0=1 ,为欠量程 ,此时需进行放大{GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_1, 0xff);GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_0, 0x00);}else if((a[3]&0x09)==0x01) //Q3=0,Q0=1, 为过量程,此时需进行衰减{GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_1, 0xff);GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_0, 0xff);}else{GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_1, 0x00);GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_0, 0x00);}if((a[3]&0x08)==0x08)qian=0;elseqian=1;bai=a[2];shi=a[1];ge=a[0];WriteCommand(0x84);if(polarity==1)WriteData('+');elseWriteData('-');WriteNum(qian);WriteData('.');WriteNum(bai);WriteNum(shi);WriteNum(ge);WriteData('v');}//定义交流显示void jiaoliu_judge_display(){unsigned char polarity=0;unsigned char qian=0,bai=0,shi=0,ge=0;unsigned char m,n,c,d,s ;if((a[3]&0x04)==0x04) //通过Q2判断极性,Q2=1为正polarity=1;elsepolarity=0;if((a[3]&0x09)==0x09) //Q3=1,Q0=1 ,为欠量程 ,此时需进行放大{GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_1, 0xff);GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_0, 0x00);}else if((a[3]&0x09)==0x01) //Q3=0,Q0=1, 为过量程,此时需进行衰减{GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_1, 0xff);GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_0, 0xff);}else{GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_1, 0x00);GPIOPinWrite(OUTPUT_PORT, GPIO_PIN_0, 0x00);}if((a[3]&0x08)==0x08)qian=0;elseqian=1;bai=a[2];shi=a[1];ge=a[0];s=(qian*1000+bai*100+shi*10+ge)*(1.571) ;m=s/1000;n=(s-m*1000)/100 ;c=(s-m*1000-n*100)/10 ;d=s%10 ;WriteCommand(0x84);if(polarity==1)WriteData('+');elseWriteData('-');WriteNum(m);WriteData('.');WriteNum(n);WriteNum(c);WriteNum(d);WriteData('v');}//定义电阻显示void dianzu_judge_display(){unsigned char qian=0,bai=0,shi=0,ge=0;unsigned char m,n,c,d,dianzu ;if((a[3]&0x08)==0x08)qian=0;elseqian=1;bai=a[2];shi=a[1];ge=a[0];dianzu=(qian*1000+bai*100+shi*10+ge )/10 ;m=dianzu/1000;n=(dianzu-m*1000)/100 ;c=(dianzu-m*1000-n*100)/10 ;d=dianzu%10 ;WriteCommand(0x85);WriteNum(m);WriteNum(n);WriteNum(c);WriteNum(d);//WriteData('') ;}void GPIO_Port_B_ISR(void){unsigned long ulStatus;ulStatus=GPIOPinIntStatus(READDATA_PORT,true);GPIOPinIntClear(READDATA_PORT,ulStatus);if(ulStatus&INT){while(!((flag0==1)&&(flag1==1)&&(flag2==1)&&(flag3==1))){scan();}GPIOPinWrite(READDATA_PORT,LED,0xff);}flag0=0;flag1=0;flag2=0;flag3=0;}Sleep.c 程序清单#include "systemInit.h"#include "lcd.h"#define SysCtlPeriClkGating SysCtlPeripheralClockGating#define SysCtlPeriSlpEnable SysCtlPeripheralSleepEnable#define LED_PERIPH SYSCTL_PERIPH_GPIOA#define LED_PORT GPIO_PORTA_BASE#define LED_PIN GPIO_PIN_0// 定义KEY#define KEY_PERIPH SYSCTL_PERIPH_GPIOD#define KEY_PORT GPIO_PORTD_BASE#define KEY_PIN GPIO_PIN_7void keyInit(void){SysCtlPeriEnable(KEY_PERIPH); GPIOPinTypeIn(KEY_PORT, KEY_PIN); GPIOIntTypeSet(KEY_PORT, KEY_PIN, GPIO_LOW_LEVEL); GPIOPinIntEnable(KEY_PORT, KEY_PIN);IntEnable(INT_GPIOD); IntMasterEnable( );}//定义睡眠程序void sleep (void){jtagWait( ); clockInit( );keyInit( ); SysCtlPeriEnable(LED_PERIPH); GPIOPinTypeOut(LED_PORT, LED_PIN);GPIOPinWrite(LED_PORT, LED_PIN, 0x00);SysCtlDelay(2500 * (TheSysClock / 3000));SysCtlPeriClkGating(true);SysCtlPeriSlpEnable(KEY_PERIPH);for (;;){GPIOPinWrite(LED_PORT, LED_PIN,0xff);SysCtlSleep( );GPIOPinWrite(LED_PORT, LED_PIN, 0x00);SysCtlDelay(2500 * (TheSysClock / 3000));}}void GPIO_Port_D_ISR(void){unsigned long ulStatus;ulStatus = GPIOPinIntStatus(KEY_PORT, true); GPIOPinIntClear(KEY_PORT, ulStatus);if (ulStatus & KEY_PIN){SysCtlDelay(10 * (TheSysClock / 3000));while (GPIOPinRead(KEY_PORT, KEY_PIN) == 0); SysCtlDelay(10 * (TheSysClock / 3000));}}Lcd.h 程序清单#define SCK_L GPIOPinWrite(CTL_PORT,SCK,0x00); // 定义信号输出低电平#define SID_L GPIOPinWrite(CTL_PORT,SID,0x00);#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00);#define PSB_L GPIOPinWrite(CTL_PORT,PSB,0x00);#define SCK_H GPIOPinWrite(CTL_PORT,SCK,0xFF); // 定义信号输出高电平#define SID_H GPIOPinWrite(CTL_PORT,SID,0xFF);#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF);#define PSB_H GPIOPinWrite(CTL_PORT,PSB,0xFF);#define SID_READ GPIOPinRead(CTL_PORT,SID); // 定义读回的数据#define SID_IN GPIOPinTypeGPIOInput(CTL_PORT,SID); // 定义SID信号为输入#define SID_OUT GPIOPinTypeGPIOOutput(CTL_PORT,SID);void LCD_init(void);void SendByte(unsigned char Dbyte);unsigned char ReceiveByte(void);void CheckBusy( void );void WriteCommand( unsigned char Cbyte );void WriteData( unsigned char Dbyte );unsigned char ReadData( void );void Delay(unsigned int MS);void DelayKey(unsigned int Second , unsigned int MS100);void LcmInit( void );void LcmClearTXT( void );void PutStr(unsigned char row,unsigned char col,unsigned char *puts); void WriteNum(unsigned char num);#endifTest.h 程序清单#ifndef __TEST_H_#define __TEST_H_#include "systemInit.h"#include "lcd.h"#define READDATA_PERIPH SYSCTL_PERIPH_GPIOB#define READDATA_PORT GPIO_PORTB_BASE#define READDATAGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define INT GPIO_PIN_4#define LED GPIO_PIN_5#define SCAN_PERIPH SYSCTL_PERIPH_GPIOA#define SCAN_PORT GPIO_PORTA_BASE#define SCANGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define OUTPUT_PERIPH SYSCTL_PERIPH_GPIOE#define OUTPUT_PORT GPIO_PORTE_BASE#define OUTPUT GPIO_PIN_1|GPIO_PIN_0void scan(void);void zhiliu_judge_display(void);void jiaoliu_judge_display(void);void dianzu_judge_display(void);void display_wucha_val(void);#endif六系统联调、测试与分析1、测试使用的仪器(1)函数信号发生器(2)直流电源(3)示波器(4)数字万用表2、系统联调测试结果(1)直流电压的测试测试方法:通过单片机系统选择直流电压档,将直流电源作为整机系统的输入端,在LCD上显示出所测直流电压值。