1、Comment 微微微微1: 页:1调整字体大小Comment 微微微微2: 页:1Comment 微微微微3: 页:1不是采用表格的形式合肥学院计算机科学与技术系微机原理与接口技术课程设计20082009 学年第一学期课程设计科目 电烤箱温度控制系统学生姓名 张 群学号 0604031026班级 网络工程(1)班指导教师 张 向 东Comment 微微微微4: 页:2这部分可以先介绍都采用了那些硬件,各硬件如何相连Comment 微微微微5: 页:2表述有错Comment 微微微微6: 页:2软件部分可以描述为了实现功能都设计了哪些模块,各模块的实现方法。2009年 2月1、题义分析与解决方
2、案1、题义需求分析在 STAR ES598PCI单板开发机上实现对电烤箱温度和时间的控制功能。设计要求:(1)通过键盘设定温度和加热时间。(2)使用 DS18B20采集温度,采用七段数码管显示当前温度和剩余时间,并和设置的温度进行比较。(3)当温度低于设定值时,通过 DAC0832输出电压供给发热电阻 RT1,使其温度升高。(4)使温度恒定在设定温度附近,时间到了停止加热,并提示操作完毕。2、解决问题的方法与思路(1)硬件部分选择 8279芯片和七段 LED显示器与键盘相连,8279 的扫描输出信号经译码器译码,三根输出线 Y0Y7作为矩阵键盘的行扫描信号,返回信号 RL0RL7与矩阵键盘的
3、8个列输出信号相连接,扫描输出信号经另一译码器产生的 8个输出信号作为 8个显示器的选通信号,即位选信号,轮流刷新 8个显示器。8255A PC0口接 DS18B20,接收采集的温度值,PC4 口接警报器,用于时间结束是的报警。DACO832 输出电压,对电阻 RT1进行加热,使温度维持在一定范围。(2)软件部分设立一个段码表,用来数字 09的段码,根据这些段码可以判定 LED显示器选用的共阳极还是共阴极方式;同时还要设置一个显示缓冲区以动态刷新的方式。 设置好 8279的工作方式,运行显示程序。前四位显示时间,后四位显示温度值。 对 DS18B20进行初始化编程,发出读取温度和转换温度命令。
4、8255A PC0口接收数据,并与输入的界限值进行比较,如果小于界限,则启动DAC0832,输出电压给电阻加热;如果达到界限,则不启动加热。程序运行过程中时间递减,当时间减为零时,启动报警系统,产生声音报警,程序结束。2、硬件设计Comment 微微微微7: 页:3硬件设计的介绍按照课程设计的格式要求分为 3部分,作用,功能分析,技术参数,其他硬件也要这样介绍。各芯片的作用要介绍详细。1、可编程并行接口芯片 8255A(1)8255A 的作用利用 8255A的 PC0与 DS18B20相连,向其发出温度检测命令及接受温度数据,PC4 和蜂鸣器相连,用于声音报警。(2)8255A 的功能分析及技
5、术参数8255A是可编程并行接口,内部有 3个相互独立的 8位数据端口,即 A口、口和口。三个端口都可以作为输入端口或输出端口。口有三种工作方式:即方式、方式和方式,而口只能工作在方式或方式下,而口通常作为联络信号使用。8255A 的工作只有当片选 CS效时才能进行。而控制逻辑端口实现对其他端口的控制。图 2-1 8255A的内部框图表 2-1 8255A 的技术参数表参数说明:输入最低电压:min-0.5V,max0.8 V输入最高电压:2.0 V输出最低电压:0.45 V输出最高电压:2.4 V(3)8255A的方式控制字D7 D6 D5 D4 D3 D2 D1 D01 0 0 0 1 0
6、 0 11:工作方式 A 口方式 0 输出 B 口方式 0 输出 C 口高 4 位输入 C 口低 4 位输入图2-2 8255A的方式控制字表 方式0的工作特点:标识符 最小 最大 测试条件输入低电平(VIL) -0.5V 0.8V输入高电平(VIH) 2.0V 5V输出低电平(VOL)DB 0.45V IOL=2.5mA输出低电平(VOL)PER 0.45V IOL=1.7mA输出高电平( VOH)DB 24V IOH=-400A输出高电平(VOH)PER 24V IOH=-200A驱动电流 -1.0mA -4.0mA REXT=750,VEXT=1.5V供应电流 120 mAIIL(INP
7、UT LOAD CURRENT) 10A VIN=0V5VIOFL(OUTPUT FLOATL EAKAGE) 10A VOUT=0.455VComment 微微微微8: 页:5技术参数呢?是这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。 通道的功能为:两个8位通道:通道A和B。两个四位通道:通道C高4位和低四位,任何一个通道可以作输入/输出,输入是不锁存的,输出是锁存的,在方式0时各个通道的输入/输出可有16种不同的组合。D7 D6 D5 D4 D3 D2 D1 D00 X X X 写入位编码 写入内容写入位 编码 0 写入 0D0-D7 000-
8、111 1写入 1图2-3 8255A的置位/控制字表2、8279 芯片 (1)8279 芯片在本试验中的作用使用 8279来实现对键盘输入信号的接收和输出控制 LED显示器的数据及显示方式。(2)8279 芯片的功能分析8279的功能是对短矩阵键盘扫描以及控制 LED显示器的数据及显示方式。8279扫描输出信号经译码器译码后三根输出线 Y0Y2 作为矩阵键盘的扫描信号,返回信号 RL0-RL7与键盘矩阵的 8个列输出信号相连接。扫描译码器经另一译码器译码产生的 8个输出信号作为 8个显示器的选道信号,轮流刷新 8个显示器。8279A 是一个 40脚双列直插式芯片,由单一5V 供电.控制字寄存
9、器数据缓冲存储器FIFO/传感器RAM状态寄存器地址寄存器16字节显示 RAM控制与定时传感器RAM键盘控制显示输出消隐输出寄存器扫描计数键盘输入图 2-4 8279内部结构 8279具有 2个端口,8 个控制字和一个状态字Comment 微微微微9: 页:6注意段落的缩进,其他雷同Comment 微微微微10: 页:6表标要放在表的上方A0=0用来接收来自键盘的输入字节数据或输出到显示器的输出字节数据。键盘扫描方式中,发出读 FIFO命令后,从数据口读入数据为:D7 D6 D5D4D3 D2D1D0KKK 输入方式000 编码扫描键盘,双键互锁001 译码扫描键盘,双键互锁扫描键盘010 编
10、码扫描键盘,N 键互锁011 译码扫描键盘,N 键互锁扫描传感器矩阵100 编码传感器矩阵101 译码扫描传感器矩阵110 选通输入,编码显示扫描111 选通输入,译码显示扫描选通表 2-2 8279键盘输入方式DD 输出方式00 8字符显示,左端输入01 16字符显示,左端输入10 8字符显示,右端输入11 16字符显示,右端显示器输出表 2-3 显示器输入方式CNTL SHIFT 扫描值 回送值8279 共使用 8 个控制字,高 3 位 D7D6D5 的特征位。这些控制字是由 CPU送到数据总线以后,CS=0,A0=1,WR 上升沿送入控制寄存器。名称 格式 备注设置键盘和显示方式 000
11、DDKKK DD 见上图,KKK 见上图时钟频率 001PPPPP P 为预定值 231,是外接时钟的分频系数读 FIFO 传感器 RAM 010AIA2A1A0 A2A1A0 是 CPU 读出传感器的存储单元地址读显示 RAM 011AIA3A2A1A0 A3A2A1A0 是 CPU 送出传感器 RAM 的存储单元地址禁止写显示器/熄火 101IW1IW0BL1BL0 IW1BL1 为 A 口控制位,IW0BL0 为 B 口控制位。IW=1 时,禁止写;BL1 时显示器消隐清除 110CD2CD1CD0CFCACA=1,清除 FIFO/显示 RAM,CF=1,将 FIFO 置空,并中断输出复
12、位,传感器 RAM 置成 0结束中断 111E E=1 时,以 N 键巡回特殊出错方式工作。传感器矩阵方式中,该命令时 IRQ 变为的电平表 2-3 8279 的控制字8279A 的的状态字,适用于键盘输入和选通方式检查 FIFO,如下:D7 D6 D5 D4 D3 D2 D1 D0D1D0:FIFO RAM 中字符的个数。取值为 000111。D3:FIFO RAM 满(D3=1);D4:FIFO RAM 空。 (D4=1)D5:FIFO RAM 溢出(D5=1);D6:传感器信号结束特征位D7:显示无效特征位。DU=1 无效。DU S/E O U F N N N3、DS18B20 温度传感
13、器(1)DS18B20 温度传感器的作用利用温度传感器检测温度,并转换为数字量和设定的界限值比较。(2)DS18B20 的功能特点DS18B20可编程温度传感器有三个管脚。GND为接地线,DQ为数据输入输出接口,通过一个较弱的上拉电阻与CPU相连。VDD为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.05.5V。本系统中使用外部电源供电。其主要特点为: 用户可以自行设定报警上下限温度值; 不需要外部组件,能测量-55+125C范围内的温度; 在-10+85C范围内的测温准确度为0.5C; 通过编程可以实现912位的数字读数方式,可在至多750MS内将温度转换成12位数字,测温分辨
14、率可达到0.0625C; 独特的单总线接口方式,与微处理器连接时仅需要一条线既可实现和微处理器的双向通讯。图2-6 DS18B20 内部结构图图2-5 DS18B20DS18B20 的内部结构主要由四部分组成:64 位光刻 ROM,温度传感器,非Comment 微微微微11: 页:9此图不符合规范,调整图标挥发的温度报警触发器 TH和 TL,配置寄存器。光刻 ROM中的 64位序列号是出厂前被光刻好的,它可以看作是该 DS18B20的地址序列码。64 位光刻 ROM的排列是:开始 8位(28H)是产品类型标号,接着的 48位是该 DS18B20自身的序列号,最后 8位是前面 56位的循环冗余校
15、验码(CRC=X8+X5+X4+1)。光刻 ROM的作用是使每一个 DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(3)DS18B20 的测温原理和技术参数DS18B20的测温原理:图2-7 DS18B20的测温原理图DS18B20的测温原理如图所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系
16、数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到Comment 微微微微12: 页:10表呢?减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重
17、复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。 表2-4 DS18B20温度值格式表DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。DS18B20的存储器:DS18B20温度传感器的内部存储
18、器包括一个高速暂存 RAM和一个非易失性的可电擦除的 E2RAM,后者存放高温度和低温度触发器 TH、TL 和结构寄存器。根据 DS18B20的通讯协议,主机控制 DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对 DS18B20进行复位,复位成功后发送一条 ROM指令,最后发送 RAM指令,这样才能对 DS18B20进行预定的操作。复位要求主CPU将数据线下拉 500微秒,然后释放,DS18B20 收到信号后等待 1660 微秒左右,后发出 60240 微秒的存在低脉冲,主 CPU收到此信号表示复位成功。4、LED 显示器(1)芯片在本设计中的作用LED发光二极管在本设计中采用
19、 7段数字发光二极管,作为终端显示。显示时间的分秒。(2)LED 的功能分析物理构造:LED 发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个 PN结,具有单向导电性。当在发光二极管 PN结上加正向电压时,PN 结势垒降低,载流子的扩散运动大于漂移运动,致使 P区的空穴注入到 N区,N 区的电子注入到 P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。将七个发光管进行Comment 微微微微13: 页:11图和表都要居中组合,排列成数字图形 8,再根据需要控制七个管的亮与灭,即可显示出定义数字。有段选码和位选码确定数字 18的输出并在延时
20、程序中保持复位。它是一种当外加电压超过额定电压时发生击穿,并因此而产生可见光的器件。这种数码管是有 7段或 8段笔画显示器组成一个字符而形成的。图 2-8 LED内部结构图 2-9 LED显示表 2-5 LED显示管段选码编码表数字 dp g f e d c b a 二进制编码0 1 1 0 0 0 0 0 0 C0h1 1 1 1 1 1 0 0 1 F9h2 1 0 1 0 0 1 0 0 A4h3 1 0 1 1 0 0 0 0 B0h4 1 0 0 1 1 0 0 1 99h5 1 0 0 1 0 0 1 0 92h6 1 0 0 0 0 0 1 0 82h7 1 1 1 1 1 0
21、0 0 F8h8 1 0 0 0 0 0 0 0 80h9 1 0 0 1 0 0 0 0 90h(3)LED 的技术参数分析LED 发光二极管的压降一般为 1.5-2.0V,其工作电流一般取 10-20Ma,发光二极管可应用于直流驱动电路、交流驱动电路和脉冲驱动电路。由于 8255A 的最大驱动电流为 4.0mA,而 LED 的工作电流一般为 10-20mA,所以需要加一个驱动器 74LS244。5、矩阵键盘(1)矩阵键盘在本设计中的作用矩阵键盘在工作时,是按照行线和列线交叉点的电平值来识别按键的,由人手按动键盘。当键释放后,该键就有效。矩阵键盘将 0F 这 16 哥键按行和列排列成矩阵形式
22、。对于 mn 哥键的键盘,只需要 m+n 位 I/O 端口,我们的实验采用的是 44 键盘。(2)矩阵键盘的功能分析在矩阵键盘中,通过行列交叉点上的电平值来识别按键,而行列线通过键盘数据格式确定,键盘数据格式如下:表 2-6 键盘数据格式D7 D6 D5 D4 D3 D2 D1 D0CNTLS SHIFT SL2 SL1 SL0 R2 R1 R0控制 移位 行编码 列编码其中,控制和移位由两个独立的附加开关决定;SL2 SL1 SL0 为按下键的行编码,来自扫描计数器的低三位,R2 R1 R0 是根据返回信号确定的列编码。通常使用的键盘是矩阵结构的。对于 44=16 个键的键盘,采用矩阵方式只
23、要用 8 条引线和 2 个 8 位端口便完成键盘的连接。如图,这个矩阵分为 4 行4 列,如果键 5 按下,则第 1 行和第 1 列线接通而形成通路。如果第 1 行线接低电平,则键 5 的闭合,会使第 1 列线也输出低电平。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。 FB732EA659DC80 14第 0 列 第 1 列 第 2 列 第 3 列第 0 行第 1 行第 2 行第 3 行图 2-10 44 键盘矩阵图行扫描法识别按键的原理如下:先使第 0 行接低电平,其余行为高电平,然后看第 0 行是否有键闭合。这是通过检查列线电位来实现的,即在第 0 行接低电平时,看是否有哪条列
24、线变成低电平。如果有某列线变为低电平,则表示第 0行和此列线相交位置上的键被按下;如果没有任何一条列线为低电平,则说明第 0 行没有任何键被按下。此后,再将第 1 行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,也就是列线输入中有一位为 0 时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。6、数/模转换器 DAC0832(1)DAC0832 在本设计中的作用DAC0832 是 National Semiconductor 生产的一款 D/A(数字/模拟)转换器,其采用 CMOS 工艺和 R2RT 形电阻解码网络, 转换结
25、果为一对差动电流 I01和 I02 输出。在本设计中主要用来将开关打入的数字信号转换为相应的模拟信号。(2)DAC0832 的功能分析DAC0832 是 8 位 D/A 转换器,转换周期为 1s 。它由 8 位输入锁存器、8位 DAC 寄存器、8 位 D/A 转换电路组成。当 ILE 为高电平,CS 为低电平,WR1 为负脉冲时,在 LE1 产生正脉冲;LE1 为高电平时,输入寄存器的状态随数据输入线状态变化,LE1 的负跳变将输入数据线上的信息存入输入寄存器。当 Xfer 为低电平,WR2 输入负脉冲时,则在 LE2 产生正脉冲;LE2 为高电平时,DAC 寄存器的输入与输出寄存器的状态一致
26、,LE2 的负跳变,输入寄存器内容存入 DAC 寄存器。DAC0832 的输出是电流型的。在微机系统中,通常需要电压信号,电流信号和电压信号之间的转换可由运算放大器实现。(3)DAC0832 的技术参数DAC0832 芯片采用 CMOS 工艺,四象限乘法型 DAC,与微机兼容,数据输入能与双缓冲、单缓冲或直接通过三种方式工作。是一个 8 位 D/A 转换器,输入电平与 TTL、CMOS 兼容,单电源+5+15V 工作,基准电压的范围为 10V,电流建立时间为 1s,低功耗 200mw,20 引脚,双列直接式封装。 1122334455667788991010111112121313141415
27、151616D DC CB BA ATitleNumber RevisionSizeA0Date: 2005-12-19 Sheet of File: F:InovationSTAR.SCHDOC Drawn By:VREF 8RFB 9DGND10IOUT1 11IOUT2 12DI713 DI614 DI515DI416DI07CS1 WR12AGND3DI34 DI25 DI16XFER17WR218 ILE19VDD 20DAC0832LCNU201KW5 510R780.1uFC3323 647185LM741CNU2310KW64.7KR79-12VVCCD5+12V-12VOUT
28、D0D1D2D3D4D5D6D712JP31-INPUT4 13OUTPUT11+INPUT13GND 11V+4+INPUT3 10+INPUT25 -INPUT3 9-INPUT26OUTPUT3 8OUTPUT4 14OUTPUT27-INPUT12 +INPUT4 12LM324NU26DS23470R71-12VWR0.1uFC32CS图 2-12 内部原理图7、蜂鸣器(1)蜂鸣器的作用在本实验中,蜂鸣器用作声音报警。(2)蜂鸣器的技术参数图2-11 蜂鸣器内部结构图它一般包括灵敏度、频率响应、额定功率、额定阻抗、指向性、失真、音质听感评价等。本实验电压范围为 05V。1122334
29、455667788991010111112121313141415151616D DC CB BA ATitleNumber RevisionSizeA0Date: 2005-12-19 Sheet of File: F:InovationSTAR.SCHDOC Drawn By:VccBuzzerLS12KR15.1KR28550Q60.01uFC40Ctrl100R11874LS138 芯片(1)74LS138 在本设计中的作用将 SL0SL2 锁确定的信号经译码器译为矩阵键盘的行选择线。(2)74LS138 的功能分析74LS138 是 3/8 译码器,即对 3 哥输入信号进行译码,得到
30、 8 个输出状态。其引脚功能图如下所示: 表 2-7:真值表图 2-13 引脚图G1 G2A G2B 为数据输出端,G2A G2B 为低电平有效,G1 高电平有效,A、B、C 为译码器输入出端,Y0Y7 为译码输出端,低电平有效。(3)74LS138 的技术参数极限值 电源电压-7V 输入电压-7V 工作环境温度 -070 贮存温度-65150 9、硬件总逻辑图及说明Comment 微微微微14: 页:16一个流程不能画在两页上3、控制程序设计1、控制程序设计思路说明本程序采用模块化设计,主程序由若干子程序组成。首先 8279控制键盘输入两个值,时间和温度,在七段 LED显示器前四位显示温度后
31、四位显示时间。DS18B20采集温度传输到 8255,并与界限值比较,小于界限就通过 DAC0832输出电压加热,大于界限就初始化 DAC0832。温度和时间一秒刷新显示一次,通过调用延时,使主程序循环一次是一秒。输入的时间以分钟计时,60 秒后时间减一。由于 DS18B20采用串行数据传送和单总线数据传输方式,其数据输入输出都由同一条线完成,因此,对读写的操作时序要求严格,需要做较精确的延时。对 8279进行操作时要注意与实际情况相结合修改控制字选择不同的显示方式,同时应注意左入口和右入口的区别。2、控制程序流程图主程序流程图:开 始初 始 化 8255输 入 子 程 序启 动 DS18B2
32、0子 程 序延 时CX=60大 于 界 限启 动 DAC0832CX=CX-1TIME 0结 束显 示 子 程 序初 始 化DAC0832CX=0TIME-报 警 子 程 序延 时N YNN YN NY初始化 8279:扫描按键子函数流程图:NOYES显示温度设定值:开始写入端口地址、命令字及入口方式调用函数清除 LED 显示设置显示方式RET结束开始写入 8279 控制字有键按下?NO KEY读 FIFO/ROM,键号转化为键值并输出RET结束开始保护寄存器 SI,BX将键入的温度值存入中间量 buffer2读出 DS18B20 的温度存放在 AX:读温度字操作流程图:3、控制程序.MODE
33、L TINYPCIBAR3 EQU 1CH ;8 位 I/O 空间基地址(它就是实验仪的基地址,也为 DMA 32BITRAM 板卡上的 8237 提供基地址)Vendor_ID EQU 10EBH ;厂商 ID 号Device_ID EQU 8376 ;设备 ID 号.STACK 300 .DATAIO_Bit8_BaseAddress DW ?msg0 DB BIOS 不支持访问 PCI $msg1 DB 找不到 Star PCI9052板卡 $msg2 DB 读 8 位 I/O 空间基地址调用显示子函数,显示值寄存器出栈RET结束开始开始时让 PC0口维持低电平写入新的控制字,准备接收温
34、度值调用延时子程序,温度经由 PC0 口写入AL右移 AL 最低位至标志位 CF标志位转移至 BL,备份 AL 中的值,PC0 口置低电平准备读下一位RET结束开始首先复位 DS18B20跳过 ROM 匹配发出度温度指令读出温度,存放至AX;还原寄存器结 束时出错$msg3 DB 输入温度和加热时间$ Con_8255 DW 00F3HPC_8255 DW 00F2HPB_8255 DW 00F1HPA_8255 DW 00F0HDAC0832 DW 00C0HCMD_8279 DW 00B0HTAB DB3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,
35、7Ch,39h,5Eh,79h,71hTEMP DB ?TIME DB ?LIMIT_1 DB ?buffer2 DB ?.CODESTART: MOV AX,DATAMOV DS,AXMOV ES,AXNOPCALL InitPCICALL ModifyAddress ;根据PCI 提供的基地址,将偏移地址转化为实地址CALL Init8255CALL INITDAC0832LEA DX,msg3 ;输出相关提示信息MOV AH,09HINT 21HMAIN:MOV DX,CMD_8279MOV AL,34H ;可编程时钟设置,设置分频系数(20 分频)OUT DX,ALMOV AL,00H
36、 ;8*8 字符显示,左边输入,双键锁定OUT DX,ALCALL CLEAR ; 清显示MOV AL,90H ; 左入口后第一位开始显示OUT DX,ALLEA DI,buffer2;读BUFFER2KeyA: CALL SCAN_KEY ;键盘扫描JNC KeyA ;cf=0CALL KEY_NUM ;转化键值STOSBKeyB: CALL SCAN_KEY;键盘扫描JNC KeyBCALL KEY_NUM ; 转化键值STOSBCALL SHOW ; 显示在 LED上 MOV LIMIT_1,AL;CALL INIT8279_1 ;清除并显示MOV AL,94H;从第四位开始显示OUT
37、DX,AL;LEA DI,buffer2;KeyC: CALL SCAN_KEY;JNC KeyCCALL KEY_NUM;转化键值STOSBKeyD: CALL SCAN_KEY;键盘扫描JNC KeyD;CALL KEY_NUM;转化键值STOSBCALL SHOW; 显示在 LED 上MOV temp,ALCALL INIT8279_1 MAIN_1: MOV CX,60MAIN_2:CALL START_Temperature;向DS18B20 发送读温度指令call delayCALL RD_Temperature ;读出温度值,并转换为 BCD 码CALL DISPLAYCALL
38、DLTIMECMP AX,LIMIT_1 JB MAIN_3CALL INITDAC0832MAIN_3: LOOP MAIN_2DECT IME CMP TIME,00HJZ MAIN_4JMP MAIN_1MAIN_4: CALL HOT_UPJMP MAIN_3MAIN_5: CALL ALARM;写 0 或维持低电平W_L PROC NEARPUSH AXMOV DX,Con_8255MOV AL,80H ;PC 口输出,置低电平OUT DX,ALMOV AL,0BH ;PC5 口置 1,防止误报警 OUT DX,ALPOP AXRETW_L ENDP;写 1W_H PROC NEAR
39、PUSH AXMOV DX,Con_8255MOV AL,01H ;PC0 口置1,向 18B20 写 1 OUT DX,ALPOP AXRETW_H ENDP;DS18B20 复位初始化子程序INIT_18B20 PROC NEARPUSH CXCALL W_L ;置低电平CALL Delay501us ;主机发出 501us 复位低脉冲MOV DX,Con_8255MOV AX,89H ;PC 输入状态 , 准备接收存在脉冲 OUT DX,ALDEC DXMOV CX,15 ;检测十五次INIT_18B20_1: IN AL,DXTEST AL,01H ;如果 18B20 回复存在脉冲,A
40、L 最低位写 1JZ INIT_18B20_2LOOP INIT_18B20_1STC ;置位标志位 1,表示 DS18B20 不存在RETINIT_18B20_2: CALL Delay501usCLC ;复位标志位 0,表示DS18B20 存在POP CXRETINIT_18B20 ENDPDISPLAY PROC NEARMOV DX, CMD_8279MOV AL,34H;可编程时钟设置,设置分频系数(20 分频)OUT DX,ALMOV AL,00H;8*8 字符显示,左边输入OUT DX,ALCALL CLEARMOV AL,90H; 第一位开始显示OUT DX,AL;mov AL
41、,temp;将TEMP 装入 al 中LEA BX,TAB;XLATCALL WRITE_DATA;将其值显示mov al,94h;第四位开始显示out dx,almov al,time;time入 alLEA BX,TABXLATCALL WRITE_DATA;将其值显示retDISPLAY ENDPDelay501us PROC NEARPUSH AXPUSH CXPUSH DXMOV CX,167MOV DX,PA_8255Delay501us_1: IN AL,DXLOOP Delay501us_1POP DXPOP CXPOP AXRETDelay501us ENDPDelay50u
42、s PROC NEARPUSH AXPUSH CXPUSH DXMOV CX,12MOV DX,PA_8255Delay50us_1: IN AL,DXLOOP Delay50us_1POP DXPOP CXPOP AXRETDelay50us ENDPDelay8us PROC NEARPUSH AXPUSH CXPUSH DXMOV CX,2MOV DX,PA_8255Delay8us_1: IN AL,DXLOOP Delay8us_1POP DXPOP CXPOP AXRETDelay8us ENDP;写操作WRITE_18B20 PROC NEARPUSH CXMOV CX,8 ;一
43、共 8 位数据WRI: CALL W_L ;0-PC0,维持低电平CALL Delay8usROR AL,1 ;最低位赋给 CFJNB WRI1 ;CF 等于 0,继续低电平,执行写 0CALL W_H ;CF 等于 1,调用写一函数WRI2: CALL Delay50us CALL W_H ;50 微秒后,拉高电平,标识写一位结束LOOP WRI ;写下一位POP CXRETWRI1: PUSH CXPOP CXJMP WRI2WRITE_18B20 ENDP;读操作READ_18B20 PROC NEARPUSH CXMOV CX,8 ;数据一共有 8 位Read: CALL Delay5
44、0usMOV DX,Con_8255MOV AL,80HOUT DX,AL ;0-PC0MOV AL,89HOUT DX,AL ;PC 输入状态,准备接收 18B20 发送的信号CALL Delay8usMOV DX,PC_8255IN AL,DX ;将 PC 口接收的数据写到 AL ROR AL,1 ;AL 最低位,即 18B20 写到 PC0 口的数据移到 CFRCR BL,1 ;将 CF 移到 BL 最高位,为了备份 ALMOV DX,Con_8255MOV AL,80H ;PC 口置低电平,OUT DX,AL MOV AL,01H ;再拉高,标识读一位结束(串行异步通信,位同步)OUT
45、 DX,ALMOV AL,0BH OUT DX,ALLOOP ReadMOV AL,BL ;读取 8位后,温度存 ALPOP CXRETREAD_18B20 ENDP;*; 8279;*INIT8279 PROC NEARPUSH AX MOV DX,CMD_8279;CMD_8279 为写命令地址、读状地址MOV AL,34H ;可编程时钟设置,设置分频系数(20 分频)OUT DX,ALMOV AL,0 ;8*8字符显示,左边输入OUT DX,ALCALL INIT8279_1 ;清显示POP AXRETINIT8279 ENDPINIT8279_1 PROC NEAR CALL CLEA
46、R ;清显示MOV AL,90H ;从第一个数码管开始移位显示OUT DX,ALRETINIT8279_1 ENDPCLEAR PROC NEARMOV DX,CMD_8279MOV AL,0DEH ; 清除命令OUT DX,ALWAIT1: IN AL,DXTEST AL,80HJNZ WAIT1 ; 显示 RAM 清除完毕吗?RETCLEAR ENDPSCAN_KEY PROC NEARMOV DX,CMD_8279IN AL,DX ;读状态READ_FIFO: AND AL,7 ;?JZ NO_KEY ;是否有键按下READ: MOV AL,40HOUT DX,AL ;读FIFO RAM MOV DX,DATA_8279IN AL,DXAND AL,3FHSTC ;有键SCAN_KEY1: RETNO_KEY: CLC ;无键按下,清 CYJMP SCAN_KEY1SCAN_KEY ENDPKEY_NUM PROC NEARAND AL,3FH ;转换RET KEY_NUM ENDPSHOW PROC NEARPUSH SIPUSH BXLEA SI,buffer2LODSBLEA BX,LED_TABXLATCALL WRITE_DATALODSBXLATCALL WRITE_DATAPOP BXPOP SIRETSHOW ENDPWRITE_DATA