电子系统设计3
电子系统设计实验报告

基于单片机和FPGA的等精度频率计一、设计任务工作频率通信系统极为重要的参数,频率测量是通信系统基本的参数测试之一。
本设计的主要任务是使用单片机与 EDA 技术设计制作一个简易的等精度频率测试仪,可对输入周期信号的频率进行测量、显示。
被测信号的频率范围和测试的精度要求见相应的设计任务书。
二、设计框图图 1 硬件系统原理框图等精度频率计的主系统硬件框图如图1 示,主要由以下几部分组成:(1)信号整形电路:用于对于放大信号进行放大和整流,以作为PLD 器件的输入信号(2)测频电路:是测频的核心电路模块,由FPGA 或CPLD 器件组成。
(3)单片机电路模块:用于控制FPGA 的测频操作和读取测频数据,并做出相应处理。
(4)数码显示模块:用8 个数码管显示测试结果,考虑到提高单片机I/O 口的利用率,降低编程复杂性,提高单片机的计算速度以及降低数码显示器对主系统的干扰,可以采用串行静态显示方式。
三、测频原理分析3.1 等精度频率测试的原理频率是一个基本的物理量,其它的物理量可以转换为频率进行测量。
测试频率的基本方法包括直接测频和测周法。
其中直接测频法是产生一个标准宽度(例如1s)的时基信号,然后在这个信号时间范围内打开闸门对被测频率信号进行计数。
此方法的弱点之一是高精度的标准时基信号不容易获得;其二,这种方法对于高频信号的测量精度比较有保证,但是对于低频信号由于计数周期有限测试精度较低。
测周法是用被测信号作为闸门信号、对标准脉冲信号进行计数,显然这种方法适合测量低频信号的频率。
等精度测频法的核心思想是用两个计数器分别对标准和被测脉冲进行计数,计数的时间严格同步于被测脉冲。
这种方法的最大优点是测试的精度和被测信号的频率无关,因而可以做到等精度测量。
其测试原理如图2 示。
预置闸门信号是测试命令,即测频的使能信号,该信号为高电平的期间进行测频。
但是当预置闸门信号为高电平时,测频并不是立即开始,而是要等到被测信号的上升沿到来以后,实际闸门信号跳为高电平,测频才真正开始。
3维城市电子地图系统设计与实现

De i n a d I p e e t to f3 Ur a e t o i a y t m sg n m l m n a i n o D b n El c r n c M p S se
L U0 u Yo
( in s n ier gE po ain& S r eigIs tt C .L d , a gh u25 0 C ia Ja guE gn ei x lrt n o u vyn nt ue o , t. Y n z o 2 00, hn ) i
0 引 言
最近 几十 年来 , 随着计 算 机 软硬 件 技 术 的迅 猛 发 展 , 地 图学 已经从传 统 的手 工 制 图进 入 到 了计 算 机地 图制 图 的现 代地 图 学 时 代 。 电 子 地 图就 是 这 一 时 期 的 重 要 产 物 , 的出 现在 地 图学 领 域 引 起 了一 场 全 新 的变 革 。如 它 今, 传统 的 2 电子地 图已经 被广 大 地 图用 户 所接 受 , 维 并
Fi 1 The ov r l t u t e o g. e a ls r c ur f3D lcton c ee r i
m a s se p y tm
图 2 基 于场景 细节 层次 的组织 方式
Fi 2 The or a z i o s d g. g niaton m de ba e o s e t ll v l n c ne deai e e
Ab t a t r m h e e r h p r o e o D ee t n c ma t i a e n l z d te sa u f e e c n p l ain o D ee t n c sr c :F o te r s ac u p s f lcr i 3 o p,h sp p ra ay e h tt so s a h a d a p i t f l cr i r r c o 3 o
电子信息系统的设计与开发

电子信息系统的设计与开发随着信息技术的突飞猛进,电子信息系统逐渐成为了人们生产和生活中不可或缺的一部分。
电子信息系统可以帮助我们完成诸多复杂的任务,例如数据处理、实时监测、控制系统等等。
本文将着重介绍电子信息系统的设计与开发,探讨如何设计一款高效的、可靠的电子信息系统。
一、电子信息系统的概念电子信息系统全称Electronic Information System, 缩写为EIS。
它是指使用电子设备来收集、存储、处理、传输和管理信息的系统。
电子信息系统可以结合人工智能和大数据等众多技术,通过不断更新数据来增强系统的可靠性、智能化、高效性和安全性。
电子信息系统在各大行业都有着广泛应用,例如金融、医疗、建筑、交通等。
电子信息系统的设计和开发需要涉及大量的计算机技术与知识。
二、电子信息系统的设计原则1. 可扩展性:电子信息系统设计时需考虑未来需求的扩展和变更,容易替换和升级硬件及软件,能够快速地满足新需求。
2. 稳定性:系统需要保证稳定性,确保系统运行期间的高效性和稳定性。
3. 可靠性:电子信息系统需要经过严格的测试和验证,确保系统运行的安全稳定。
4. 系统的安全性:保护存储在电子信息系统中的数据的安全,杜绝安全漏洞。
5. 易用性:简单的操作界面和操作流程,让用户快速学习和使用。
三、电子信息系统的开发流程1. 需求分析:在开发之前需要进行需求分析,明确系统所需的功能和需求。
需求分析是开发的基础,它直接决定了后续开发工作的方向和成败。
2. 系统设计:在需求分析的基础上,制定电子信息系统的总体架构和模块划分。
系统设计需要充分考虑各种因素,例如硬件、软件、网络、通信、安全等等。
3. 开发实现:在系统设计的基础上,进行软件和硬件的开发。
4. 测试评估:对电子信息系统进行测试和评估,确保系统运行的正确性和稳定性。
5. 系统上线:系统通过测试评估后,可以正式上线投入使用。
四、电子信息系统的应用领域1. 金融领域:如ATM自动柜员机、证券交易、网上银行等。
Multisim14电子系统仿真与设计第3章 Multisim14的操作环境与基本操作

电源库对应元器件 系列(Family),如 图所示。
3.2 常用工具栏
3.2.4 元器件工具栏
1. 电源(Source)库
在电源库中包含了电路 必需的各种形式的电源、信 号源以及接地符号,一个待 仿真的电路必须含有接地端 ,否则仿真时会报错。所有 电源类型如图所示。
3.2 常用工具栏
3.2 常用工具栏
3.2.4 元器件工具栏
如要对放置的元器件进行角度旋转,当拖动正在放置的元器件时,按住 以下键即可进行相应操作。
Ctrl+R:元器件顺时针旋转90°。 Ctrl+Shift+R:元器件逆时针旋转90°。 或者选中元器件,单击鼠标右键进行相应操作。
3.2 常用工具栏
3.2.4 元器件工具栏
3.2 常用工具栏
3.2.4 元器件工具栏
单击每个元器件组都 会显示出一个窗口,各类 元器件窗口所展示的信息 基本相似。现以基础 (Basic)元器件组为例 说明该窗口的内容。
3.2 常用工具栏
3.2.4 元器件工具栏
如果放置的元器件是有多个相同部分组成的复合元器件(通常针对集成 电路),将会显示一个对话框,从对话框中可以选择具体放置的部分。
3.1 主界面菜单命令
3.1.3 视图菜单
视图(View)菜单包括调 整窗口视图的命令,用于添加 或隐藏工具条、元件库栏和状 态栏。
3.1 主界面菜单命令
3.1.4 放置菜单
放置(Place)菜单包括放 置元器件、结点、线、文本、 标注等常用的绘图元素,同时 包括创建新层次模块、层次模 块替换、新建子电路等关于层 次化电路设计的选项。
3.2.4 元器件工具栏
2. 基本(Basic)元器件库
《电子系统设计导论》课件

总结本课程的主要内容和学习收获,回顾所学的知识和技能。
2 电子系统设计的未来发展
展望电子系统设计在未来的发展方向和趋势,探讨可能的创新和应用。
3 学生提问答疑
回答学生对课程和电子系统设计相关问题,帮助学生解决疑惑和深入理解。
信号传输和滤波
讨论了信号在电子系统中的传输和滤波过程,以及常用的传输和滤波技术。
信号调制和解调
详细介绍了信号调制和解调的原理和方法,以及应用领域和实例。
微处理器与嵌入式系统
微处理器概述
深入探讨微处理器的原理、结构 和工作方式,以及常用的微处理 器芯片。
嵌入式系统基础知识
嵌入式系统设计实例
介绍嵌入式系统的基本概念和特 点,以及常见的嵌入式系统组件。
通过实例展示嵌入式系统的设计 过程和方法,帮助你掌握嵌入式 系统设计技能。
电子系统的应用
1
汽车电子系统设计
介绍了汽车电子系统的设计原理和应用,
飞行控制系统设计
2
以及在汽车行业中的重要性。
探讨了飞行控制系统的设计和技术,以
及在航空航天领域的应用。
3
智能家居设计
详细介绍了智能家居系统的设计和功能, 展示了智能家居技术的发展趋势。
电子系统设计案例分析
智能手环设计案例
通过案例分享智能手环的设计 原理和技术,以及在健康监测 领域的应用。
蓝牙音频设计案例
展示了蓝牙音频系统的设计和 实现,以及在音频传输和无线 通信方面的应用。
智能马桶设计案例
介绍了智能马桶的设计原理和 功能,并展示了智能马桶在卫 生洁具领域的创新应用。
总结与展望
《电子系统设计导论》 PPT课件
欢迎来到《电子系统设计导论》PPT课件。这个课程将介绍电子系统的设计原 理和基本流程,并探讨电子系统在各个领域的应用。
“电子系统综合设计”的实践教学设

2022年12月第49期Dec. 2022No.49教育教学论坛EDUCATION AND TEACHING FORUM“电子系统综合设计”的实践教学设计研究郜东瑞,汪曼青(成都信息工程大学 计算机学院,四川 成都 610225)[摘 要] 围绕以成果为导向的教育理念,在计算机学院配合电子系统综合设计课程,开展实践教学设计。
实践教学设计通过设计开发综合类的电子系统,聚焦学以致用,培养学生理论知识和专业技能,提高学生解决工程问题的能力,培养学生统筹工程开发的综合素养。
结合成都信息工程大学的实际,开展面向注意力在线监测系统的电子系统综合设计,带领学生完成任务规划、电路设计、嵌入式开发、软件开发、系统集成,并进行注意力监测的实验验证。
总结了教学体会并拓展改革思路,对引导计算机专业学生实现OBE的课程目标具有参考意义。
[关键词] OBE;注意力监测系统;综合设计实践[作者简介] 郜东瑞(1987—),男,河南南阳人,博士,成都信息工程大学计算机学院副教授,主要从事人工智能、脑机接口研究;汪曼青(1989—),女,重庆人,博士,成都信息工程大学计算机学院讲师(通信作者),主要从事人工智能、脑机接口研究。
[中图分类号] G642 [文献标识码] A [文章编号] 1674-9324(2022)49-0119-04 [收稿日期] 2022-04-12引言成果导向教育(OBE)是一种以学习成果为导向的工程教育理念,通过目标—措施—评价的闭环结构,以学生为主体,以学到了什么为目的,重点培养学生进入工作岗位后所具备分析问题和解决问题的能力[1-2]。
相比于传统教育模式,OBE教学理念将以教师为中心转变为以学生为中心,面向学生的专业设置、毕业要求和职业目标,设计教学方法、教学内容和课程体系,有利于教学相长和学习效果的持续改进,已成为工科课程教学改革的新方向[3-4]。
因此,笔者结合所在院校的培养目标,以“电子系统综合设计”课程为例,构建综合系统设计课程的教学内容、教学技巧和教学考核,达到串联学生已有知识、培养学生的动手能力、提升综合素质的目的。
电子系统设计--课程设计
Power
Output Amplifier
➢ Amplifiers are the system interface to the outside world ➢ They directly impact the user experience(用户体验)
➢ What you can see, hear,or measure
Байду номын сангаас
一、面包板
二、万用板
设计经验和意识
➢功率意识
➢分工合作、加强沟通,提高合作效率
➢模块设计概念
➢理论中理想阻容、运放等芯片模型与工程实践非理 想模型认知,
➢设计辅助工具应用,提高设计效率
➢工艺
及可测试性设计
结束语
谢谢
Thanks!
一、单元设计
➢原理设计(电路参数确定、
)
➢仿真分析验证理论(例如滤波器设计:采用TI的filterPro,模拟电 路分析multisim或者Tina仿真分析,数字可用Multisim或Proteus)
➢关键器件参数分析及测试、仿真模型建立验证、
➢硬件焊接、
(模拟分单元设计:供电单元、传感器单元、
信号调理单元、采集单元、数字单元、信号产生单元、驱动单元等)
➢对着输入需求,逐条罗列出指标和功能检查,并且测试记录数据, 分析达到效果,逐步优化
➢紧固焊接,加固线束和元器件等,尤其面包板线保障可靠,提高可 靠性,追求航天工艺标准整理线束规范,焊接工艺美观可靠,测试 点标识清楚,随时等待验收,携带测试报告比对
(示波器拷贝或者拍照、或者 绘制),绘制表格,数据误差分析等,对比理论分析、仿真分析、 实践测试三者数据和误差,总结实训。
➢综合能力:
Proteus教程—电子线路设计、制版与仿真(第3版)第1章 Proteus快速入门
图1-7 741放大电路的失真分析
第1章 Proteus快速入门
4. Proteus微处理器系统仿真 单片机系统的仿真是Proteus VSM的主要特色。用户可在Proteus中直接编
辑、编译、调试代码,并直观地看到仿真结果。 CPU模型有ARM7(LPC21xx)、PIC、Atmel AVR、Motorola HCXX以及 8051/8052系列。同时模型库中包含了LED/LCD显示、键盘、按钮、开关、常 用电机等通用外围设备。VSM甚至能仿真多个CPU,它能便利处理含两个或 两个以上微控制器的系统设计。
“Keywords”栏,在中间的查找结果“Results”中显示所有电容元件列表, 用鼠标拖动右边的滚动条,出现灰色标示的元件即为找到的匹配元件,如图 1-17所示。
第1章 Proteus快速入门
这种方法主要用于对元件名熟悉之后,为节约时间而直接查找。对于初 学者来说,还是分类查找比较好,一是不用记太多的元件名,二是对元件的 分类有一个清楚的概念,利于以后对大量元件的拾取。
Keil处于运行状态
第1章 Proteus快速入门
1.1.3 Proteus ARES的应用预览功能 Proteus的ARES软件具有PCB(印刷电路板)设计的强大功能。Proteus支
持PCB板的三维预览,便于观察器件布局和展示设计结果,如图1-11所示。
第1章 eus快速入门
1.2 Proteus跟我做
12V
第1章 Proteus快速入门
单击界面左侧预览窗口下面的“P”按钮,如图1-14所示,弹出“Pick Devices”(元件拾取)对话框,如图1-15所示。
ISIS 7 Professional的元件拾取就是把元件从元件拾取对话框中拾取到图 形编辑界面的对象选择器中。元件拾取共有两种办法。
《三硬件设计》课件
模拟电路设计
总结词
模拟电路设计主要涉及模拟信号的处理和转换。
详细描述
模拟电路设计主要负责处理模拟信号,如放大、滤波、转 换等。需要考虑模拟器件的选型、电路的稳定性、精度和 噪声等方面。
总结词
模拟电路设计需要注重电路的稳定性和精度。
详细描述
模拟电路的稳定性和精度对于整个系统的性能至关重要。 因此,在模拟电路设计中,需要选择高精度和高稳定性的 器件,并进行精确的参数调整和测试验证。
硬件设计是电子系统开发的重要环节,其质量直接影响到电子系统的性能、可靠性 和成本。
硬件设计的重要性
硬件设计是电子系统开发的关 键环节,是实现电子系统功能 和性能的重要保障。
良好的硬件设计可以提高电子 系统的稳定性和可靠性,降低 故障率,减少维护成本。
优秀的硬件设计可以降低电子 系统的成本,提高其市场竞争 力。
04
PCB设计
PCB布局
01
02
03
布局原则
按照电路功能,将元件合 理地分布在PCB的各个区 域,便于元件之间的连接 和信号传输。
元件排列
将元件按照一定的顺序和 方向排列,以便于识别和 组装。
考虑散热
对于发热元件,应合理布 局以利于散热。
PCB布线
布线原则
按照电路要求,选择合适 的线宽和线距,确保信号 传输的稳定性和可靠性。
《三硬件设计》ppt课件
目录
• 硬件设计概述 • 硬件架构设计 • 电路设计 • PCB设计 • 硬件测试与验证
01
硬件设计概述
硬件设计的基本概念
硬件设计是指根据电子系统需求,利用电路理论、计算机原理和电子工艺知识,设 计出满足特定要求的电子系统硬件结构的过程。
电子系统设计报告
电子系统设计报告一、目的加强对51单片机的了解,深入地学习和系统的架构基于51单片机的简单系统。
了解其构造和功能以及外围电路。
从而更好地掌握接口技术的原理,并认识相关电子元件和电子芯片。
二、内容要求根据“小猪〞自己确定的题目,制作基于51单片机的相应作品。
题目:闹钟作品功能:显示时间、调节时间、显示闹钟时间、调节闹钟时间、到点闹钟、留声等。
三、主要元件ISD1760、扬声器、数码管、按键、STC52四、成员分工小猪做的是单片机最小系统和数码管显示及按键模块的电路,留声模块由“鸟才〞制作。
软件也是小猪编写〔为表达课程特点我使用的是汇编语言,伟福软件〕。
五、系统说明单片机P0口接4 4键盘,实现控制功能,P1口输出数码管段选码,P2 口低三位输出位选码由138译码器译码;P3.0控制扬声器播放录音;录音操作由语音芯片完成。
六、电路框图七、程序框图八、软件清单〔汇编写得相对长了点比拟无奈〕hen0 bit p0.0 ;预定义键盘横向位hen1 bit p0.1hen2 bit p0.2hen3 bit p0.3shu0 bit p0.4 ;预定义键盘竖向位shu1 bit p0.5shu2 bit p0.6shu3 bit p0.7shi1 equ 39hshi2 equ 38hshifen equ 3ah ;预定义时间缓存fen1 equ 3chfen2 equ 3bhfenmiao equ 3dhmiao1 equ 3fhmiao2 equ 3ehnshi1 equ 32h ;预定义闹钟时间缓存nshi2 equ 31hnshifen equ 33hnfen1 equ 35hnfen2 equ 34hnfenmiao equ 36hnmiao1 equ 38hnmiao2 equ 37horg 00hljmp mainorg 0bhljmp time0org 40hmain:movnmiao1,#0 ;缓存初始化mov nmiao2,#0mov nshifen,#10mov nfenmiao,#10mov nshi1,#0mov nshi2,#0mov nfen1,#0mov nfen2,#0mov miao1,#0mov miao2,#5mov shifen,#10mov fenmiao,#10 mov shi1,#3mov shi2,#2mov fen1,#9mov fen2,#5mov r2,#250mov p3,#0ffhMOVTMOD,#21h ;定时器模式MOVTH0,#240 ;定时中断时间MOV TL0,#96SETB TR0SETB ET0SETB EAsjmp $ jianpan:push amov a,#0if_press:;第一次扫描横向mova,#00001111Bmov p0,aclr cmov a,#0mov c,hen0rlc amov c,hen1rlc amov c,hen2rlc amov c,hen3rlc acjnea,#0fh,if_press2pop aretif_press2:;第二次扫描横向acalldelay1ms ;去抖clr cmov a,#0mov c,hen0rlc amov c,hen1rlc amov c,hen2rlc amov c,hen3rlc acjnea,#0fh,getnumberpop aretgetnumber:;读键值swap amov r7,amova,#11110000bmov p0,amov a,#0clr cmov c,shu0rlc amov c,shu1rlc amov c,shu2rlc amov c,shu3rlc aadd a,r7cpl acjnea,#00010001b,read1 ;定义键功能mov a,#1incfen1 ;时间分低位加一sjmpnumber_outread1:cjnea,#00010010b,read2mov a,#2decfen1 ;时间分低位减一sjmpnumber_outread2:cjnea,#00010100b,read3mov a,#3incfen2 ;时间分高位加一sjmpnumber_outread3:cjnea,#00011000b,read4mov a,#4decfen2 ;时间分高位减一sjmpnumber_outread4:cjnea,#00100001b,read5mov a,#5inc shi1sjmpnumber_outread5:cjnea,#00100010b,read6mov a,#6dec shi1sjmpnumber_outread6:cjnea,#00100100b,read7mov a,#7inc shi2sjmpnumber_outread7:cjne a,#00101000b,read8mov a,#8dec shi2sjmp number_outread8:cjne a,#01000001b,read9mov a,#9sjmp number_outread9:cjne a,#01000010b,read10mov a,#0ahsjmp number_outread10:cjne a,#01000100b,read11mov a,#0bhsjmp number_outread11:cjne a,#01001000b,read12mov a,#0chsjmp number_outread12:cjne a,#10000001b,read13mov a,#0dhsjmp number_outread13:cjne a,#10000010b,read14mov a,#0ehsjmp number_outread14:cjne a,#10000100b,read15mov a,#0fhsjmp number_outread15:cjne a,#10001000b,number_outmov a,#0FFhclr EAljmp nshezhi进入闹钟设置number_out:检查是否溢出,调整缓存数值mov a,shi2cjne a,#2,ookmov a,shi1cjne a,#2,ok_2ljmp ookok_2: cjne a,#1,ok_1ljmp ookok_1: cjne a,#0,ok_0ljmp ookok_0:mov shi1,#3ook: mov a,fen1cjne a,#10,fen1_okmov fen1,#0sjmp backfen1_ok:cjnea,#255,fen1_ok1mov fen1,#9sjmp backfen1_ok1:mov a,fen2cjne a,#6,fen2_okmov fen2,#0sjmp backfen2_ok:cjnea,#255,fen2_ok1mov fen2,#5sjmp backfen2_ok1:mov a,shi1cjne a,#10,shi1_okmov shi1,#0sjmp backshi1_ok:cjne a,#255,shi1_ok1mov shi1,#9sjmp backshi1_ok1:mov a,shi2cjne a,#3,shi2_okmov shi2,#0sjmp backshi2_ok:cjne a,#255,shi2_ok1mov shi2,#2mov a,shi1cjne a,#3,ok3sjmp backok3: cjne a,#2,ok2sjmp backok2: cjne a,#1,ok1sjmp backok1: cjne a,#0,ok0sjmp backok0:mov shi1,#3sjmp backshi2_ok1:cjne a,#2,backmov a,shi1cjne a,#4,backmov shi1,#0mov shi2,#0sjmp backback:pop aretdelay1ms: mov r5,#10delay1ms2: mov r6,#95delay1ms1: djnz r6,delay1ms1djnzr5,delay1ms2retdelay30ms:mov r5,#150delay30ms2:mov r6,#200delay30ms1:djnz r6,delay1ms1djnzr5,delay1ms2retnaozhong: 闹钟时间比拟mov a,miao1cjnea,#0,naozhong_backmov a,miao2cjnea,#0,naozhong_backmov a,fen1cjnea,nfen1,naozhong_backmov a,fen2cjnea,nfen2,naozhong_backmov a,shi1cjnea,nshi1,naozhong_backmov a,shi2cjnea,nshi2,naozhong_backmov p3,#0mov r6,#30 naoback:retnaozhong_back:djnz r6,naobackmov p3,#0ffhrethui_main:lcall naozhongpop aretitime0: 中断push amov th0,#240mov tl0,#96lcall display 显示扫描djnz r2,hui_mainmov r2,#250lcall jianpan 键盘查询inc miao1mov a,miao1cjnea,#10,hui_mainmov miao1,#0 ;秒两位之间进位inc miao2mov a,miao2cjne a,#6,hui_mainmov miao2,#0 ;秒到分的进位inc fen1mov a,fen1cjnea,#10,hui_mainmov fen1,#0 ;分的进位inc fen2mov a,fen2cjne a,#6,hui_mainmov fen2,#0 ;分到时的进位inc shi1mov a,shi1cjnea,#4,budengyusisjmp shifoyichubudengyusi:cjnea,#10,hui_mainmov shi1,#0 ;时的进位inc shi2shifoyichu:mov a,shi2cjne a,#2,hui_mainmova,shi1 ;??时间的溢出cjne a,#4,hui_mainmovshi1,#0 ;24小时后时间归零mov shi2,#0ljmp hui_maindisplay: 时间显示mov r5,#8mov r0,#3fhdisplay1:mov a,r0movdptr,#shumayizhimovc a,a+dptrdec r5dec r0mov p2,r5 ;控制数码管位选mov p1,a ;p1口接数码管lcall delaycjne r5,#0,display1retdelay: mov r4,#0ffhdlll: djnz r4,dlllretnshezhi: 闹钟设置push anjianpan:nif_press:;第一次扫描横向mova,#00001111Bmov p0,aclr cmov a,#0mov c,hen0rlc amov c,hen1rlc amov c,hen2rlc amov c,hen3rlc acjnea,#0fh,nif_press2lcall ndisplaymov 00h,#100 ;标记sjmp nif_press nif_press2:;第二次扫描横向lcalldelay30ms ;去抖clr cmov a,#0mov c,hen0rlc amov c,hen1rlc amov c,hen2rlc amov c,hen3rlc acjnea,#0fh,ngetnumbersjmp nif_press ngetnumber:;读键值swap amov r7,amova,#11110000bmov p0,amov a,#0clr cmov c,shu0rlc amov c,shu1rlc amov c,shu2rlc amov c,shu3rlc aadd a,r7cpl alcall delay30mscjne a,00h,rightljmp nif_pressright:mov r0,acjnea,#00010001b,nread1mov a,#1inc nfen1ljmpnnumber_outnread1:cjnea,#00010010b,nread2mov a,#2dec nfen1ljmpnnumber_outnread2:cjnea,#00010100b,nread3mov a,#3inc nfen2sjmpnnumber_outnread3:cjnea,#00011000b,nread4mov a,#4dec nfen2sjmpnnumber_outnread4:cjnea,#00100001b,nread5mov a,#5inc nshi1sjmpnnumber_outnread5:cjnea,#00100010b,nread6mov a,#6dec nshi1sjmpnnumber_outnread6:cjnea,#00100100b,nread7mov a,#7inc nshi2sjmpnnumber_outnread7:cjnea,#00101000b,nread8mov a,#8dec nshi2sjmpnnumber_outnread8:cjnea,#01000001b,nread9mov a,#9sjmpnnumber_outnread9:cjnea,#01000010b,nread10mov a,#0ahsjmpnnumber_outnread10:cjnea,#01000100b,nread11mov a,#0bhsjmpnnumber_outnread11:cjnea,#01001000b,nread12mov a,#0chsjmpnnumber_outnread12:cjnea,#10000001b,nread13mov a,#0dhsjmpnnumber_outnread13:cjnea,#10000010b,nread14mov a,#0ehsjmpnnumber_outnread14:cjnea,#10000100b,nread15mov a,#0fhpop aMOVTMOD,#21hMOVTH0,#240 ;T0=4MSMOV TL0,#96SETB TR0SETB ET0SETB EAljmp number_outnread15:cjne a,#10001000b,nnumber_outmov a,#0FFh nnumber_out:mov a,nshi2cjne a,#2,nookmov a,nshi1cjne a,#2,nok_2ljmp nooknok_2: cjne a,#1,nok_1ljmp nooknok_1: cjne a,#0,nok_0ljmp nooknok_0:mov nshi1,#3nook: mov a,nfen1cjne a,#10,nfen1_okmov nfen1,#0sjmp nbacknfen1_ok:cjnea,#255,nfen1_ok1mov nfen1,#9sjmp nbacknfen1_ok1:mov a,nfen2cjne a,#6,nfen2_okmov nfen2,#0sjmp nbacknfen2_ok:cjnea,#255,nfen2_ok1mov nfen2,#5sjmp nbacknfen2_ok1:mov a,nshi1cjne a,#10,nshi1_okmov nshi1,#0sjmp nbacknshi1_ok:cjnea,#255,nshi1_ok1mov nshi1,#9sjmp nbacknshi1_ok1:mov a,nshi2cjne a,#3,nshi2_okmov nshi2,#0sjmp nbacknshi2_ok:cjnea,#255,nshi2_ok1mov nshi2,#2mov a,nshi1cjne a,#3,nok3sjmp nbacknok3: cjne a,#2,nok2sjmp nbacknok2: cjne a,#1,nok1sjmp nbacknok1: cjne a,#0,nok0sjmp nbacknok0:mov nshi1,#3sjmp nbacknshi2_ok1:cjne a,#2,nbackmov a,nshi1cjne a,#4,nbackmov nshi1,#0mov nshi2,#0lcall ndisplaynback:ljmp njianpanndisplay:mov r3,#8mov r0,#38h ;与闹钟时高位对应ndisplay1:mov a,r0movdptr,#shumayizhimovc a,a+dptrdec r3dec r0mov p2,r3 ;控制数码管位选mov p1,a ;p1口接数码管lcall delay1mscjne r3,#0,ndisplay1ret;闹钟完毕shumayizhi:DB3FH,06H,5BH,4FH,66H,6DH,7DH;共阴字码表DB07H,7FH,6FH,40hend九、主要难点小猪觉得硬件上不存在问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易数字电压表设计 自动化1004 金礼聪 201003120408 一、设计题目 采用C8051F360单片机最小系统设计一简易数字电压表。模拟输入电压通过一只1kΩ电位器产生,ADC0将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD上显示。
二、设计方案 单片机程序流程图如图1所示。
图1 单片机程序流程图 硬件电路采用单片机最小系统,用FPGA设计LCD的驱动接口电路。选单片机的P2.0引脚作为模拟信号输入引脚。选实验板上的RP3精密电位器作为模拟信号的信号源,通过调节电位器的阻值来产生0~3.3V连续可变的模拟电压,并将其与单片机P2.0引脚相连。到达设定的时间后,A/D转换完成,单片机读出A/D的值,再将其转换为十进制形式后送到LCD模块显示,从而达到设计要求。
三、详细设计 1)、C8051F360内部资源初始化(具体代码见附录) 1、OscInit();内部振荡器初始化 ; 2、PortIoInit();I/O端口初始化,将P2.0初始化为模拟量输入; 3、PcaInit();PCA初始化,禁止看门狗; 4、TimerInit();定时器初始化,设定定时周期10ms; 5、XramInit();外部数据储存接口初始化,将其初始化为引脚复用方式; 6、InsitiLcd();LCD显示初始化; 7、ADC_init();ADC初始化 8、Int0Init();中断初始化,允许定时器零,允许中断零。 2)、将电压值转换为十进制: AT=ADC0H*256+ADC0L; volt=AT*3.3/1024; voltage=volt*1000; for(i=0;i<4;i++) { v[i]=voltage%10; voltage=voltage/10; 3)、LCD显示程序设计 1、检查LCD是否空闲子程序viod Checkled(); 2、写命令子程序void WriteCom(uchar n); 3、写数据子程序void WriteData(uchar m); 4、汉子显示程序设计void DispHan(uchar code *a,uchar m,uchar k); 5、电压值显示程序write();
四、测试结果 显示值和实际输入测量值数据记录如表1所示。测试10组数据。 表1 实验测试结果数据对比表 1 2 3 4 5 6 7 8 9 10 11 输入电压(V) 0.000 0.315 0.608 0.876 1.180 1.477 1.794 2.095 2.402 2.824 3.028
显示电压 (V) 0.000 0.311 0.609 0.878 1.183 1.481 1.799 2.100 2.408 2.830 3.034
由表1数据可知最大误差为0.006V,在误差0.01V范围内,符合设计要求。 五、程序附录 #include #define uchar unsigned char #define uint unsigned int
#define WCOMADDR 0xC008 //写命令寄存器的地址 #define WDATADDR 0xC009 //写数据寄存器的地址 #define RCOMADDR 0xC00A //读命令寄存器的地址 #define RDATADDR 0xC00B //读数据寄存器的地址 #define KEYCS 0xC00C
uchar code hanzi[] = "简易电压表"; uint time=0; float volt; uint v[4]; uint AT,voltage; uchar keyn,keycode;
void OscInit(); void PortIoInit(); void XramInit(); void PcaInit(); //PCA初始化 void InitDevice(); void CheckLcd(); //检查LCD是否空闲子程序 void WriteCom(uchar n); //Lcd写指令子程序 void WriteData(uchar m); //Lcd写数据子程序 void InsitiLcd(); //Lcd初始化子程序 void DispHan( uchar code *a,uchar m,uchar k);//显示汉字子程序 void TimerInit(); void InterruptsInit(); void ADC_init(); void Int0Init();
void main() { uchar i; nitDevice(); //F360初始化 InsitiLcd(); //LCD模块初始化 ADC_init(); DispHan(hanzi,0x80,0x0a); //显示“键盘显示测试程序” AD0BUSY=1; while(1) { if(TF0==1) { TF0=0; TL0=0xf0; TH0=0xd8; //重置时间常数10ms time++;
} if(time >=49) { time = 0; AT=ADC0H*256+ADC0L; volt=AT*3.32/1024; voltage=volt*1000; for(i=0;i<4;i++) { v[i]=voltage%10; voltage=voltage/10; } WriteCom(0x94); WriteData(v[3]+0x30); WriteData(0x2e); WriteData(v[2]+0x30); WriteData(v[1]+0x30); WriteData(v[0]+0x30);
TR0=1; AD0BUSY=1;
}
}
} void InitDevice(void) //F360初始化 { OscInit(); PortIoInit(); XramInit(); ADC_init(); TimerInit(); InterruptsInit(); Int0Init(); PcaInit();
return; }
void Int0Init() { EA=1; IT01CF=0x05; EX0=1; IT0=1;
}
void OscInit(void) //内部振荡器初始化 { SFRPAGE=0x0f; //选择特殊功能寄存器页地址 OSCICL=OSCICL+4; OSCICN=0xc2; //允许内部振荡器,频率除2作为SYSCLK=12MHz CLKSEL=0x00; //选择内部振荡器 SFRPAGE=0x00; } void ADC_init() { ADC0CF=0x28; ADC0CN=0x80; AMX0P=0x08; AMX0N=0x1F; REF0CN=0x08; } void TimerInit() { TMOD=0x01; TH0=0xd8; TL0=0xf0; TR0=1; } void InterruptsInit(void) { EA=1; ET0=1; EX0=1; PX0=1; IE0=0;
}
void PortIoInit(void) //I/O口初始化 { SFRPAGE=0x0f; P0MDIN=0xe7; //P0.3、P0.4模拟量输入 P0MDOUT=0x83; //P0.0、P0.1、P0.7推拉式输出 P0SKIP=0xf9; //P0.1、P0.2被交叉开关跳过
P1MDIN=0xff; //P1设置为数字量输入 P1MDOUT=0xff; //P1设置为推拉式输出 P1SKIP=0xff; //P1被交叉开关跳过 P3MDIN=0xff; //P3设置为数字量输入 P3MDOUT=0xff; //P3设置为推拉式输出 P3SKIP=0xff; P4MDOUT=0xff; //P4.5设为OC输出,其余推拉式输出 XBR0=0x01; //使能UART XBR1=0xC0; //禁止弱上拉,交叉开关允许 SFRPAGE=0x00; return; }
void XramInit(void) //外部数据储存器初始化 { SFRPAGE=0x0f; EMI0CF=0x07; //引脚复用方式 SFRPAGE=0x00; return; }
void PcaInit(void) //PCA初始化 { PCA0CN=0x40; //允许PCA计数器/定时器 PCA0MD=0x00; //禁止看门狗定时器 return; }
void InsitiLcd() //Lcd初始化子程序 {
WriteCom(0x30); //设为基本指令集 WriteCom(0x01); //清屏 WriteCom(0x0c); //开整体显示 }
void CheckLcd() //检查LCD是否空闲子程序 { uchar temp = 0x00; uchar xdata *addr; while (1) { addr=RCOMADDR;