单片机课程设计-智能仪器

合集下载

单片机课程设计--智能电子钟的设计

单片机课程设计--智能电子钟的设计

目录1引言 (1)1.1设计内容和要 (1)1.2 工作原理 (2)2总体设计 (2)2.1 方案设计 (2)2.2 系统框图 (2)2.3 核心芯片简介 (3)2.3.1 DS1302简介 (3)2.3.2 AT89C51简介 (3)3 智能电子钟软硬件电路的设计 (4)3.1 硬件设计 (4)3.1.1 复位电路设计 (4)3.1.2 DS1302与单片机的接口设计 (5)3.1.3 LED显示设计 (5)3.1.4 电源设计 (6)3.1.5 按键开关去抖设计 (6)3.1.6 时钟电路的设计 (7)3.1.7 电路总原理图设计 (8)3.2 软件设计 (8)3.2.1 流程图 (8)4protues仿真与调试 (11)4.1 电路的仿真 (11)4.2软件调试 (11)结论……………………………………………………………………………………………错误!未定义书签。

参考文献 (14)附录 (15)源程序 (15)1 引言电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。

另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。

本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。

本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。

本设计应用AT89C51芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。

这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。

该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。

1.1设计内容和要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。

基于单片机的智能电子秤设计

基于单片机的智能电子秤设计
缺点:此电路要求R3、R4相等,误差将会影响输出精度,难度较大。实际测量,每一级运放都会引入较大噪声,对精度影响较大。
方案二:采用专用仪表放大器[12],如:INA128,INA129等。
此类芯片内部采用差动输入,共模抑制比高,差模输入阻抗大,增益高,精度也非常好,且外部接口简单。
以INA128为例,引脚图如2-4所示:
所采用的传感器输出电压振幅范围0~10mV。而模数转换的输入电压要求为0~2V,因此放大环节至少200倍的增益,此处我们需要放大500倍。根据本设计的实际情况增列出了两种方案。
方案一:由高精度低漂移运算放大器构成差动放大器。
差动放大器具有高输入阻抗,增益高的特点,可以利用普通运放(如OP07)做成一个差动放大器,其内部电路如图2-3所示。
(2-2)
本文的目的是设计一简易电子秤,最大称重约为2.5千克,重量误差不大于±0.01千克;考虑到与其相配置的各种电路的设计的难易程度和设计性价比,最终选择了CZAF-605[8]电阻应变式称重传感器,其称重规模为5kg。
2.4
压力传感器感受重力转换后输出的信号一般电平较低;经由电桥等电路变换后的信号亦难以直接用来显示、记录、控制或进行模数转换。为此,测量电路中需要模拟放大环节。这一环节目前主要依靠由集成运算放大器的基本元件构成具有各种特性的放大器来完成。
AT89S51的电源脚分别为20脚Vss和40脚Vcc(图中已默认连接,未显示出来)。这两个脚分别接地和+5V直流电源,31脚EA为内外存储器的控制端,接+5V允许访问外部存储器。
传感器检测电路的功能是把电阻应变片的电阻变化转变为电压输出,本设计中选用的是CZAF-605电阻应变式称重传感器,因为通过其得到的电压信号很小,为所以还需要放大器放大信号。考虑到干扰的作用,对传感器的信号进行了滤波处理,最终设计如图3-3所示。

智能大脑-走进单片机的世界教学设计

智能大脑-走进单片机的世界教学设计

智能大脑-走进单片机的世界教学设计教学目标:1、知识技能目标:知道什么是单片机,了解单片机的特点、用途;初步了解单片机是如何工作的。

2、情感态度目标:培训学生学习单片机的兴趣,进行爱国主义思想教育和科技强国的思想熏陶。

二、教学方法:配合多媒体讲授与观摩体验相结合,适当动手操作。

三、教学器材:自备单片机实验开发板和若干应用了单片机的智能工具仪表若干。

四、教学教程:1、引入新课:多媒体演示:观看扫地机器人扫地视频,引入话题:机器人已经进入寻常百姓家,智能时代已经来到!让我一起学习一下机器人的智能大脑的初步知识。

看多媒体图片,让学生判断哪个是智能电饭煲?说出智能电饭煲有哪些智能化的功能。

教师讲解:智能电器中都用到了“微电脑”——单片机。

2、传授新课:什么是单片机?单片机的应用领域有哪些?单片机是只有单个芯片的微型计算机,它把计算机的运算控制器CPU、只读存储器ROM、随机存储器RAM、输入输出I/O接口都集成到一个芯片里面的微型计算机。

3、单片机的特点(教师讲解):(1)体积小、重量轻、功耗低(可以用电池借电,便于携带)、功能强、性价比高,可嵌入各种设备中组成以之为核心的嵌入式系统。

(2)数据大都在单片机内部传送,运行速度较快,抗干扰能力强,可靠性高。

(3)结构灵活,易于组成各种微机应用系统。

(4)应用广泛,既可用于工业自动控制等场合,又可用于测量仪器、医疗仪器及家用电器等各个领域。

4、单片机的应用领域举例(多媒体演示)㈠、消费电子产品领域:数码相机、数码摄像机、智能冰箱、空调、智能洗衣机、智能养生壶、智能洗脚盆、电磁炉、微波炉、扫地机器人,还有手机中也用到了高端的单片机。

㈡、测控仪器、仪表领域:最常见的有数字电表、数字血氧仪、数字血压计、心电仪等等㈢、工业控制领域:数控机床、PLC机械手等等,大大提高了生产效率和产品质量。

㈣、汽车、交通领域:普通汽车通常也用到ABS、EBD、BAS、CBC等智能控制技术,使汽车变得更加安全、舒适,无人驾驶汽车也投放到市场了,中国也开始使用了无人驾驶公交汽车。

智能仪器实验报告-实验七

智能仪器实验报告-实验七

《智能仪器》课程设计报告姓名学号:梁倩 ********匙沛华 41253026胡智凯 41253023张爽 41253012刘文平 41253035专业:测控技术与仪器班级:测控1201、1202北京科技大学自动化学院二〇一六年一月目录一,课程设计内容简述 (3)二,电路原理图及说明 (3)1.总电路图 (4)2.电位器 (4)3.AD转换 (4)4.8051单片机 (5)5.继电器 (5)6.步进电机 (5)7.键盘以及显示 (6)8.地址译码插孔 (6)三,程序 (7)1.程序框图及说明 (7)2.程序源程序及注释 (11)3.运行结果(拍图) (17)四,调试过程遇到的问题及解决方法 (19)五,参考文献 (20)六,教师评语及成绩 (21)《智能仪器》课程设计报告一,课程设计内容简述设计要求:基于单片机的压力控制系统设计A:由电位器信号模拟压力信号,在LED上进行显示;由按键设定压力上、下限,当压力高于上限时,打开继电器(放气);当压力低于下限时,启动步进电机(充气)。

设计分工:软件接口要求:二,电路原理图及说明1.总电路图本压力显示和充放气系统用电位器输出值(0-5V)来模拟(-20-99KPa)压力值,将电位器的输出值送到模数转换模块进行AD转换,并将转换后的值送到8051单片机进行计算,转化为相应的压力值,送到LED数码管上(前三位)显示。

按键设定压力的上下限,可以在LED数码管后三位显示。

AD转换后的压力值与设定的压力上下限值相比较,当压力低于设定的下限值时,启动步进电机模拟充气过程。

当模拟压力高于上限时,打开继电器模拟放气过程。

2.电位器电位器用来产生可变的模拟量(0-5V),进而转化为-20到99KPa的模拟压力值。

3.AD转换80C196片内集成了一个八通道的A/D转换系统。

包括模拟多路开关、采样和保持电路以10位逐次逼近的A/D转换器。

A/D转换的结果送到数码管显示。

4.8051单片机8051单片机作为控制中心,是程序的载体,并根据程序控制各部分各功能的正常运行。

智能仪器仪表实验教学大纲

智能仪器仪表实验教学大纲

《智能仪器仪表》课程实验教学大纲课程名称:智能仪器仪表课程编码:060241003课程类别:专业课课程性质:必修适用专业:测控技术与仪器专业适用教学计划版本:2017课程总学时:48实验(上机)计划学时: 10开课单位:自动化与电气工程学院一、大纲编写依据1.测控技术与仪器专业2006版教学计划;2.测控技术与仪器专业《智能仪器仪表》理论教学大纲对实验环节的要求;3.近年来《智能仪器仪表》实验教学经验。

二、实验课程地位及相关课程的联系1.《智能仪器仪表》是测控技术与仪器专业重要的专业方向课程;2.本实验项目是《智能仪器仪表》课程综合知识的运用;3.本实验项目是理解智能仪表数据处理方法的基础;4.本实验以《微机原理及应用2》、《单片机原理与接口技术》为先修课。

5.本实验为毕业设计等有指导意义。

三、实验目的、任务和要求1.熟悉单片机开发系统的使用,了解仿真器的基本原理及功能;2.培养学生观察问题、分析问题和独立解决问题的能力;3.掌握采用查表法,线性插值法进行传感器非线性特性校正的软件设计,调试方法;4.熟悉S型热电偶查表法,插值法校正法表格的设计方法;5.熟悉S型热电偶查表法,插值法校正法程序的设计方法;6.培养正确记录实验数据和现象,正确处理实验数据和分析实验结果的能力以及正确书写实验报告的能力。

四、教学方法、教学形式、教学手段的特色重视学生的实际动手能力五、实验内容和学时分配实验一认识实验1、实验目的:(1)熟悉智能仪表的开发过程。

(2)掌握智能仪表试验台的硬件电路,工作原理和特性。

2、实验要求:(1)掌握编程器使用方法。

(2)读取MCU数据的方法。

(3)对实验操作过程中出现的进行分析和总结。

3、实验内容:(1)掌握键入、修改程序的操作(2)熟悉检查有关存储单元内容的方法;掌握程序运行及调试过程。

4、主要仪器设备及试剂:(据实选填)(1)名称·规格型号·数量·设备编号教学用传感器实验仪 10(2)名称·规格·数量·耗材性质实验开发板,电阻箱,并口电缆,14芯扁平电缆连接线万用表实验二A/D转换实验1、实验目的:(1)了解A/D转换的工作原理。

智能仪器设计课程教学大纲

智能仪器设计课程教学大纲

《智能仪器设计》课程教学大纲Design of intelligent Instrument一、课程教学目标1、任务和地位:没有测量就没有鉴别,科学技术就不能前进。

要测量就必须有正确的测量方法和先进的仪器仪表。

随着微电子技术和计算机技术的迅速发展,特别是单片微机的出现和发展,使传统的电子测量仪器在原理、功能、精度及自动化水平等方面都不得发生了巨大变化,形成一种完全突破传统概念的新一代测试仪器——智能仪器。

现在很多厂商、研究所以及高等院校都在研制开发各种智能化测量控制仪表,广大的仪表设计、生产和使用人员都不得迫切希望了解和掌握单片机在测量控制仪表中的应用技术。

为了跟上时代的步伐,本课程是测控专业学生必不可少的一门技术基础课。

2、知识要求:要求必须具备电路、电子仪器与测量技术、汇编原理及单片机原理的学习知识,通过本课程的学习为以后学生出去工作打下基础。

3、能力要求:系统地阐述基于单片机的智能化测量控制仪表的基本原理与设计方法,智能化测量控制仪表的人机接口、过程通道接口、串行和并行通讯接口、硬件和软件抗干扰技术、数据处理技术、仪表硬件及软件的设计方法。

通过课程设计加强学生综合知识的应用能力和设计动手能力。

二、教学内容的基本要求和学时分配2、具体要求:第一章绪论[目的要求]让学生了解智能化测量控制仪表的功能特点、智能化测量控制仪表的设计方法[教学内容]学习智能化测量控制仪表的基本与发展、智能化测量控制仪表的功能特点、智能化测量控制仪表的设计方法[重点难点]智能化测量控制仪表的功能特点[教学方法]板书,以教、学相结合来进行讲解。

[作业]课后复习思考题[课时]0.5学时第二章智能化测量控制仪表中专用微处理机[目的要求]让学生掌握MCS-51系列单片机的结构、MCS-51单片机的指令系统[教学内容]介绍了MCS-51系列单片机的特点、 MCS-51系列单片机的结构、CHMOS型单片机的节电工作方式、MCS-51单片机的指令系统[重点难点]MCS-51系列单片机的结构、CHMOS型单片机的节电工作方式、MCS -51单片机的指令系统[教学方法]板书,以教、学相结合来进行讲解。

智能仪器课程设计报告

智能仪器课程设计报告

天津电子信息职业技术学院传感器技能实训课题名称智能温度测温系统姓名王先民学号20班级电信S10-1专业电子信息工程技术所在系电子技术系指导教师岑永祚完成日期2011年12月11日一、 主要内容温度传感器DS18B20采集环境模拟信号,其输出送入AT89C51,单片机在程序的控制下,将处理过的数据送到移位寄存器74LS164,经74LS164输出后驱动三位数码管显示。

当被测温度高于18℃时,单片机发出控制信号使降温电扇以自然风的形式旋转,温度越高转速越快,温度36℃以上时风扇全速工作,点亮此功能指示灯。

二、 基本要求(1)设计测量温度范围-55℃~+125℃的智能测温系统,要求数码管实时显示测量温度,单片机根据温度高低确定风扇转速 (2)画出程序框图(3)有完整的整机电路图(protel 绘制)(4)完成格式正确、内容完整的实验报告三、 参考文献王祁, 智能仪器设计基础.北京:机械工业出版社,2009目录一、前言 (4)二、系统组成 (4)1、设计思路 (5)2、系统的性能指标: (5)3、系统的主要功能: (5)三、电路组成及工作原理 (5)1、温度传感器功能模块 (6)2、AT89C51单片机 ........................................................................................................ 8 3、74LS164移位寄存器 .. (12)4、晶振电路 (12)5、复位电路 ................................................................................................................... 13 6、键盘电路 . (13)7、显示电路 (14)8、稳压电路 ................................................................................................................... 14 9、显示电路 . (15)10、风扇控制电路 (15)四、课程设计心得与体会 (16)五、参考文献 (16)六、整机电路图 (17)七.心得体会 (18)智能温度测量系统的设计一、前言温度是一种基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量。

基于51单片机的光照强度检测报告要点

基于51单片机的光照强度检测报告要点

课程设计报告课程名称:智能仪器课程设计题目:基于51单片机的光照强度摘要光敏电阻测光强度系统,该系统可以自动检测光照强度的强弱并显示让人们知道此时光照强度的强弱。

人们可以通过看此装置的显示了解现在的光照状态,做合理的光照调节。

该设计可分为三部分:即光照检测部分、信号处理部分、光强显示部分。

还可加上照明部分。

对于光照检测部分可利用光敏电阻传感器作为检测元件,它可以完成从光强到电阻值的信号转换,再把电阻值转换为电信号就可以作为系统的输入信号。

对输入信号处理后,就可以用来显示了。

对于显示部分可利用数码管来显示,不同的光强对应于不同的数值,就能简单的显示出不同的光强了。

本设计就是由单片机STC89C52RC芯片,AD采集模块,运算放大,和1602液晶为核心,辅以必要的电路,构成了一个单片机光照强度检测系统。

该光照强度检测系统可以通过检测光照强度,使得光照在低于一定强度的时候让照明灯亮,是一种常用的测试仪器,它可以用在需要照明的各个地方,根据灯光的强弱,自动控制照明灯的开关,有力地节约了电力资源。

关键词:51单片机,,LM358,ADC0809,1602液晶,光敏电阻目录一、设计任务、要求 (3)1.1 设计任务: (3)1.2 设计要求: (3)二、方案总体设计 (4)2.1 方案一: (4)2.2 方案二: (4)2.3系统采用方案 (4)三、硬件设计 (6)3.1 单片机最小系统 (6)3.2 液晶显示模块 (6)3.3 系统电源 (7)3.4 整体电路 (8)四、软件设计 (10)4.1 keil软件介绍 (10)4.2程序流程图 (10)五、仿真与实现 (12)5.1 proteus软件介绍 (12)5.2 仿真过程 (12)5.3 实物制作与调试 (14)5.4 使用说明 (16)六、总结 (17)6.1设计总结: (17)6.2经验总结: (18)七、参考文献 (19)一、设计任务、要求1.1 设计任务:1).对更多小器件的了解2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用3).掌握仿真软件的运用和原理图的绘制4).掌握小信号的放大,滤波与采集5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求:1).三个按键控制照明灯的控制2).对小信号进行放大,滤波和采集3).1602液晶显示所测光照强度二、方案总体设计设计一个基于51单片机的光照强度检测系统。

智能仪器课程设计

智能仪器课程设计

智能仪器课程设计课程设计名称3位半数字电压表学生姓名、学号谭彩铭(0501170118)指导教师牛国柱2009-1-16课程设计要求设计一3位半直流数字电压表,满足下列要求1、量程为20mV,200mV,2V,20V,200V,测量精度要求0.1%2、3位半数码显示3、工作状态显示4、开机自检5、配简单键盘,如量程切换6、配微型打印机接口由实际操作中遇到的问题找解决方案实际搭建的数字电压表的量程为20mV,200mV,2V和8V,能完成量程的自动切换,并有各种量程状态以及超、欠量程的指示灯显示。

原理图附录一所示。

对应的完整汇编程序见附录三。

1 原理图总体思路由于采用3位半AD转换器TC14433,提供的基准电压为2V,可测电压量程为2V,故大于2V的待测电压衰减后输入,小于2V的待测电压放大后输入。

衰减和放大由51单片机控制控制模拟开关4051,4052来完成。

调试当中,发现若输入电压为负时,比例放大就不准确了,且相差较大,故又用运放和模拟开关搭建了一反相控制电路。

原理图当中,U15为用OP07搭建的电压跟随器,用于增大输入阻抗,减小输出阻抗,以减少对待测电压的影响。

U16为用OP07搭建的一反相器。

U1用于若发现待测电压为负,让待测电压反相后进入后续电路。

U6作用同U15。

U1用于控制是否将待测电压衰减1/4后进入后续电路。

U4和U7用于控制是否对电压进行衰减以及衰减多少。

U17作用同U15。

U2为用MC1403搭建的2V电压源,用于输出较准确的电压源给TC14433作为基准电压。

2 AD转换部分TC14433中,EOC与DU端相连,选择连续工作方式。

EOC与51单片机的中端口0相连,由中断方式采集数据。

中断0采集数据服务子程序如图2所示。

3 升降量程及量程状态指示灯显示程序控制升降量程即控制模拟开关4051和4052,是否对待测电压进行放大或衰减。

如何有效的控制量程的自动转换是一较难点,尤其是保证程序的健壮性。

智能仪器设计基础实验教学大纲

智能仪器设计基础实验教学大纲

智能仪器设计基础实验教学大纲一、制定本大纲的依据根据2006级测控技术与仪器专业培养计划和智能仪器设计基础课程教学大纲制定本实验教学大纲。

二、本实验课程的具体安排三、本实验课在该课程体系中的地位与作用智能仪器设计基础实验是智能仪器设计基础课程的重要组成部分, 属于学科基础实验范畴。

作为与相关教学内容配合的实践性教学环节, 应在智能仪器设计基础课教学过程中开设。

学生应具有微型计算机原理, 电子技术基础自动控制理论基础知识。

四、学生应达到的实验能力与标准智能仪器设计基础实验是本专业学生获得智能仪器知识及动手能力培养的开端, 要求学生通过本课程实验, 具备利用单片机技术解决实际控制问题的能力。

通过实验的训练, 使学生掌握智能仪器设计的基本方法和基本技能, 加深对智能仪器知识的理解, 掌握智能仪器设计方法。

五、讲授实验的基本理论与实验技术知识实验一基本运算程序设计1.实验的基本内容(1)顺序、分支、循环程序设计联系。

(2)比较程序设计。

(3)排序程序设计。

2.实验的基本要求(1)熟悉和掌握控制类程序的编写方法和设计技巧。

(2)初步进行程序调试和运行的练习。

3.实验的基本仪器设备计算机。

实验二定时器应用程序设计1.实验的基本内容编程使T0工作于定时方式, T1工作于计数方式, T1的外部计数脉冲由T0产生, 最后由T1产生方波通过P1.1输出(用发光二极管的闪烁来表示)。

P1.0接T1,P1.1接发光二极管。

2.实验的基本要求(1)理解MCS—51系列单片机定时器和计数器的概念和区别。

(2)掌握和熟悉单片机定时计数器的初始化编程。

(3)学会运用定时器的定时与计数设计方法。

3.实验的基本仪器设备和耗材计算机。

实验三A/D功能设计实验1.实验的基本内容利用0809做A/D转换实验, 通过电位器提供模拟量输入。

编制程序, 将模拟量转换成数字量, 通过发光二极管L1—L8显示。

2.实验的基本要求(1)掌握A/D转换与单片机的接口方法。

智能仪器课程设计报告

智能仪器课程设计报告

智能型温度测量仪报告题目:智能型温度测量仪院别:机电工程与自动化专业:生产过程自动化技术班级: xxx姓名: xxxXxxXxx指导老师: xxx目录引言................................................. 错误!未定义书签。

一、系统设计任务及要求........................................... - 2 -1.1系统设计任务 (2)1.2系统设计的基本要求 (2)1.3系统概述 (2)二、系统总体设计................................................. - 2 -整体设计方案的确定 (2)三、硬件电路设计及工作原理....................................... - 3 -3.1参数采集模块设计 (3)3.2显示温度模块和显示时钟介绍 (3)3.3具体硬件电路原理分析 (4)四、软件设计...................................................... - 7 -4.1主程序流程图 (7)4.2DS18B20温度读取程序(如图9) (8)4.3DS18B20温度传感器初始化 (8)4.4读出温度子程序 (9)4.5DS18B20的读写时序 (10)4.6按键流程图 (12)五、主要技术指标的测量........................................... - 12 -六、结论......................................................... - 13 -结束语........................................................... - 14 -附录:硬件原理图.................................................. - 15 -引言:温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量,也是工业控制中主要的被控参数之一。

基于C51单片机的智能仪器综合设计实验

基于C51单片机的智能仪器综合设计实验

基于单片机的智能仪器综合设计实验一、实验目的在实验一~实验三的基础上,完成综合设计实验,学会信号采集、数据处理、键盘控制、LCD或LED显示等功能的智能仪器设计。

二、复习与参考实验一~实验三三、设计指标利用K分度号热电偶进行温度检测,测温范围为500-1200ºC,室温为20ºC,用LCD或LED显示室温和测量温度。

具有4路温度信号循环检测功能,通道切换时间可调;具有任意指定通道显示功能。

四、实验要求1.选择传感器,设计硬件电路,包括检测电路、信号调理电路、AD转换电路、单片机最小系统、LED显示(单号)、LCD显示(双号)、独立式按键,画出电路原理图。

2.画出软件流程图。

3.用Keil C51编写程序。

3.实验结果在LCD或LED上显示出来。

4.实验前完成第1、2项备查。

五、实验仪器设备和材料清单PC机;单片机实验板、连接导线、ST7920图形液晶模块Keil c51软件六、实验成绩评定方法实验成绩包括预习、实验完成质量、实验报告质量3部分组成,各部分所占比例分别为30%、40%、30%。

八、实验报告要求实验报告格式:●实验名称●实验目的●实验内容●硬件设计●软件设计●调试过程●参考文献●附1:电路原理图●附2:程序清单附录:实验程序源代码如下:(陈寅)#include "reg51.h"#define THC0 0xee //5ms时间常数设置#define TLC0 0x00sbit ADWR=P3^6; /***WR*****/sbit ADRD=P3^7; /***RD*****/sbit ADCS=P2^7; /***CS*****/sbit EOC=P3^3; /***EOC****/sbit ADA=P1^3; //通道选择引脚sbit ADB=P1^4;sbit ADC=P1^5;sbit CS =P1^0; /****************/sbit SID=P1^1; /**液晶引脚定义**/sbit SCLK=P1^2; /****************/sbit MODE=P2^0; /*************************/sbit UP=P2^1; /*四个按键接口,0表示按下*/sbit DOWN=P2^2; /*************************/sbit LED1=P2^3; /**4个LED灯引脚定义**/sbit LED2=P2^4; /********************/sbit LED3=P2^5; /********************/sbit LED4=P2^6; /********************//***************500~1200°C范围的K分度表,间隔10*******************/ unsigned int code K_TABLE[71]={20644,21066,21493,21919,22346,22772,23198,23624,24050,24476,24902,25327,25751,26176,26599,27022,27445,27867,28288,28709,29128,29547,29965,30383,30799,31214,31629,32042,32455,32866,33277,33686,34095,34502,34909,35314,35718,36121,36524,36925,37325,37725,38122,38519,38915,39310,39703,40096,40488,40897,41296,41657,42045,42432,42817,43202,43585,43968,44349,44729,45108,45486,45863,46238,46612,46985,47356,47726,48095,48462,48828}; unsigned char GetAdData[10]={0}; //存放获得AD值的数组变量unsigned char ViewTemperature[4]={"0000"}; //显示温度缓冲数组变量unsigned MODESelect=1;int ChangeTime=2; //通道切换时间,单位Sint TongDao=1;void delay(unsigned int j){unsigned char i;do{for(i=0;i<100;i++);}while(j--);}void send_command(unsigned char command_data) //发送命令{unsigned char i;unsigned char i_data;i_data=0xf8; //操作命令,可以查看资料delay(10);CS=1;SCLK=0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void send_data(unsigned char command_data) //发送数据{unsigned char i;unsigned char i_data;i_data=0xfa; //操作命令,可以查看资料delay(10);CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f; //取低四位i_data<<=4; //左移四位,从而变成高四位for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void InitLCD() //液晶初始化{send_command(0x30); //功能设置:一次送8位数据,基本指令集send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x01); //清DDRAMsend_command(0x02); //DDRAM地址归位send_command(0x80); //把显示地址设为0X80,即为第一行的首位}/* x,y为起始座标x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;how为要显示汉字的个数;style为显示字符的类型,0表汉字,1表字母;str是要显示汉字的地址*/void Display(unsigned char x,unsigned char y,unsigned char how,bit style,unsigned char *stri) //液晶显示{unsigned char hi=0;if(x==0) send_command(0x80+y);else if(x==1) send_command(0x90+y);else if(x==2) send_command(0x88+y);else if(x==3) send_command(0x98+y);if(style==0){for(hi=0;hi<how;hi++){send_data(*(stri+hi*2));send_data(*(stri+hi*2+1));}}elsefor(hi=0;hi<how;hi++) send_data(*(stri+hi));}float LvBo(void)//复合滤波{unsigned char max,min,i;unsigned int sum=0;float U1;max=GetAdData[0];min=GetAdData[0];for(i=0;i<10;i++){sum=sum+GetAdData[i];if(max<GetAdData[i]) max=GetAdData[i];if(min>GetAdData[i]) min=GetAdData[i];}sum=sum-max-min;U1=(float)sum/8;U1=10.0*((U1*5.0)/255); //换成mvreturn U1;}void search (void)//查表子函数{unsigned int da=0,max,min,mid,j;unsigned int var;da=LvBo()*1000; //u1扩大1000倍da=da+798; //20度max=71;min=0;var=0;while(1){mid=(max+min)/2; //中心元素位置if(K_TABLE[mid]==da) {var=mid*10;break;} //中心元素等于查表元素,计算相应温度else if(K_TABLE[mid]>da) max=mid-1;else min=mid+1;if(max-min==1) /*线性插值计算温度值*/{j=(K_TABLE[max]-K_TABLE[min])/10; /*表中相邻两值对应温度相差10°C*/j=(da-K_TABLE[min])/j;var=10*min+j;break;}if(max==min){if(da>=K_TABLE[min]){j=(K_TABLE[min+1]-K_TABLE[min])/10;j=(da-K_TABLE[min])/j;}else if(da<K_TABLE[min]){j=(K_TABLE[min]-K_TABLE[min-1])/10;j=(da-K_TABLE[min-1])/j;min=min-1;}var=10*min+j;break;}}var=var+500;ViewTemperature[0]=var/1000+0x30;ViewTemperature[1]=var/100%10+0x30;ViewTemperature[2]=var/10%10+0x30;ViewTemperature[3]=var%10+0x30;}void LcdDisplay(void){unsigned char ViewMODESelect,ViewTongDao[5]={"0 "},ViewChangeTime[5]={"00(S)"};ViewMODESelect=MODESelect+0x30;ViewTongDao[0]=TongDao+0x30;if(MODESelect==1||MODESelect==2){if(MODESelect==1) Display(0,3,5,0,":自动切换");else if(MODESelect==2) Display(0,3,5,0,":手动切换");Display(0,0,2,0,"模式"); //液晶显示Display(0,2,1,1,&V iewMODESelect);Display(1,0,5,0,"温度通道:");Display(1,5,5,1,V iewTongDao);Display(2,0,4,0,"温度值:");Display(2,4,4,1,V iewTemperature);Display(2,6,2,1,"℃");}else if(MODESelect==3){ViewChangeTime[0]=ChangeTime/10+0x30;ViewChangeTime[1]=ChangeTime%10+0x30;Display(0,0,2,0,"模式");Display(0,2,1,1,&V iewMODESelect);Display(0,3,5,0,":设置时间");Display(1,0,5,0,"切换时间:");Display(1,5,5,1,V iewChangeTime);Display(2,0,14,1," "); //本行清屏}}void TDSelect(void) //AD通道设置{if(TongDao>=5) TongDao=1;if(TongDao<=0) TongDao=4;if(TongDao==1) {ADC=0;ADB=0;ADA=0;}else if(TongDao==2) {ADC=0;ADB=0;ADA=1;}else if(TongDao==3) {ADC=0;ADB=1;ADA=0;}else if(TongDao==4) {ADC=0;ADB=1;ADA=1;}}main(){unsigned char AdCount=0; //用来存放AD采集次数InitLCD();TMOD=0x11; //定时器0初始化TH0=THC0;TL0=TLC0;TR0=1;ET0=1;EA=1;P2|=0x07; //按键初始为高while(1){ADWR=1; /************/ADCS=0; /************/ADWR=0; /**AD初始化**/ADWR=1; /************/while(!EOC); //等待转换结束ADRD=0;GetAdData[AdCount]=P0; //读取转换结果AdCount++;if(AdCount>=10) //连续采集10次值{AdCount=0;search(); //查表LED1=!LED1;LcdDisplay(); //显示}}}void Timer0() interrupt 1{static unsigned char count=0,UPFlag=1,DOWNFlag=1; //按键标志位static unsigned int TimeCount=0;TH0=THC0;TL0=TLC0;if(MODE==0||UP==0||DOWN==0){count++;if(count>=30) //消抖处理{count=0;if(MODE==0) //按键按下{MODESelect++;if(MODESelect>=4) MODESelect=1;}else if(UP==0){UPFlag=0;if(MODESelect==2){TongDao++;TDSelect();}}else if(DOWN==0){DOWNFlag=0;if(MODESelect==2){TongDao--;TDSelect();}}}}else count=0;if(MODESelect==1){TimeCount++;if(TimeCount>=(ChangeTime*1000/5)){TimeCount=0;TongDao++;TDSelect();}}else if(MODESelect==3){if(UPFlag==0) {UPFlag=1;ChangeTime++;}else if(DOWNFlag==0){DOWNFlag=1;ChangeTime--;if(ChangeTime<=0) ChangeTime=1;}}}。

《智能仪器设计》课堂及实践教学探讨

《智能仪器设计》课堂及实践教学探讨

部分 , 除介绍常规 的R 224 2 8 、P I 通信 接 口外 , S 3/2/ 5 G —B 4 还介绍 U B S 通用 串行 总线 、 以太 网接 口技术 、 现场总线 ( A 、 A T Po — u等 )蓝牙接 口技术等 内容 , 用 C N H R 、rf b s 、 i 利
得了较好的效果 。 课堂教学 内容体 系及教学方法改革 课堂教学 内容 与先修课程微 机原理 、单 片机与嵌


入式 系统相衔 接 , 主要讲 授 : 据采集 技术 、 数 模拟 量与 控制信 号输 出技术 、 机接 口技 术 、 信接 口技术 、 人 通 数 字滤波方法 、误差 校正和量程 自动切换等数 据处理算 法、 智能仪器 的软件结构及 程序设计 方法 、 仪器 自检与 抗 干扰技术及其他 常用 的提高仪器仪 表可靠性 的硬软 件设计方法等 。 1 . 以应用 为主线 结合大作业组 织教学内容。 学过 教 程 中, 为强调仪器 仪表的整体概念 , 以大作业形 式给 出 若 干仪表设计 的实 际案例 , 结合课 堂教学 的不 同阶段 。 分模块设 计完成 。大作业包 括 : 自动供 水系统设计 、 多
新技术及其发展动 向。包括现代 传感技术 、 新型元器件 及智能芯 片 、 可编程器件 、 网络及通信技术等 。如通信
实的基础 。为不 断提高课程 的教学质量 , 我们在教学研 究与实践 中 , 断总结经验 , 不 在课 堂教学 、 验 、 实 课程设 计及 成绩考 核等具 体环节 中采 取 了一些有 效措施 , 取

2 化 仪器仪 表智 能化及相关新技术的教学 内容 。 强 课 堂教 学 中, 除介绍智 能仪器可 以 自动选择量 程 、 自动 存储测 量结果 、 显示, 印 、 打 自校准 、 自诊断等初级智 能 外 ,加强 了具有 更高层 次智 能水平仪 器方 面的知识 , 如: 分析 、 判断 、 推理 、 习等在智能仪器 中的实现 。同 学 时, 将模 糊数学 、 经 网络 、 神 专家 系统等方 面 的知识 引 入到智能仪器设计 。结合火电厂的一些控制设备 , 介绍 智能控制方 面知识的应用 , : 如 模糊控制 、 专家控制 、 自 适应控 制等。智能仪器 的发展与现代科学技 术密切相 关 ,因此教学 中也应关 注与仪 器仪表有关 的新理论 和

智能仪器课程设计——基于单片机的风速风向检测系统设计

智能仪器课程设计——基于单片机的风速风向检测系统设计

Wind_Drct ^= Wind_Gray;
Wind_Drct=Wind_Tbl[Wind_Drct]; / / 查表求
通信与信息处理
《自动化技术与应用》2 0 1 0 年第 2 9 卷第 8 期
Communication and Information Processing
出风向值 Wind_Tbl 数组里面依次存储的是二进制码对应的
序如下:
Unsigned int Wind_Drct=0; // 风向终值
Unsigned int Wind_Gray=0; // 风向初值
(格雷码)
if(KBA1==1)
// 通过 7 位输
入引脚值计算格雷码
Wind_Gray+=0x0001;
if(KBA2==1)
关键词:风速;风向;单片机;检测 中图分类号:TP368.1 文献标识码:B 文章编号:1003-7241(2010)08-0070-04
The Design of Wind Speed and Direction Detection System Based on Microcontroller
图 4 风速测量子程序流程图
4.2 风向测量程序设计
风向测量先测得 7 位格雷码的输入, 通过 7 位输入 值计算出格雷码, 再通过格雷码换算成二进制码, 最后 通过查表法得出风向角度。
格雷码(Gray code),又叫循环二进制码或反射二进 制码。格雷码属于可靠性编码, 是一种错误最小化的编 码方式, 因为, 自然二进制码可以直接由数 / 模转换器 转换成模拟信号, 但某些情况, 例如从十进制的 3 转换 成 4 时二进制码的每一位都要变, 使数字电路产生很大

1 引言

智能仪器

智能仪器


2.1 整体设计方案的确定 综合考虑,本设计采用基于STC89C52单片机与 DS18B20温度传感器,其整体框架图如下。
DS18B20
单 片 机
数码管
按键


温度传感器DS18B20芯片介绍与运用 DS18B20具有结构简单、体积小、功耗小、抗干扰 能力强、使用方便等优点。由于18B20芯片送出的温 度信号是数字信号,因此简化了A/D转换的设计,提 高了测量效率和精度。
按 键 : 取 消 设 置

4.1 单片机模块 说明:该该部分硬件是单片机模块,如下图:

用DS 18B20作为测温元件,DS18B20采用电源 供电方式(如图),此时DS18B20的1脚接地,2脚作 为信号线P3.2,3脚接+5V电源。DS18B20处于写 存储器操作和温度A/D转换操作时,总线上必须有 强的上拉 。
智能型温度仪器测试仪课程设计 小组成员: xxx xxx xxx 指导老师: xxx

由林良存编写程序、画原理图。 由范岩斌做ppt。 由林煌兴收集资料、写报告。

引言 系统设计 硬件设计 软件设计 结论 结束语


温度是日常生活、工业、医学、环境保护、化工、石油等 领域最常遇到的一个物理量,也是工业控制中主要的被控 参数之一。对温度的测量在现代工业中也是运用的越来越 广泛。而传感器主要用于测量,它的性能好坏直接影响系 统的性能。因此,不仅必须掌握各类传感器的结构、原理 及其性能指标,还必须懂得传感器经过适当的接口电路调 整才能满足信号的处理、显示和控制的要求,而且只有通 过对传感器应用实例的原理和智能传感器实例的分析了解, 才能将传感器和信息通信与信息处理结合起来,适应传感 器的生产、研制、开发和应用。 DS18B20是美国DALLAS半导体公司继DS1820之后最新 推出的一种改进型智能温度传感器。与传统的热敏电阻相 比,他能够直接读出被测温度并且可根据实际要求,因而 使用DS18B20可使系统结构更趋简单,可靠性更高。他 在测温精度、转换时间、传输距离、分辨率等方面较 DS1820有了很大的改进,给用户带来了更方便的使用和 更令人满意的效果。

单片机智能小车课程设计

单片机智能小车课程设计

单片机智能小车课程设计
一、课程的目的
本课程的目的是让学生学习如何使用单片机来构建智能小车,了解单片机的工作原理,掌握编程语言,完成智能小车的设计与制作,并将它应用到实际的解决方案当中。

二、课程的内容
本课程分为三个部分。

# 1. 单片机基础
本部分为学生提供单片机的相关理论知识,其中包括单片机工作原理、构建电路板等基础内容。

学生需要学习器件的原理、作用、施加电压的方式等。

# 2. 编程
本部分教学内容主要包括单片机的编程,需要学生掌握C语言和汇编语言的编程技巧,了解单片机的外部接口及它们的工作原理,学会使用汇编语言及相关软件操作系统等。

# 3. 实践
本部分主要让学生结合前两部分的内容,进行实践,将编程、接口等知识点应用到实际的智能小车中,实现从计划到实施的全部流程。

三、讲师及教材
本课程的讲授和教学由外聘的专业老师主讲,教材来源于国内外的单片机设计书籍及软件资料。

四、实验室设备
1. 智能小车实验室:配备了智能小车的电子元器件、电路板、外壳及测试仪器等,可以让学生进行智能小车设计与装配实验;
2. 编程实验室:配备了单片机软件开发工具、编程器及外部接口,用于学生的编程实验;
3. 课堂实验:课堂上展示完成的智能小车模型,并在学生观察的情况下,用编程语言完成小车的控制。

实验八 智能仪器

实验八   智能仪器

实验内容: (1)熟悉单片机应用系统的设计要领; (2)按图 1 中元器件及参数在 ISIS 中完成电路原理图的绘制; (3)在 uVision3 中,按图 2 及表 1 建立 7 个程序文件; (4)在 ISIS 中运行,实现一路电压信号输入和两路报警开关量输出控制功能。 软件编程: 该项目由 7 个程序文件组成,其中 6 个为 C 语言文件,一个为汇编语言文 件(串口输出功能采用汇编语言与 C51 语言混合编程) ,程序如下: (1)main.c 文件 void ad_init(); void control_thread(); void menu_thread(); void main() { ad_init(); while (1) { menu_thread(); control_thread(); }} (2)control.c 文件 #include<reg51.h> sbit P16=P1^6; sbit P17=P1^7; unsigned char ad(); void print(char name,unsigned int value); extern unsigned char param_value[2]; extern char menu_status; void control_thread() { unsigned char value=ad(); //A/D 转换 if(value>param_value[1]) { //根据采样值控制 LED 灯 P16=0; P17=1; } else if(value<=param_value[1]&& value>=param_value[0]) { P16=0; P17=0; } else { P16=1; P17=0;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2012-2013学年第一学期论文题目:单片机系统设计开发应用一智能仪器学院:计算机科学与信息工程专业:软件工程学号:姓名:高红斌日期:2013年12月 1日单片机系统设计开发应用—智能仪器一、设计要求及目的本实验通过一个单通道通用型智能仪器的软硬件系统设计,将这学期学过的单片机原理加以综合运用,以此掌握单片机应用系统的设计要领,本次试验设计的总体目标是一路电压信号输入和两路报警开关量输出控制功能,其中信号电压范围0—5VDC AD采样分辨率8bit ,数码管显示信息为:以为参数字符和三位十进制采样值,控制参数有两个,即下限报警值 L 和上线报警值H当采样值大于H时,高位报警继电器接通(用LED 状态灯D1亮表示);当采样值小于L时,下位报警继电器接通(用D2表示);当采样值介于L和H之间时,两路报警器功能均被解除(D1和D2均熄灭表示)实验环境元器件列表,*+JeP■ep里片机系统设计开发应用—智能仪器屮元器件満单*[74LSO41PRES PPOT-H屏MAXL241PLED-YELLO^*J CRYSTALPCAF-ELEEBUTTON-'AT89C51^ADC0809^AEC080&-'74LS245P74LS161IEC^74LS04^74HC59&^7SEG-WG-CC-BUJE^图表1四、实验原理本实验选用了一只六联共阴极数码管显示器,按照动态显示原理接线,其中段码通过锁存器74LS245驱动后接于P0 口,位码则有反相器74LS04驱动后接于。

A/D转换器采用逐次逼近方式的芯片ADC0809其并行数据输出端直接连接于 P2 口,4个控制端CLOCK,START,EO和,OE分别接于,采用查询法等待转换结束,转换时钟利用定时器中断产生。

四个面板按键通过8位微型计算机一台, proteus 软件,keilC编译器串行输入并行输出移位寄存器 74LS164与单片机接口,其移位时终端与单片机的TXD引脚相连,串行数据端(1和2脚)与单片机的RXD引脚相连,串口输出功能采用汇编语言与 C51语言混合编程实现。

软件系统采用一个有多个功能模块构成的程序,模块之间相互依赖,他们之间的关系如图,程序有主要的两个功能模块组成――控制模块和菜单模块。

这两个模块能够同时运行。

这里,“同时”的意思是指用户进行菜单操作的时候,程序还能采集数据并进行控制。

图表2软件系统结构组成“控制”和“菜单”这两个主要的模块都是建立在其他小模块的基础上的,比如控制模块建立在 A/D转换和LED显示的基础上,采单建立在按键检测和 LED显示的基础上,而按键检测又建立在串口输出的基础上。

下表列出了各个模块的主要函数。

图表3各个模块的主要函数和功能五、程序源代码// void ad」n it();void con trol_thread();void menu _thread();void mai n()ad_init();while (1){menu_thread();control_thread();}}//#define MENU_ON 0#define MENU_OFF 1#define MENU_NUM 2#define MENU_MAX 999#define MENU_MIN 0unsigned char param_value[] = {100, 150};char _menu_name[] = {'L','H'}; // 参数名的符号unsigned char menu_status = MENU_OFF;unsigned char _menu_value[] = {0,0}; // 供显示用的参数数组unsigned char _menu_idx = 0; // 参数序号char get_key();void print(char name, unsigned int value);void menu_thread(void){char i = 0;char key = get_key();if (menu_status == MENU_OFF){// 当前菜单为关闭状态时 if (key == 0)// 若按键 0 已被按下menu_status = MENU_ON; // 置当前菜单为打开状态_menu_idx = 0; // 设置参数序号 0// 将所有参数当前值取出,送入供显示的参数数组中for (i = 0 ; i < MENU_NUM ; i++){_menu_value[i] = param_value[i];}}} else{// 如果当前菜单为打开状态,则进行以下操作:if (key == 0){// 若按键 0 按下,则不保存键值,仅切换到下一个参数if (++_menu_idx == MENU_NUM){ // 判断是否所有参数都循环到了menu_status = MENU_OFF; // 若已循环完成,设置菜单关闭状态}} else if (key == 1){// 若按键 1 按下,则保存键值,并切换到下一个参数param_value[_menu_idx] = _menu_value[_menu_idx];if (++_menu_idx == MENU_NUM) {menu_status = MENU_OFF;}} else if (key == 2) {// 若按键 2 按下,则参数值加 10_menu_value[_menu_idx] += 10;if (_menu_value[_menu_idx] > MENU_MAX) {menu_value[_menu_idx] = MENU_MAX;} else if (key == 3) {// 若按键 3 按下,则参数值减 10 _menu_value[_menu_idx] -=10;if (_menu_value[_menu_idx] < MENU_MIN){ _menu_value[_menu_idx] = MENU_MIN;}}}if (menu_status == MENU_ON) {// 菜单状态为开时 , 显示参数值 print(_menu_name[_menu_idx],_menu_value[_menu_idx]);}}// #include <> sbit P32 = P3八2;sbit P33 = P3A3;sbit P34 = P3A4;sbit P35 = P3A5;sbit P37 = P3A7; unsigned char ad() { P33 = 0;P33 = 1;P33 = 0;while(!P34);P35 = 1;return P2;}void ad_init() {TMOD = 0x02;TH0 = 0;TL0 = 0;ET0 = 1;TR0 = 1;EA = 1;}void _ad_clock(void) interrupt 1 {P32 = ~P32;}//#include<>sbit P16=P1A6;sbit P17二PM7;unsigned char ad();void print(char name, unsigned int value); extern unsigned char param_value[2]; extern char menu_status;void control_thread() {//第1步:A/D转换unsigned char value = ad();//第2步:根据采样值控制LED灯if (value > param_value[1]) {P16 = 0;P17 = 1;} else if (value <= param_value[1] && value param_value[0]) {>= P16 = 0;P17 = 0;} else {P16 = 1;P17 = 0;// 第 3步: 如果菜单是关闭的,显示采集到的数值if (menu_status == 1) {print(' ', value);}}//#include <>#define CHECK_KEY_DOWN 0 段标志#define CHECK_KEY_UP 1段标志#define KEY_UP 0#define KEY_DOWN 1sbit _p33 = P3八3;sbit _p34 = P3A4;sbit _p35 = P3A5;sbit _p36 = P3八6;// 处在检测按键压下阶// 处在检测按键抬起阶// 按键抬起标志// 按键压下标志char _key_status = CHECK_KEY_DOWN; // 按键检测状态(初值为检测压下阶段)char _key_idx = 0; // 按键序号void serial(char byte);char _check_key(unsigned char _key_idx) { // 检查按键状态serial(~(0x01<<_key_idx)); // 将待查按键键码转换成扫描码后输出if (_p36 == 0) { //根据P36状态决定返回值return KEY_DOWN;} else {return KEY_UP;}} char get_key(void) {char result = -1; // 无键按下时键值为 -1if (_key_status == CHECK_KEY_DOWN) { // 如果当前处于检查压下阶段,进行以下操作if (_check_key(_key_idx) == KEY_DOWN) { // 判断当前扫描键的状态,若为压下标志则_key_status = CHECK_KEY_UP; // 将检查阶段标志设置为抬起} else { // 否则,将检查阶段标志设置为压下if (++_key_idx == 4) { // 判断是否 4 个按键已经轮流扫描一遍_key_idx = 0; // 是,则将待扫描按键号设为 0 }}} else if (_key_status == CHECK_KEY_UP) { // 如果当前处于检查抬起阶段,进行以下操作if (_check_key(_key_idx) == KEY_UP) { // 判断当前扫描键的状态,若为抬起标志则result = _key_idx; // 键值输出_key_status = CHECK_KEY_DOWN; //按键检查阶段标志改为压下if (++_key_idx == 4) { // 判断是否 4 个按键已经轮流扫描一遍_key_idx = 0; // 是,则将待扫描按键号设为 0 }}}return result;}// #include<>char codemap1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};char code map2[]={0x00,0x76,0x38};char _convert(char c){ if(c==' ')return map2[0];else if(c=='H')return map2[1];else if(c=='L')return map2[2];else if(c>='0'&&c<='9')return map1[c-'0'];return 0;}void _delay(){int i=0,j=0;for(i=0;i<10;i++){ for(j=0;j<10;j++){}}void print(char name, unsigned int value) { char buf[6];char i = 5;for (i = 5 ; i > 1 ; i--) {buf[i] = '0' + value % 10;value /= 10;if (value == 0) {break;}}i--;for ( ; i >= 1 ; i--) {buf[i] =}buf[0] = name;for (i = 0 ;i < 6 ;i++) {P1 &= 0xC0;P1 |= (1 << i);P0 = _convert(buf[i]);delay();}}//PUBLIC _SERIALDE SEGMENT CODERSEG DESERIAL:1MOVscoz #0MOVSBURR7JNBT「SCLRT-RETENDF「 = 丿 逵乍・S H 6W ・aALlADd hJ cb密I I T L fl H s t d筑和耳审丘耳2世$kM 3F Jnig&VHairvc--ATEi- a Fr 'E i rl^?Brevet呢^也F l lb i I O E1-*'s n 审l£n丹% ydp■ -LJ1IX A c Q [ff s d 及一啊情*辭苗挪K字空誉 '宦血曲a ¥瞥莎已3 i e E ^3l 堆k T ・llef「»a^4&weiMUIT U?T ・^・ J|[Im 诃宦©d E-p1-凶专芸T u p bs莎33 E個-阿L h-DITW-J1-E C口斗u h--E 諾g 5r h■a -l^k^bcdnd.c,1r書F hT ・ErnainxQJPUI WirdlJrt ttll l l i l业-ta&el:・-|431说专1・ D m ee 口b 1 l口也 ⑷IARTUP-A51 ・: 乳c M P M J a l i E n Q n pi l i H g n o s n p -l」i s qn l3:Tlp.l1l b g lQ 营p H l K-ug nolmpiliTig m ILJJ 卓■ I b二s1 1口一 ■p h ag b'B J l m -l K q Brdnto-=2.E ・!3Md 口一.CLhun口d nz i a:业 UnlreAtiRIg he-N File 「com=9H a 0d ・・- r Q M H sg Mg 】用 蛊 m lg ba @・一莎史 n 05J .-s - * 」『F T-” 】fL L E -n ■:-n - i B contlTD l-h --- k ^y tr d q r d- c-・-IMlmn ・:「山 ETiw1・ 05g h l<a IL刃鱼耳5一IE 1\E;2m =l e E}r y丁耳:町T dLT$呂艮i I L i -rt-10voidaQritrl I l l i一tua u t o ・ 「voidB d L i a.T crlll 014图表 4程序通过编译,并且没有错误系统运行效果如图所示,参数设置状态效果如图所示。

相关文档
最新文档