1、总体来说需要四大模块:测量模块、显示模块、键盘模块、时钟模块整体硬件结构如下:总电路图见下图:三硬件功能与设计3.1 CPU根据要求选用MCS-8031单片机,由于没有内置ROM,内部RAM存储量也较小,所以添加一块片外ROM EPROM2732(12位,4K),以及一块片外RAM6264(13位,8K),通过74LS373锁存器和单片机连接接线图如下:3.2检测模块(1)温度传感器本设计中采用的温度传感器是LM35,它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度成比例。LM35无需外部校准,可以提供0.25的常用室温精度。该传感器在25时,输出电压为0.25V,随着室温的升
2、高,输出电压与温度成线性关系,因此可以根据得到的电压值计算出温度。(2)LM35工作特性:比例因子:10MV/ 测量范围:-55150 工作电压:4V30V 精度:0.5由于A/D转换器选用的是ADC0809,输入模拟电压为05V,数字量是28,为了提高温度的转换精度,本设计选定温度传感器的测量范围是0125(3)放大电路采用的是LM324运算放大器。LM324可采用单极性或者双极性电源供电,可以在0+5V下工作,它内部集成了四个运放模块,它的输入端是温度补偿的。温度/LM输出电压/VADC0809输入模拟电压/V250.251500.52751.75310041251.255放大电路如下图:
3、(4)A/D转换器A/D转换器选用ADC0809。ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和微机直接接口。A引脚结构:ADC0809采用双列直插式封装,共有28条引脚。其引脚结构图如下图所示。B地址输入和控制线:4条ALE 为地址锁存允许输入线,高电平有效。当ALE现为高电平时,地止锁存与译码器将ADDA、ADDB和ADDC三条地址输入线,用于选通IN0IN7上的一路模拟量输入。通道选择如下表所示。ADDCADDBADDA选择的通道IN0IN1IN2IN3IN4IN5IN6IN7C数字量输出及控制线:11条ST
4、ART 为转换启动信号。当START上升沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,START应保持低电平。EOC位转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三态输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7D0位数字数出线。电路图如下:3.3显示模块数码管是一种在单片机系统中广泛使用的数字显示输出装置。对于数码管的驱动控制一般有两种方式,即静态驱动和动态驱动。静态驱动中硬件开销大,成本高,电路板面积增大,布线复杂;动态驱动中一般只需一块驱动芯片,多
5、个数码管以极高的频率逐个选通,显示相应的数字,它优点在于硬件电路大大简化。本电路中使用6个LED共阴数码管显示,格式为,小时:分钟:秒 或,通道 温度LED动态显示数码管通过8155可编程并行I/O扩展(占用8155的PA与PB口)3.4键盘输入模块采用3*3的矩阵式键盘,各行分别接P1.3,P1.4,P1.5,各列分别接P1.0,P1.1,P1.2设有9个按钮,1-8为通道号,9为返回3.5时钟模块本电路中采用的是时钟芯片DS1302,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,按要求只需时、分、秒进行计时。工作电压为2.5V5.5V,对采用三线接口与CPU进行同步通信,
6、并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。其中Vcc1为后备电源,VCC2为主电源。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。四软件设计4.1主程序流程图见右:N
7、Y4.1主程序:ORG 0000HSJMP STARTORG 0003HAJMP INTR0ORG 0040HSTART: MOV A,#0C7H ;开放行(行输出全为0) MOV P1,A CLR P3.3 CLR IT0 ;电平触发 MOV IE,#81H ;开放INT0中断 MOV 30H, #00H ;设定时钟初值 MOV SECOND,#00H MOV MINUTE,#00H MOV HOUR,#12H LCALL SET1302 LCALL GET1302 LCALL DISPLAYMAIN: MOV R5,#25 MOV TMOD,#01H MOV TH0,#63H ;置定时器初
8、值(定时40ms) MOV TL0,#0C0H SETB TR0 ;启动定时器0LP1: MOV A, 30H JNZ SHOWTEM JBC TF0,LP2 ;查询计数溢出 SJMP LP1 ;未到40 ms继续计数LP2: MOV TH0,#63H ;重新置定时器初值 LCALL DISPLAY ;显示 DJNZ R5,LP1 ;未到1 S继续循环 LCALL GET1302 ;每过1s从DS1302读取一次时间 MOV R5,#25 SJMP LP1SHOWTEM: JZ LP14.2时钟显示程序:T_CLK Bit P3.4 ;实时时钟时钟线引脚T_IO Bit P3.5 ;实时时钟数
9、据线引脚T_RST Bit P3.1 ;实时时钟复位线引脚SECOND EQU 50H ;秒寄存器MINUTE EQU 51H ;分寄存器HOUR EQU 52H ;时寄存器DISPLAY: MOV DPTR, #7FFFH MOV A, #80H MOVX DPTR,A ;设置8255控制字 MOV R3,SECOND LCALL CHAG MOV DPTR, #7FFDH MOV A, #0FEH MOVX DPTR, A MOV DPTR, #7FFCH MOV A, R2 MOVX DPTR, A LCALL DELAY MOV A,#0FDH MOV A, R3 MOVX DPTR,
10、 A LCALL DELAY MOV R3, MINUTE LCALL CHAG MOV DPTR, #7FFDH MOV A,#0FBH MOV DPTR, #7FFCH MOV A, R2 LCALL DELAY MOV A,#0F7H MOVX DPTR,A MOV A, R3 MOV R3, HOUR MOV A,#0EFH MOVX DPTR, A MOV A, #0DFH RETDELAY: MOV R7,#50 D1: MOV R6,#10 D2: DJNZ R6,$ DJNZ R7,D1 RETCHAG: PUSH ACC ;低字节放入R2,高字节放入R3 MOV A,R3 A
11、NL A,#0FH MOV R2,A SWAP A MOV R3,A MOV DPTR,#DATATAB MOV A,R2 MOVC A,A+DPTR POP ACC DATATAB: DB 0B7H,90H,3DH,0B9H,9AH,0ABH,0AFH,0B0H,0BFH,0BBHSET1302: CLR T_RST CLR T_CLK SETB T_RST MOV B, #8EH ;控制寄存器 LCALL RTInputByte MOV B, #00H ;写操作前WP=0 SETB T_CLK CLR T_RST MOV R0, #Second; MOV R7, #7 ; MOV R1,
12、#80H ;秒写地址S13021: CLR T_CLK SETB T_RST MOV B, R1 ;写秒 分 时 MOV A, R0 ;写秒数据 MOV B, A INC R0 INC R1 DJNZ R7, S13021 MOV B, #80H ;控制,WP=1,写保护 RETGET1302: MOV R0, #SECOND; MOV R7, #7 MOV R1, #81H ;秒地址G13021: CLR T_CLK SETB T_RST MOV B, R1 ;秒 分 时 LCALL RTInputByte LCALL RTOutputByte MOV R0, A ;秒 INC R0 INC
13、 R1 SETB T_CLK CLR T_RST DJNZ R7, G13021 RETRTInputByte: MOV R4, #8 Inbit1: MOV A, B RRC A MOV B, A MOV T_IO, C DJNZ R4, Inbit1RTOutputByte: Outbit1: MOV C, T_IO DJNZ R4, Outbit14.3键码检测流程图见下:键盘程序:INTR0: LACALL DELAY ;延时去抖 MOV A,P1 ;读取P1口列值 ANL A,0C7H CJNE A,#0C7H,SKEY ;判断是否有键闭合,有转SKEY键盘扫描 AJMP FINIS
14、H ;无键闭合,返回SKEY: MOV A,#00H ;行扫描 MOV R0,A ;R0作为行计数器,开始为0 MOV R1,A ;列计数器 MOV R3,#0DFH ;R3为行扫描字暂存SKEY2: MOV P1,A ;输出行扫描字 NOP NOP ;三个nop操作使P1口输出稳定 MOV A,P1 ;读列值暂存列值 ANL A,#OC7H ;取列值 CPL A ;高电平则有键闭合 JNZ SKEY3 ;有键按下转SKEY3,无则进行下一行扫描 INC R0 ;行计数器加一 SETB C ;为行扫描字右移做准备 MOV A,R3 RRC A ;带进位C右移 MOV R3,A ;形成下一行扫描
15、字 MOV A,R0 CJNE A,#03H,SKEY2 ;共需扫描3行 AJMP FINISH列号译码SKEY3: MOV A,R1 JNB ACC.2, SKEY4 JNB ACC.1, SKEY5 JNB ACC.0, SKEY6SKEY4: MOV A,#01H MOV R2,A ;存1列号 AJMP DKEYSKEY5: MOV A,#02H存2列号SKEY6: MOV A,#03H存3列号键位置译码DKEY: MOV A,R0 ;取行号 ACALL DECODE ; MOV DPTR, #TABLE1 CLR C SUBB A, #01H RL A JMP A+DPTRTABLE1
16、: ACALL AA ACALL BB ACALL CC ACALL DD ACALL EE ACALL FF ACALL GG ACALL HH ACALL II FINISH: RETI键号译码DECODE: MOV A,R0 ;取行号送A MOV B,#03H ;每行按键个数 MUL AB ;行号*按键数 ADD A,R2 ;行号*按键数+列号=键号,存在A中延时 MOV R7,#18H TM: MOV R6,#0FFH TM1: DJNZ R6,TM1 DJNZ R7,TM4.4温度采集:温度采集程序:AA: MOV R0, #00H ;数值采集 MOV R1, #00H MOV R2
17、, #08H MOV DPTR, #0BFF8HLP4: MOV DPTR, A ACALL DELAY JNB P3.3,LP1 MOVX A, DPTR ADD A, R1 JNC LP3 INC R0LP3: MOV R1, A DJNZ R2, LP4 MOV R2, #03HLP5; MOV A, R0 RRC A MOV R0, A MOV A, R1 DJNZ R2, LP5 MOV 30H, #01H MOV 31H, R1 RET 4.5温度数值的转化温度转化程序:MOV A, 31H ;温度数值转化 MOV B,#7 MUL AB MOV B,#17 DIV AB MOV R1,A MOV A,B MOV B,#10 MUL AB MOV B,#17 DIV AB MOV 32H,A ;小数后一位放于32H MOV 31H,R1 ;结果存放31H MOV B,#100 MOV A,31H MOV 73H,A ;温度的百位 MOV 72H,A ;温度的十位 MOV 71H,B ;温度的个位 MOV 70H, 32H ;温度的十分位 MOV 75H, 30H ;通道数4.6温度的显示程序:MOV DPTR, #7FFFH MOV A, #80H MOVX DPTR,A ; MOV
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2