1、单片机系统课 程 设 计成绩评定表设计课题 : 压力检测系统设计 学院名称 : 电气工程学院 专业班级 : 自动1304 学生姓名 : 赵博 学 号 : 23020417 指导老师 : 王黎 周刚 李攀峰 设计地点 : 31-505 设计时间 : -12-28-01-08 指导老师意见:成绩: 署名: 年 月 日单片机系统课 程 设 计课程设计名称: 压力检测系统设计 专 业 班 级 : 自动1304 学 生 姓 名 : 赵博 学 号 : 23020417 指 导 教 师 : 王黎 周刚 李攀峰 课程设计地点: 31-505 课程设计时间: -12-28-01-08 单片机系统 课程设计任务书
2、学生姓名赵博专业班级自动1304学号题 目压力检测系统设计课题性质工程设计课题起源自拟指导老师王黎 周刚 李攀峰关键内容(参数)利用89C51单片机设计一个压力检测系统设计,实现功效以下: 经过压力传感器将压力转换成电信号,再经过运算放大器进行信号放大,送至8位AD转换器,然后将模拟信号转换成单片机能够识别数字信号,再经单片机转换成LED显示器能够识别信息,最终显示输出。而在显示过程中经过键盘,向计算机系统输入多种数据和命令,让单片机系统处于预定功效状态,显示需要值。任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第3-4天:根据确定方案设计单元电路。要求画出单
3、元电路图,元件及元件参数选择要有依据,各单元电路设计要有具体叙述。第5-6天:软件设计,编写程序。第7-8天:试验室调试。第9-10天:撰写课程设计汇报。要求内容完整、图表清楚、文理流畅、格式规范、方案合理、设计正确,篇幅合理。关键参考资料1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,2伟福LAB6000系列单片机仿真试验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,审查意见系(教研室)主任签字: 年 月 日 目录1绪论41.1压力检测系统概述42总体方案设计原理42.1 基于单片机智能压力检测原理42.2 压力传感器52.2.1 压力传
4、感器选择52.2.2金属电阻应变片工作原理52.3 A/D转换器62.3.1 A/D转换模块器件选择62.3.2 A/D转换器介绍62.4单片机72.4.1 AT89C51单片机介绍72.4.2关键特征82.4.3 管脚说明92.5单片机于键盘接口技术92.5.1 键盘功效及结构概述92.5.2 单片机和键盘连接102.6 LED显示接口122.6.1 LED显示器122.6.2七段数码显示器132.6.3LED数码管静态显示接口143软件设计153.1 A/D转换器软件设计153.1.1 ADC0832芯片接口程序编写153.2 单片机和键盘接口程序设计173.3 LED数码管显示程序设计1
5、8总结21参考文件21附录A22附录B231绪论1.1压力检测系统概述压力是工业生产过程中关键参数之一。压力检测或控制是确保生产和设备安全运行必不可少条件。实现智能化压力检测系统对工业过程控制含有很关键意义。本设计关键经过单片机及专用芯片对传感器所测得模拟信号进行处理,使其完成智能化功效。介绍了智能压力传感器外围电路硬件设计,并依据硬件进行了软件编程。此次设计是基于AT89C51单片机测量和显示。是经过压力传感器将压力转换成电信号,再经过运算放大器进行信号放大,送至8位AD转换器,然后将模拟信号转换成单片机能够识别数字信号,再经单片机转换成LED显示器能够识别信息,最终显示输出。而在显示过程中
6、经过键盘,向计算机系统输入多种数据和命令,让单片机系统处于预定功效状态,显示需要值。本设计最终止果是,将软件下载到硬件上调试出来了需要显示数据,当输入模拟信号发生改变时候,经过A/D转换后,LED将显示不一样数值。2总体方案设计原理2.1 基于单片机智能压力检测原理 此次设计是以单片机组成压力测量,系统中必需有前向通道作为电信号输入通道,用来采集输入信息。压力测量,需要传感器,利用传感器将压力转换成电信号后,再经放大并经A/D转换为数字量后才能由计算机进行有效处理。然后用LED进行显示,而键盘作用是改变输入量系数。它原理图图1.1所表示。压力传感器放大器显示单片机A/D转换键盘图1.1 压力测
7、量仪表原理方框图我们这次关键做是A/D转换,单片机键盘和显示,我们选择A/D转换器是ADC0832,单片机为AT89C51,键盘为4乘4键盘,显示为4位数码管显示。依据硬件电路编程,调试出来并显示结果。2.2 压力传感器2.2.1 压力传感器选择压力传感器是压力检测系统中关键组成部分,由多种压力敏感元件将被测压力信号转换成轻易测量电信号作输出,给显示仪表显示压力值,或供控制和报警使用。力学传感器种类繁多,如电阻应变片压力传感器、半导体应变片压力传感器、压阻式压力传感器、电感式压力传感器、电容式压力传感器谐振式压力传感器及电容式加速度传感器等。 而电阻应变式传感器含有悠久历史。因为它含有结构简单
8、、体积小、使用方便、性能稳定、可靠、灵敏度高动态响应快、适合静态及动态测量、测量精度高等很多优点,所以是现在应用最广泛传感器之一。电阻应变式传感器由弹性元件和电阻应变片组成,当弹性元件感受到物理量时,其表面产生应变,粘贴在弹性元件表面电阻应变片电阻值将伴随弹性元件应变而对应改变。经过测量电阻应变片电阻值改变,能够用来测量位移加速度、力、力矩、压力等多种参数。2.2.2金属电阻应变片工作原理应变式压力传感器是把压力改变转换成电阻值改变来进行测量,应变片是由金属导体或半导体制成电阻体,是一个将被测件上应变改变转换成为一个电信号敏感器件。它是压阻式应变传感器关键组成部分之一。当金属丝受外力作用时,其
9、长度和截面积全部会发生改变,从上式中可很轻易看出,其电阻值即会发生改变,假如金属丝受外力作用而伸长时,其长度增加,而截面积降低,电阻值便会增大。当金属丝受外力作用而压缩时,长度减小而截面增加,电阻值则会减小。只要测出加在电阻改变(通常是测量电阻两端电压),即可取得应变金属丝应变情。2.3 A/D转换器模拟量输入通道任务是将模拟量转换成数字量。能够完成这一任务器件称之为模数转换器,简称A/D转换器。此次设计中A/D转换器任务是将放大器输出模拟信号转换位数字量进行输出。2.3.1 A/D转换模块器件选择现在单片机在电子产品中已得到广泛应用,很多类型单片机内部已带有A/D转换电路,但这类单片机会比无
10、A/D转换功效单片机在价格上高几元甚至很多,我们采取一个一般单片机加上一个A/D转换器,实现A/D转换功效,这里A/D转换器可选ADC0832、ADC0809等;串行和并行接口模式是A/D转换器很多分类中一个,但却是应用中器件选择一个关键指标。在一样转换分辨率及转换速度前提下,不一样接口方法会对电路结构及采取周期产生影响。对A/D转换器选择我们经过比较ADC0809和ADC0832来决定。这两个转换器全部是常见A/D转换器,其中ADC0809并行接口A/D转换器,ADC0832是串行接口A/D转换器。我们所做设计选择ADC0832,A/D转换在单片机接口中应用广泛 ,串行 A/D转换器含有功耗
11、低、性价比较高、芯片引脚少等特点。2.3.2 A/D转换器介绍在这次设计中我们A/D转换器选择两通道输入八位ADC0832,ADC08323是美国国家半导体企业生产一个8 位分辨率、双通道A/D转换芯片。因为它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其现在已经有很高普及率。ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,能够适应通常模拟量转换要求。其内部电源输入和参考电压复用,使得芯片模拟电压输入在05V之间。芯片转换时间仅为32S,据有双数据输出可作为数据校验,以降低数据误差,转换速度快且稳定性能强。独立芯片使能输入,使多器件挂接和处理器控制变得愈加方便。
12、经过DI 数据输入端,能够轻易实现通道功效选择。相关引脚说明以下: CS 片选使能,低电平芯片使能。 CH0 模拟输入通道0,或作为IN+/-使用。 CH1 模拟输入通道1,或作为IN+/-使用。 GND 芯片参考0电位(地)。 DI 数据信号输入,选择通道控制。 DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参考电压输入(复用)。正常情况下ADC0832 和单片机接口应为4条数据线,分别是CS、CLK、DO、DI。它结构示意图图2.6所表示。图2.3 ADC0832结构示意图2.4单片机伴随电子技术发展,单片机功效将愈加完善,所以单片机应用将愈加普及。
13、它们将在智能化仪器、家电产品、工业过程控制等方面得到更广泛应用。单片机将是智能化仪器和中、小型控制系统中应用最多有种微型计算机。2.4.1 AT89C51单片机介绍 AT89C51是一个带4K字节闪烁可编程可擦除只读存放低电压,高性能CMOS8位微处理器,俗称单片机。单片机可擦除只读存放器能够反复擦除100次。该器件采取ATMEL高密度非易失存放器制造技术制造,和工业标准MCS-51指令集和输出管脚相兼容。因为将多功效8位CPU和闪烁存放器组合在单个芯片中,ATMELAT89C51是一个高效微控制器,AT89C2051是它一个精简版本,图2.9所表示。AT89C51单机为很多嵌入式控制系统提供
14、灵活性高且廉价方案。图2.4 AT89C51单片机结构示意图2.4.2关键特征和MCS-51 兼容 4K字节可编程闪烁存放器 寿命:1000写/擦循环数据保留时间:全静态工作:0Hz-24Hz三级程序存放器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中止源 可编程串行通道低功耗闲置和掉电模式片内振荡器和时钟电路2.4.3 管脚说明VCC:供电电压。 GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存放器,它能够被定义为数据/地址第八位。在FIASH编程时,P0
15、口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必需被拉高。P1口:P1口是一个内部提供上拉电阻8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是因为内部上拉缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并所以作为输入时,P2口管脚被外部拉低,将输出电流。这是因为内部上拉缘故。P2口当用于外部程序存放器或16位地址
16、外部数据存放器进行存取时,P2口输出地址高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存放器进行读写时,P2口输出其特殊功效寄存器内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,因为外部下拉为低电平,P3口将输出电流(ILL)这是因为上拉缘故。P3口也可作为AT89C51部分特殊功效口。2.5单片机于键盘接口技术2.5.1 键盘功效及结构概述键盘是单片机系统实现人机对话常见输入设备。操作员经过键盘,向计算机系
17、统输入多种数据和命令,亦可经过使用键盘,让单片机系统处于预定功效状态。键盘根据其内部不一样电路结构,可分为编码键盘和非编码键盘二种。编码键盘本身除了带有一般按键之外,还包含产生键码硬件电路。使用时,只要按下编码键盘某一个键,硬件逻辑会自动提供被按下键键码,使用十分方便,但价格较贵。由非编码键盘组成简单硬件电路,仅提供各个键被按下信息,其它工作由软件来实现。因为价格廉价,而且使用灵活,所以广泛应用在单片机应用系统中。 非编码键盘根据其键盘排列结构,又可分为独立式按键和行列式按键两种类型。2.5.2 单片机和键盘连接键盘和单片机连接在单片机系统中键盘中按钮数量较多时,为了降低I/O口占用,常常将按
18、钮排列成矩阵形式,如2.13图所表示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是经过一个按钮加以连接。这么,一个端口(如P1口)就能组成4*4=16个按钮,比之直接将端口线用于键盘多出了一倍,而且线数越多,区分越显著,比如再多加一条线就能组成20键键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要键数比较多时,采取矩阵法来做键盘是合理。在实际应用中,44键盘关键由数字09和功效键组成。这里给出一个比较常见键盘排列方法,如表2.5所表示。表2.5 按键表123命令456功效789确定0上移下移退出 根据键盘和单片机连接方法可分为独立式键盘和矩阵式键盘。独立式键盘相互独立
19、,每个按键占用一根I/O口线,每根I/O口线上按键工作状态不会影响其它按键工作状态。图2.12所表示这种按键软件程序简单,但占用I/O口线较多(一根口线只能接一个键),适适用于键盘应用数量较少系统中。 图2.5.1独立式按键接口电路于独立是按键接口电路要比较矩阵式结构键盘显然比直接法要复杂部分,识别也要复杂部分图2.13所表示。图2.5.2 单片机矩阵式键盘接口电路上图中列线经过电阻接正电源,并将行线所接单片机I/O口作为输出端,而列线所接I/O口则作为输入。这么,当按钮没有按下时,全部输出端全部是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这么,经过读入输入线状
20、态就可得悉是否有键按下了。具体识别及编程措施以下所述。矩阵式键盘按钮识别措施 确定矩阵式键盘上何键被按下介绍一个“行扫描法”。行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一个最常见按钮识别措施,如上图所表示键盘,介绍过程以下。判定键盘中有没有键按下 将全部行线Y0-Y3置低电平,然后检测列线状态。只要有一列电平为低,则表示键盘中有键被按下,而且闭合键在低电平线和4根行线相交叉4个按钮之中。若全部列线均为高电平,则键盘中无键按下。 判定闭合键所在位置 在确定有键按下后,即可进入确定具体闭合键过程。其措施是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为
21、低电平后,再逐行检测各列线电平状态。若某列为低,则该列线和置为低电平行线交叉处按钮就是闭合按钮。 2.6 LED显示接口此次设计是利用89C51单片机串行口和74LS164移位寄存器实现多个LED显示一个方法,利用该方法设计多路LED显示系统含有硬件结构简单、软件编程轻易和价格低廉等特点.2.6.1 LED显示器LED显示器中发光二极管共有两种连接方法:共阳极接法把发光二极管阳极连在一起组成公共阳极。使用时公共阳极接5V。阴极端输入低电平段发光二极管导通点亮,输入高电平则不点亮。共阴极接法把发光二极管阴极连在一起组成公共阴极。使用时会共阴极接地,阳极端输入高电平段发光二极管导通点亮,输入低电平
22、则不点亮。图2.6.1 LED显示用LED显示器显示十六进制数字型代码以下表所表示:表2.6 十六进制数字形代码2.6.2七段数码显示器七段LED显示器需要由驱动电路驱动。在七段LED显示器中,共阳极显示器,用低电平驱动;共阴极显示器,用高电平驱动。点亮显示器有静态和动态两种方法。2.6.3动态显示所谓动态显示就是一位一位地轮番点亮各位显示器(扫描),对于显示器每一位而言,每隔一段时间点亮一次。在同一时刻只有一位显示器在工作(点亮),利用人眼视觉暂留效应和发光二极管熄灭时余辉效应,看到却是多个字符“同时”显示图2.17所表示。图2.6.1四位动态显示电路显示器亮度既和点亮时导通电流相关,也和点
23、亮时间和间隔时间百分比相关。调整电流和时间参数,可实现亮度较高较稳定显示。动态显示器优点是节省硬件资源,成本较低。但在控制系统运行过程中,要确保显示器正常显示,CPU必需每隔一段时间实施一次显示子程序,占用CPU大量时间,降低了CPU工作效率,同时显示亮度较静态显示器低。若显示器位数小于8位,则控制显示器公共极电位只需一个8位I/O口(称为扫描口或字位口),控制各位LED显示器所显示字形也需要一个8位口(称为数据)。2.6.4 LED数码管静态显示接口在单片机应用系统中,数码管显示器显示常见两种措施:静态显示和动态扫描显示。基于LED优点在此次设计中采取了数码管静态显示。所谓静态显示,就是每一
24、个数码管显示器全部要占用单独含有锁存功效I/O接口用于笔划段字形代码。这么单片机只要把要显示字形代码发送到接口电路,就不用管它了,直到要显示新数据时,再发送新字形码,所以,使用这种措施单片机中CPU开销小。能供给单独锁存I/O接口电路很多,常见串并转换电路74LS164,她电路图2.18所表示。图2.6.2 静态LED显示电路MCS-51单片机串行口方法为移们寄存器方法,外接4片74LS164作为4位LED数码管显示器静态显示接口,把AT89C51RXD作为数据输出线,TXD作为移位时钟脉冲。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据
25、输入端,2个管脚按逻辑和运算规律输入信号,共公一个输入信号时可并接。CLK(第8脚)为时钟输入端,可连接到串行口TXD端。每一个时钟信号上升沿加到CLK端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。R(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。Q1Q8(第3-6和10-13管脚)并行输出端分别接LED数码管显示器hg-a各段对应管脚上。在74LS164取得时钟脉冲瞬间(是在脉冲下降沿),假如数据输入端(第1,2管脚)是高电平,则就会有一个1进入到74LS164内部,假如数据输入端是低电平,则就会有一个0进入其内部。在给
26、出了8个脉冲后,最优异入74LS164第一个数据抵达了最高位,再来一个脉冲,第一个脉冲就会从最高位移出。 6片7LS164首尾相串,而时钟端则接在一起,这么,当输入8个脉冲时,从单片机RXD端输出数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新数据则进入了第一片74LS164,这么,当第六个8个脉冲完成后,首次送出数据被送到了最左面74LS164中,其它数据依次出现在第一、二、三、四、五片74LS164中。3软件设计3.1 A/D转换器软件设计单片机控制系统中通常要用到AD转换,依据输出格式,常见AD转换方法可分为并行AD和串行AD。
27、并行方法通常在转换后可直接接收,但芯片引脚比较多;串行方法所用芯片引脚少,封装小,但需要软件处理才能得到所需要数据。可是单片机I/O引脚原来就不多,使用串行器件能够节省I/O资源。ADC0832是位逐次迫近模数转换器,可支持两个单端输入通道和一个差分输入通道。相同功效器件还有ADC0834,ADC0838,ADC0831。所不一样是它们输入通道数量不一样。它们通道选择和配置全部是经过软件设置。3.1.1 ADC0832芯片接口程序编写 单片机串行工作方法时 ,串行口是作为同时移位寄存器使用。这时以 P3.3端作为数据移位入口和出口 ,而由P3.6端提供移位时钟脉冲。单片机串行口方法 0和 AD
28、C0832接口,单片机P2.0接ADC0832CS,P3.6接0832CLK作为时钟信号输出端 ,P3.7 接 0832 DO和DI作为开启位、配置位发送端和 A/D转换后输出数据接收端。因为 ADC0832在 CS变低后前 3个周期内,DO端为高阻态;转换开始后 ,DI线严禁 ,所以 ,DI端和 DO端可连接在一起。ADC0832时钟频率最高为 400kHz,单片机晶振可选择 4MHz,在 TXD输出频率为 4MHz/12 =333. 3kHz,符合要求。ADC0832输出串行数据共 15位 ,由两段 8位数据组成 ,前一段是最高位在先 ,后一段是最高在后 ,两段数据最低位共用。只有在时钟下
29、降沿 ,ADC0832串行数据才移出一位。由单片机控制时钟信号发送 ,并由P3.6发出 ,以达成控制 ADC0832输出数据位目标。为了得到一列完整 8位数据 ,单片机分两次采集含有不一样位数据 ,再合成一列完整 8位数据。 ADC0832经过内部多路器来控制选择通道,处理器控制命令经过DI引脚输入。以下步骤图所表示,当模拟信号输入开始后,首先是CS使能信号也就是片选信号有效,这时是低电平有效,假如片选是高电平时停止转换。当初钟信号有效时输入通道控制字来确定所选择通道,读取数据后就开始将模拟量转换位数字量,A/D转换结束后,单片机读取数值,假如没转换完,又回到使能开始。 图3.1 ADC083
30、2数据读取程序步骤3.2 单片机和键盘接口程序设计AT89C51单片机P1口用作键盘I/O口,键盘列线接到P1口低4位,键盘行线接到P1口高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。检测目前是否有键被按下。检测措施是P1.4-P1.7输出全“0”,读取P1.0-P1.3状态,若P1.0-P1.3为全“1”,则无键闭合,不然有键闭合。 去除键抖动。当检测到有键按下后,延时一段时间再做下一步检测判定。 若有键被按下,应识别出是哪一个键闭合。措施是对键盘行线进行扫描。
31、P1.4-P1.7按下述4种组合依次输出: P1.7 1 1 1 0 P1.6 1 1 0 1 P1.5 1 0 1 1 P1.4 0 1 1 1 在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,不然有键闭合。由此得到闭合键行值和列值,然后可采取计算法或查表法将闭合键行值和列值转换成所定义键值。为了确保键每闭合一次CPU仅作一次处理,必需却除键释放时抖动。 从以上分析得到单片机键盘扫描程序步骤图图3.2所表示。程序以下 图3.2单片机矩阵式键盘接口步骤图3.3 LED数码管显示程序设计利用单片机内部串行接口,能够实现静态显示处理。这么不仅能够节省单片机并行接
32、口资源,而且在大多数不使用串行接口情况下,能够降低或是免去扩展接口。在这种设计中,串行口工作于方法0,数据输入输出全部经过RxD实现,移位脉冲则由TxD发出。每次传送一个字节数据。每输出一个字节数据,单片机自动使串行中止请求标志TI置。经过测试该状态,即可确定该字节是否发送完成。由硬件电路图可知,74LS164是串行输入并行输出移位寄存器。它含有两个串行输入端和8位并行输出端(QAQH)。当显示数据从RxD端输出到移位寄存器74LS164输入端AB时,74LS164将串行数据转换成8位输出码QAQH,然后加到共阳极LED显示器上。到底在哪一位上显示,还要P1口状态而定。当某一位为低电平时,该位
33、LED显示,其它位不显示。因为接口电路中显示模型输出地址和位选信号可一次选中,故只要一次输出即可显示一位。开始初始化取待显示字符查笔段码送显示缓冲区修改缓冲区指针4位显示结束结束图3.3 LED显示步骤图4.系统调试根据试验原理图连线,连接好线路后,打开电源,一个砝码一个砝码放,观察万能表示数和数码示数是否一致,并观察电压示数改变是否为定值。经过试验发觉二者示数基础一致,误差为0.01,在误差许可范围内,很正确。 (试验模板) (所焊板子及电压显示)总结在设计中碰到不少困难,这对自己是一个考验,刚开始拿到题目标时候头绪并不是很多,经过查阅资料对整个系统有了一定认识。在设计前我重新学习了一遍单片
34、机知识,包含芯片接口和51系列单片机指令等。串行A/D转换器ADC0832是新接触一个芯片,除学习芯片功效外,关键了解了对芯片串行输出控制,这里软件设计是一个难点,我们这次用是用PROTEI99绘图软件,我们以前学过不过学不深这对我来说是个难点,不过经过看书和同学老师帮忙,使得我画好了原理图和PCB版出图。还有就是焊版,焊不好就无法显示要数据,调试是最关键时候,刚开始时候没有显示,在修改程序时候花了不少时间最终,最终显示能够想要结果。当程序下载到焊版时候,首先是显示0000,假如改变滑动变阻器时,经过ADC0832就能够显示不一样数据,我做首先是采集模拟量,然后显示需要数据。我认为我们专业学习
35、硬件知识相对比软件多,所以在软件设计方面我还有很大不足。程序设计经过“学习模拟编写修改再修改定型”等阶段,在软件学习上我也花了比较多时间和精力,让我欣慰是收获也很大。参考文件1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,2 keil软件单片机仿真试验系统使用说明书3 严天峰.单片机应用系统设计和仿真调试.北京:北京航空航天大学出版社,4 阎石数字电路技术基础(第五版)北京:高等教育出版社,5 夏路易,石宗义.电路原理图和电路板设计教程Protel 99se.北京:北京期望电子出版社,附录A硬件原理图附录B#include#include#include#incl
36、ude #define uint unsigned int#define uchar unsigned char#define ADC0832CH0 channel;/*定义变量区*sbit clk_adc0832=P36; /定义各个控制引脚sbit cs_adc0832=P20;sbit di_adc0832=P37;sbit do_adc0832=P37;sbit LED0_CS=P10;sbit LED1_CS=P11;sbit LED2_CS=P12;sbit LED3_CS=P13;sbit adarm=P22;uchar code table11=0xc0,0xf9,0xa4,0
37、xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff;/0,1,2,3,4,5,6,7,8,9,off /共阳极笔端码uchar ch; /采样返回数据/*函数申明区*void tkey(void); /键盘函数unsigned runADC0832(bit); /A/D转换void Delayms(uint x); /延时显示函数void Update_LED(); /LED显示函数void LED_analyze();/*主函数开始*void main()P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF;Uart_Init();TH0=0x3C
38、;TL0=0xAF;ET0=1; /开外部中止0EA=1; /全局中止打开TR0=1;nCounter=0;Change_Flag=0;while(1)void tkey(void);runADC0832(); if(Change_Flag=1) Update_LED(); if(ch9999) ch=0; printf(counter refreshed %d n,ch); delay(); /*矩键查寻键值4*4程序*/按键为P1.0-P1.7void Tkey(void)uchar readkey;/rereadkey;uchar x_temp,y_temp;P1=0x0f;x_temp
39、=P1&0x0f;if(x_temp=0x0f) goto keyout;P1=0xf0;y_temp=P1&0xf0;readkey=x_temp|y_temp;readkey=readkey;switch(readkey)case 0x11:key=0; break;case 0x21:key=1; break;case 0x41:key=2; break;case 0x81:key=3; break;case 0x12:key=4; break;case 0x22:key=5; break;case 0x42:key=6; break;case 0x82:key=7; break;cas
40、e 0x14:key=8; break;case 0x24:key=9; break;case 0x44:key=10;break;case 0x84:key=11;break;case 0x18:key=12;break;case 0x28:key=13;break;case 0x48:key=14;break;case 0x88:key=15;break;default:key=16;break;keyout:_nop_();/*A/D转换子程序开始*unsigned runADC0832(void) /读ADC0832函数uchar i=0; uchar j; uint dat=0; u
41、char ndat=0; if(channel=0)channel=2; if(channel=1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;/拉低CS端 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 ADDI=(channel1)&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i8;i+) dat|=ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100