700 likes | 951 Views
第 10 章 综合实训. 课题一 水温控制系统设计. 一、实训目的 熟悉常用温度传感器 AD590 的特性及接口电路的设计方法; 学会模块化程序设计方法 二、课题要求 制作一个水温自动控制系统,要求如下: 温度设定范围 40~90℃ ,最小区分度 1℃ ,标定误差≤ 1℃ 。 用十进制数码显示水的实际温度。 环境温度降低时,温度控制的静态误差≤ 1℃ 。. 三、背景知识 1 、 AD590 温度传感器简介
E N D
第10章 综合实训 课题一 水温控制系统设计 一、实训目的 • 熟悉常用温度传感器AD590的特性及接口电路的设计方法; • 学会模块化程序设计方法 二、课题要求 • 制作一个水温自动控制系统,要求如下: • 温度设定范围40~90℃,最小区分度1℃,标定误差≤1℃。 • 用十进制数码显示水的实际温度。 • 环境温度降低时,温度控制的静态误差≤1℃。
三、背景知识 1、AD590温度传感器简介 AD590是美国AD公司生产的单片集成两端感温电流源。它的测温范围为-55℃~+150℃,工作电压范围为4V~30V,可以承受44V正向电压和20V反向电压,输出电阻为710M。它产生的电流与绝对温度成正比,非线性误差为±0.3℃。图10—1为AD590的引脚图,表10—1为AD590温度与电流的关系表。 (a)引脚 (b)封装 (c)图形符号 图10—1 AD590引脚、封装及图形符号
AD590是电流输出型器件,必须利用接口电路将AD590输出的电流信号转换成电压信号,再经A/D转换器转换成数字信号,提供给单片机处理。在AD590是电流输出型器件,必须利用接口电路将AD590输出的电流信号转换成电压信号,再经A/D转换器转换成数字信号,提供给单片机处理。在 2、AD590接口电路 表10—1中,列出了在不同温度值下的AD590的输出电流,通过图10—2的放大电路可将输出电流转换成0~5V的模拟电压。 图10—2 温度采集电路
四、硬件电路 • 硬件电路由单片机、温度检测模块、加热控制模块、键盘设定模块及数据显示模块构成。 1、单片机选择 由于系统对控制精度的要求不高,所以选用内部具有程序存储器芯片的AT89C51就可以满足要求了。 2、温度检测模块 温度检测模块由温度传感器、信号放大器及A/D转换器组成。由AD590将温度转换成电流信号再经信号放大器得到对应的模拟电压,再经ADC0809转换后接入单片机。如图10—3所示。
3、加热控制模块 加热控制信号经反相器反相后,驱动固态继电器(SSR)工作,从而接通或断开加热丝两端电源,实现对水的加热控制。加热控制电路如图10—3所示。 为了使加热控制更加精确,系统采用了三组加热电炉丝组合实现,当温差小于5ºC时,仅A组加热丝工作;当温差在5ºC~10ºC之间时,采用A、B两组加热控制;当温差大于10ºC时,采用A、B、C三组加热控制。 4、键盘设定及数据显示模块 键盘扫描由11个按键及3位LED共阳极显示器组成。通过P1、P2口直接驱动键盘,为了简化显示接口,这里采用了串行口扩展LED显示器。如图10—3所示。
五、软件设计 1、程序结构设计 (1)主程序 用于进行初始化处理,包括各端口的初始化,定时/计数器的设定、中断允许的设定等。同时进行键盘的扫描输入。图10—4为主程序流程图。 (2)定时中断服务程序 通过单片机内部的定时器T0进行50ms定时,再通过寄存器R6进行计数,以实现1s定时中断的要求。进入中断服务程序后,可进行当前温度的检测及显示,根据所测值与设定值比较进行温度控制等。图10—5为中断服务程序流程图。
图10—4 主程序流程图图10—5 定时中断服务程序流程图
(3)温度检测程序 温度检测采用每1s定时采样的方式,为了实现温度的准确检测,采用了平均值滤波法抗干扰。即连续4次启动ADC0809进行A/D转换,求取转换结果的平均值,存入指定单元,以得到检测温度值。图10—6为温度检测程序流程图。 (4)温度控制程序 通过比较键盘设定值与温度检测值的差别,按照一定的控制规律,控制输出口线的状态,实现三组加热丝的控制。图10—7为温度控制程序流程图。 (5)温度显示程序 在每次温度检测后,进行一次温度显示刷新;在进行温度设定时,显示设定温度值。
2、主要程序模块清单 主程序: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0030H MAIN: MOV SP,#60H MOV P1,#0FFH;关电炉,开显示 MOV SCON,#00H ;设置串行口工作 ;方式0,发送 MOV TMOD,#01H ;定时器初始化 MOV TH0,#3CH ;50ms定时初值
MOV TL0,#0B0H MOV R6,#14H ;1s定时用(50ms20次) MOV 5DH,#00H ;显示缓冲区清零 MOV 5EH,#00H MOV 5FH,#00H ACALL DISP SETB ET0 SETB EA SETB TR0 LM0:ACALL KEYSCAN;调用键盘扫描子程序(略), ;用于设定温度值 AJMP LM0
图10—7 温度控制程序流程图 图10—6 温度检测程序流程图
定时中断服务程序: T0INT: MOV TH0,#3CH MOV TL0,#0B0H DJNZ R6,T0END;1s未到,中断返回 CLR TR0 CLR EA MOV R6,#14H ;恢复R6初值 ACALL TADC ;调用温度检测子程序 ACALL XSCL ;调用标度转换子程序 ACALL DISP ;调用显示子程序 ACALL TCONT;调用温度控制子程序 SETB TR0 SETB EA T0END: RETI
温度检测子程序: TADC: MOV 50H,#00H ;清存检测值单元 MOV B,#00H MOV R7,#04H ;设置转换次数 MOV DPTR,#7FFFH;送ADC0809地址 TT0: MOVX @DPTR,A;启动A/D转换 JB P3.2,$ ;等待转换结束 MOVX A,@DPTR;读A/D转换数据 ADD A,50H MOV 50H,A JNC TT1;是否超出8位二进制范围 INC B
TT1: DJNZ R7,TT0 ;4次转换是否完成 CLR C ;求4次A/D转换的平均值 XCH A,B RRC A XCH A,B RRC A CLR C XCH A,B RRC A XCH A,B RRC A MOV 50H,A ;平均值存50H RET
温度控制子程序: TCONT: MOV A,51H CLR C SUBB A,50H ;设定值—实测值 MOV R0,A JNC CCPR ;小于设定温度,接通相应加热器 MOV P1,#0FFH ;否则,关闭加热器 AJMP CONEND CCPR: MOV A,R0 SUBB A,#19H JC CCPR1
MOV P1,#0F8H ;开三组加热器 AJMP CONEND CCPR1: MOV A,R0 SUBB A,#0CH JC CCPR2 MOV P1,#0FCH ;开两组加热器 AJMP CONEND CCPR2: MOV P1,#0FEH ;开一组加热器 CONEND: RET
显示子程序: DISP: MOV R2,#03H ;显示数据的个数 MOV R1,#5DH ;显示缓冲区首址 SETB P1.3 DL0: MOV A,@R1 ;取要显示的数 MOV DPTR,#TAB MOVC A,@A+DPTR ;查字型码 MOV SBUF,A ;送出数据 DL1: JNB TI,DL1 ;是否输完一个字节 CLR TI ;清发送完标志 INC R1 DJNZ R2,DL0 ;三个数是否都显示完? RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H ;0~9字型码 DB 92H,82H,0F8H,80H,90H
六、总结与提高 设计、调试大型程序时,应该: • 先根据要求划分模块,优化结构; • 再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用; • 接着根据各模块性质和功能将各模块细化,设计出程序流程图; • 最后根据各模块流程图编制具体程序。 调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。
在这个课题中,采用了软件滤波方式提高检测环节的准确,并且采用了三组加热控制提高了温度变化的精度。在此基础上,还可以增加液面检测、缺水报警电路及打印电路等其它辅助电路的设计,使这个控制系统更完善。在这个课题中,采用了软件滤波方式提高检测环节的准确,并且采用了三组加热控制提高了温度变化的精度。在此基础上,还可以增加液面检测、缺水报警电路及打印电路等其它辅助电路的设计,使这个控制系统更完善。
课题二 用8×8点阵显示器制作电子显示屏 • 一、实训目的 • 熟悉8×8点阵显示器与单片机的接口电路及其设计方法; • 学会模块化程序设计方法。 • 二、课题要求 • 制作一个8×8点阵显示器。要求如下: • 1. 显示“电子设计”四个文字; • 2. 显示方式可由K1、K2和K3三个键选择: K1为逐字显示,K2为向上滚动显示,K3为向左滚动显示。
三、硬件电路 • 显示器采用AT89C51单片机作控制器,时钟频率为12MHz,8×8点阵显示器采用共阳极结构,其电路如图10—8所示。 • P0作为字符数据输出口, • P2为字符显示扫描输出口, • P1.0~P1.2口分别接开关K1、K2、K3, 通过改变电阻(270Ω)的大小可改变显示字符的亮度,驱动用9012三极管。
四、软件设计 1、程序结构设计 (1)主程序 主程序用于对系统进行初始化,扫描按键开关状态,由按键标志位值(00H、01H、02H)决定显示的方式。主程序流程图如图10—9所示。
(2)初始化子程序 • 用于对端口进行复位操作,将显示用的字符数据从字符表中装入内存单元50H~6FH中。字符表中的每个文字占用8个地址单元。 • (3)显示子程序 • 显示子程序由显示功能选择程序和显示控制程序组成。 • 显示功能选择程序: 负责每次显示时的显示地址首址(在B寄存器中)、每个字的显示时间(由30H中的数据决定)和下一个显示地址的间隔(31H中的数据决定)的处理。
显示子程序: 负责对指定8个地址单元的数据进行输出显示。 显示一个完整文字的时间约为8ms。 在显示子程序中,1ms延时程序是用调用键扫描子程序的方法实现的。图10—10为逐字显示及向上滚动显示方式时的显示控制程序流程图。 • (4)按键扫描程序 • 用于将按键的状态扫描至20H单元的低三位(20H.0、20H.1、20H.2)中。同时在程序中利用按键扫描程序代替显示程序中的1ms延时程序,既可以提高按键的快速响应,又可以提高动态显示的扫描频率,减少文字显示时的闪烁现象。
2、主要程序模块清单 主程序: START: MOV 20H,#00H ;20H内存单元清0 SETB 00H ;20H.0位置1 START1: LCALL CLEARMEN ;调用上电初始化子 ; 程序 JB 00H,FUN0 ;20H.0位为1,执行FUN0 JB 01H,FUN1 ;20H.1位为1,执行FUN1 JB 02H,FUN2 ;20H.2位为1,执行FUN2 AJMP START1
初始化程序: CLEARMEN: MOV A,#0FFH ;四端口置1 MOV P1,A MOV P2,A MOV P3,A MOV P0,A MOV DPTR,#TAB;取“电子设计”字 ;符表首址 CLR A MOV 21H,A ;21H-24H内存单元清0 MOV 22H,A MOV 23H,A MOV 24H,A MOV R3,A ;R3寄存器清0
MOV R1,#50H ;设字符表移入内存 ;单元首址 MOV R2,#20H;设查表次数(32次) CLLOOP: MOVC A,@A+DPTR;查表字符数据移入 ;内存单元 MOV @R1,A MOV A,R3 INC A MOV R3,A INC R1 DJNZ R2,CLLOOP;是否已查表32 ;次,未完转CLLOOP RET
TAB: DB 0EFH,83H,0ABH,83H,0ABH,83H,0EEH,0E0H ; 电 DB 0FFH,0C7H,0EFH,83H,0EFH,0EFH,0CFH,0EFH ; 子 DB 0B1H,0B5H,04H,0BFH,0B1H,0B5H,9BH,0A4H ; 设 DB 0BBH,0BBH,1BH,0A0H,0BBH,0BBH,9BH,0BBH ;计
键扫描子程序: KEYWORK:MOV P1,#0FFH;置输入状态 JNB P1.0,KEY1 ;P1.0为0(键按下)转KEY1 JNB P1.1,KEY2 ;P1.1为0(键按下)转KEY2 JNB P1.2,KEY3 ;P1.2为0(键按下)转KEY3 KEYRET: RET KEY1: LCALL DL10MS ;按键1功能处理,延 ;时10ms削抖动 JB P1.0,KEYRET ;是干扰转KEYRET结束 SETB 00H ;置逐字显示方式标志 ;(20H.0=1) CLR 01H CLR 02H RET ;子程序返回
KEY2: LCALL DL10MS;按键2功能处理 JB P1.1,KEYRET SETB 01H ;置上移显示方式标志 ;(20H.1=1) CLR 00H CLR 02H RET KEY3: LCALL DL10MS ; 按键3功能处理 JB P1.2,KEYRET SETB 02H ;置左移显示方式标志 ;(20H.2=1) CLR 01H CLR 00H RET
显示功能选择程序: FUN0:MOV 30H,#80H;逐字显示,1帧显示时间 ;(约1s) MOV 31H,#08H ;换帧跳转步距为8 LJMP DISP1 ;转显示子程序DISP1 FUN1:MOV 30H,#0AH ;上移显示,1帧显示时间 ;(约80ms) MOV 31H,#01H ;换帧跳转步距为1 LJMP DISP1 ;转显示子程序DISP1 FUN2:LJMP DISP2 ;左移显示
显示控制程序: DISP1: MOV B,#50H ;显示数据首址 MOV R4,30H ;放入1帧显示时间控制数据 MOV R5,31H ;放入跳转步距控制数据 LOOP: LCALL DISPLAY ;调用显示子程序一次 DJNZ R4,LOOP ;1帧显示时间未到再转 ;LOOP循环 MOV R4,30H ;1帧显示时间到,重装初值 MOV A,B CJNE A,#68H,CONT;不是末地址转CONT AJMP START1 ;是末地址,一次显示结束 ;跳回START1 CONT:ADD A,R5 ;次帧扫描首址调整 MOV B,A AJMP LOOP ;转LOOP进行次帧扫描
显示子程序: DISPLAY: MOV A,#0FFH MOV P0,A ;关显示数据 MOV P2,A ;关扫描 MOV R6,#0FEH ;赋扫描字 MOV R0,B;赋显示数据首地址 MOV R7,#08H ;一次扫描8行 DISLOOP: MOV A,@R0 ;取显示数据 MOV P0,A ;放入P0口 MOV P2,R6 ;扫描输出(显示 ;某一行) LCALL DL1MS ;亮1毫秒 INC R0 ;指向下一行数据地址 MOV A,R6 ;扫描字移入A
RL A ;循环左移一位 MOV R6,A ;放回R6 DJNZ R7,DISLOOP ;8行扫描未完转 DISLOOP ;继续 RET ;8行扫描结束 1毫秒延时子程序: DL1MS: MOV R3,#64H ;100×(10+2)μs LOOPK: LCALL KEYWORK DJNZ R3,LOOPK RET
五、总结与提高 该课程设计中,可以看出LED点阵显示的控制是在七段LED数码管显示控制的基础上扩展实现的,二者都是采用动态扫描方式进行设计,从原理上是完全相同的。在这个课题的基础上,还可扩展多个LED点阵显示以实现更加复杂的分批显示模式及中文字幕的显示。
课题三 电子万年历的设计与制作 • 一、实训目的 • 熟悉DS12887时钟日历芯片的特性及设置方法,DS12887芯片与单片机的接口电路及其设计方法; • 学会模块化程序设计方法。
二、课题要求 • 制作一个可调万年历。要求如下: • 内定时间为2000年1月1日12点00分00秒,提供给新产品或换电池时使用。 • 时间调整:开机时,光标停在“年”,移动光标依次修改年、月、日、时、分、秒。 • 每按P1.0一次,光标依年、月、日、时、分、秒顺序移动。 • 每按P1.1一次,光标所在位置的值加1。 • 每按P1.2一次,光标所在位置的值减1。 • 采用LCD液晶显示器显示。
三、背景资料 时钟日历芯片DS12887: • 能够自动产生年、月、日、时、分、秒等时间信息, • 芯片内部带有锂电池,外部掉电时,其内部时间信息能够保持10年之久; • 有12小时制和24小时制两种工作模式; • 时间的表示方法有两种:二进制数表示和BCD码表示。 • 用户可对DS12887进行编程以实现多种方波输出, • 用户可对其内部的三路中断通过软件进行屏蔽。
1、引脚说明 • Vcc:直流电源+5V输入 • 当Vcc输入为+5V时,用户可以访问DS12887内RAM中的数据,并可对其进行读、写操作; • 当Vcc的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息; • 当Vcc的输入小于+3V时,DS12887会自动将电源切换到内部自带的锂电池上,以保证内部的电路能够正常工作。 图10—11 DS12887引脚图
GND:地 • MOT:总线模式选择 当MOT接Vcc时选用Motorola总线模式,当MOT接GND时选用Intel总线模式。 • SQW:方波输出 当供电电压Vcc大于4.25V时,SQW脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出。 • AD0~AD7:双向地址/数据总线。 • AS:地址有效输入。 • DS/ :数据选通/读允许 当MOT接Vcc时作为数据选通;当MOT接GND时,作为读允许输入。
R/ :读/写允许输入。 若MOT接Vcc,该引脚为高电平时读操作,为低电平时写操作;若MOT接GND,该引脚作为写允许输入。 • :片选输入。低电平有效。 • :中断请求输出。低电平有效。 • :复位端。低电平有效,复位操作不影响时钟日历工作。 • NC:空引脚。
2、存储器分配与设置 DS12887片内RAM与寄存器地址分配见图10—12。 DS12887带有128字节片内RAM: • 10字节的时标寄存器:用来存储时间信息,地址00H~09H CPU可以通过读取时标寄存器获得时间与日历值,也可以编程设置其初值,时标寄存器的值可以用二进制或BCD码表示。 • 4字节的控制寄存器:用来存储控制信息,地址0AH~0DH 用户可通过对控制寄存器编程实现从SQW引脚输出多种不同频率的方波,并可对其内部的三路中断通过软件进行屏蔽。 • 114字节作为通用RAM供用户使用,地址为0EH~7FH。
控制寄存器的格式 ①寄存器A用于选择时钟频率、中断周期和SQW输出频率,格式如下: