第10章 综合实训 课题一 水温控制系统设计 一、实训目的 二、课题要求 熟悉常用温度传感器AD590的特性及接口电路的设计方法;

Slides:



Advertisements
Similar presentations
主讲人:刘利 交通大学网络控制课程系列 上海交通大学机电控制研究所 交通大学网络控制课程系列 考试课、专业基础课、必修课
Advertisements

第7章 AT89S51单片机的 串行口 1.
6 单片机的中断与定时系统 I/O设备必须通过I/O接口与计算机连接。 I/O接口的功能: 1.速度匹配: 锁存数据、传送联络信号。
第5章 中断系统 5.1 中断的概念 5.2 MCS-51单片机的中断流程 5.3 MCS-51的中断响应条件和中断处理
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
邵阳学院 信息工程系电子实践教学中心 江世明
第四章 指令系统及汇编语言程序设计.
8051 指令.
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
单片机原理与应用.
第4章 智能仪器通信接口 4.1 GPIB通用接口总线 4.2 GPIB接口电路的设计 4.3 串行通信总线 4.4 串行通信接口电路的设计
第9章 串行扩展技术 (课时:6学时).
第9章 数模转换器与模数转换器 本章学习目标 了解数模转换器的工作原理及性能指标 掌握模数转换器的应用 掌握数模转换器的应用.
第2章 MCS-51单片机指令系统与汇编语言程序设计
報告者:朱耿育 紀翔舜 組員:詹以群 張永傑 指導老師:梁新潁
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
单片机应用技术 项目一 循环彩灯装置 第6讲 指令功能及汇编语言程序设计(一) 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
6.3 定时器/计数器的应用 初始化 初始化的内容如下:
第8章 模拟接口 8.1 模拟接口概述 8.2 DAC及其接口 8.3 ADC及其接口.
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第14章 单片机应用系统抗干扰 与可靠性设计 1.
第二部分 微机原理 第8章 单片机的 定时/计数器 主讲教师:喻红.
第6章 MCS - 51单片机内部定时器/ 计数器 及串行接口 6.1 定时器/计数器的结构及工作原理 6.2 方式和控制寄存器
單晶片微電腦控制實習 使用計時中斷作走馬燈 計時器的基礎實習 國立大甲高工 電機科 2018年11月21日
本章分为三节,主要介绍: 6.1 计算机串行通信基础 C51的串行口 6.3 单片机串行口应用举例.
第七章 MCS-51系统扩展 一、程序存储器扩展
第3章 AT89C51指令系统 3.1基本概念内部结构和引脚功能 指令、指令系统、机器代码
单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用.
第七章 MCS-51并行口的扩展 MCS51单片机内部有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可外扩的并行口芯片很多,分成2类:不可编程的并行口芯片(74LS3734和74LS245)和可编程的并行口芯片(8255)。 7.1 不可编程并行口芯片的扩展 7.2 可编程并行口芯片的扩展.
4.A/D与D/A转换器 1).DAC0832与MCS-51接口
第2章 单片机的结构原理与 简单应用 (课时:10学时).
第八章 MCS-51与数码显示器和键盘的接口 一、MCS-51与数码显示器接口 数码显示器是单片机应用产品中最常用的廉价的输 出设备,它由8个发光二极管按一定规律排列而成, 当某一发光二极管导通时,则会被点亮,控制不同 组合的二极管导通,就能显示出各种字符。 1.显示器的结构.
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第三章 指令系统.
第3章 指令系统及程序设计举例 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数
第十章 人机交互接口 本章学习目标 掌握键盘接口技术 掌握数码、液晶显示技术 了解数码管显示驱动和键盘扫描控制专用芯片.
第8章 MCS-51串行口 8.1 串行口及其通信方式 8.2 IBM-PC系列机与 单片机 的通信技术.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第2章 单片机系统组成原理 2.1 MCS-51单片机组成原理 2.2 单片机复位电路设计 2.3 MCS-51存储器配置
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
单元五 MCS-51单片机内部资源 5.1 任务九 单片机计数并显示 5.2 任务十 单片机流水灯控制 5.3 任务十一 两台单片机数据互传
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第四章 指令系统及汇编语言程序设计.
第4章 中断技术 一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。
数码管数字时钟电路的设计 1. 系统硬件电路的设计
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
5-6 串列埠模式0輸出埠擴充實習.
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
3.1 指令系统简介 一、几个概念 二、汇编语言指令格式 三、指令的分类 四、指令的符号说明 主讲:吴政江 下一页.
第三章 计算机系统的组成与工作原理.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A
单片机原理与应用.
简单芯片扩展I/O接口 8155可编程接口芯片及其使用 键盘及显示器接口设计 A/D和D/A转换接口技术
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第二章 MCS-51单片机程序设计 第一章 8086程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第2章 80C51单片机的硬件结构 教学基本要求: (1)、熟悉单片机的定义、名称、分类方法;
第1章 微型计算机基础.
Presentation transcript:

第10章 综合实训 课题一 水温控制系统设计 一、实训目的 二、课题要求 熟悉常用温度传感器AD590的特性及接口电路的设计方法; 第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引脚、封装及图形符号

表10—1 各温度与电流、电压参考关系表 温度值 AD590电流 经10kΩ电压V 放大器输出V0 (ADC0809的VIN) 表10—1 各温度与电流、电压参考关系表 温度值 AD590电流 经10kΩ电压V 放大器输出V0 (ADC0809的VIN) ADC0809的输出 0ºC 273.2μA 2.732V 0V 00H 10ºC 283..2μA 2.832V 0.49V 19H 20ºC 293.2μA 2.932 V 0.98V 32H 30ºC 303.2μA 3.032 V 1.47 V 4BH 40ºC 313.2μA 3.132 V 1.96 V 64H 50ºC 323.2μA 3.232 V 2.45 V 7DH 60ºC 333.2μA 3.332 V 2.94 V 96H 70ºC 343.2μA 3.432 V 3.43 V AFH 80ºC 353.2μA 3.532 V 3.92 V C8H 90ºC 363.2μA 3.632 V 4.41 V E1H 100ºC 373.2μA 3.732 V 4.90 V FAH

AD590是电流输出型器件,必须利用接口电路将AD590输出的电流信号转换成电压信号,再经A/D转换器转换成数字信号,提供给单片机处理。在 表10—1中,列出了在不同温度值下的AD590的输出电流,通过图10—2的放大电路可将输出电流转换成0~5V的模拟电压。 图10—2 温度采集电路

由于系统对控制精度的要求不高,所以选用内部具有程序存储器芯片的AT89C51就可以满足要求了。 四、硬件电路 硬件电路由单片机、温度检测模块、加热控制模块、键盘设定模块及数据显示模块构成。 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所示。

图10—3 水温控制系统硬件原理图

五、软件设计 1、程序结构设计 (1)主程序 用于进行初始化处理,包括各端口的初始化,定时/计数器的设定、中断允许的设定等。同时进行键盘的扫描输入。图10—4为主程序流程图。 (2)定时中断服务程序 通过单片机内部的定时器T0进行50ms定时,再通过寄存器R6进行计数,以实现1s定时中断的要求。进入中断服务程序后,可进行当前温度的检测及显示,根据所测值与设定值比较进行温度控制等。图10—5为中断服务程序流程图。

图10—4 主程序流程图 图10—5 定时中断服务程序流程图

通过比较键盘设定值与温度检测值的差别,按照一定的控制规律,控制输出口线的状态,实现三组加热丝的控制。图10—7为温度控制程序流程图。 (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 CLR C 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

CCPR2: MOV P1,#0FEH ;开一组加热器 CONEND: RET 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点阵显示器制作电子显示屏 一、实训目的 熟悉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三极管。

图10—8 硬件电路图

主程序用于对系统进行初始化,扫描按键开关状态,由按键标志位值(00H、01H、02H)决定显示的方式。主程序流程图如图10—9所示。 四、软件设计 1、程序结构设计 (1)主程序 主程序用于对系统进行初始化,扫描按键开关状态,由按键标志位值(00H、01H、02H)决定显示的方式。主程序流程图如图10—9所示。

图10—9 主程序流程图

(2)初始化子程序 (3)显示子程序 显示子程序由显示功能选择程序和显示控制程序组成。 显示功能选择程序: 用于对端口进行复位操作,将显示用的字符数据从字符表中装入内存单元50H~6FH中。字符表中的每个文字占用8个地址单元。 (3)显示子程序 显示子程序由显示功能选择程序和显示控制程序组成。 显示功能选择程序: 负责每次显示时的显示地址首址(在B寄存器中)、每个字的显示时间(由30H中的数据决定)和下一个显示地址的间隔(31H中的数据决定)的处理。

显示子程序: 负责对指定8个地址单元的数据进行输出显示。 显示一个完整文字的时间约为8ms。 在显示子程序中,1ms延时程序是用调用键扫描子程序的方法实现的。图10—10为逐字显示及向上滚动显示方式时的显示控制程序流程图。 (4)按键扫描程序 用于将按键的状态扫描至20H单元的低三位(20H.0、20H.1、20H.2)中。同时在程序中利用按键扫描程序代替显示程序中的1ms延时程序,既可以提高按键的快速响应,又可以提高动态显示的扫描频率,减少文字显示时的闪烁现象。

图10—10 逐字显示及上移显示程序流程图

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 键扫描子程序: 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

显示功能选择程序: 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进行次帧扫描

DISLOOP: MOV A,@R0 ;取显示数据 MOV P0,A ;放入P0口 MOV P2,R6 ;扫描输出(显示 ;某一行) 显示子程序: 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时,作为读允许输入。

若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。

10—12 片内RAM与寄存器地址分配

时标寄存器的数据格式,见下表所示。 地址 单元 功能 十进制范围 范 围 十六进制码 BCD码 秒 0~59 00~3B 00~59 1 范 围 十六进制码 BCD码 秒 0~59 00~3B 00~59 1 秒闹钟 2 分 3 分闹钟 4 时(12小时方式) 1~12 01~0C AM,81~8C PM 01~12 AM,81~92 PM 时(24小时方式) 0~23 00~17 00~23 5 时闹钟(12小时方式) 时闹钟(24小时方式) 6 星期(星期天=1) 1~7 01~07 7 日 1~31 01~1F 01~31 8 月 01~0C 01~12 9 年 0~99 00~63 00~99

控制寄存器的格式 ①寄存器A 用于选择时钟频率、中断周期和SQW输出频率,格式如下: D7 D6 D5 D4 D3 D2 D1 D0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0

UIP:更新周期标志。 当UIP=1时,表示芯片正处于或即将开始更新周期,在此期间不允许读写时标寄存器; 当UIP=0时,表示没有更新周期,此时可读时标寄存器。 DV2~DV0:芯片内部振荡器RTC控制位。 当芯片复位后500ms开始第一个更新周期。将这3位设置成010,可使芯片以内置的32.768kHz的振荡频率工作。 RS3~RS0:周期中断可编程方波输出速率选择位。 这4位不同的组合可以产生不同的方波输出,程序可以通过设置寄存器B的SQWE和PIE位控制是否允许周期中断方波输出。RS3~RS0与中断周期及SQW输出频率的对应关系如表10—3所示。

表10—3 时钟频率选择 寄存器A选择位 32.768kHz时钟频率 RS3 RS2 RS1 RS0 中断周期 SQW输出频率 — 1 表10—3 时钟频率选择 寄存器A选择位 32.768kHz时钟频率 RS3 RS2 RS1 RS0 中断周期 SQW输出频率 — 1 3.09625ms 256Hz 7.8125 ms 128 Hz 122.070 μs 8.192 kHz 244.141μs 4.096 kHz 488.281μs 2.048 kHz 976.5625μs 1.024 kHz 1.953125 ms 512 Hz 3.90625 ms 256 Hz 15.625 ms 64 Hz 31.25 ms 32 Hz 62.5 ms 16 Hz 125 ms 8 Hz 250 ms 4 Hz 500 ms 2 Hz

②寄存器B 主要用于设置芯片的工作状态,格式如下: D7 D6 D5 D4 D3 D2 D1 D0 SET PIE AIE UIE SQWE DM 24/12 DSE SET:允许更新周期位。可读/写,不受信号的影响。 当SET=0时,芯片处于正常更新状态; 当SET=1时,芯片正常更新被禁止。 PIE、AIE、UIE:分别为周期中断、闹钟中断、更新周期结束中断允许位。 各位分别为“1”时允许发出相应的中断,由端输出。其中,UIE位在复位或设置SET为1时清零。

SQWE:方波输出允许位。 当SQWE=1,按寄存器A输出速率选择位所确定的频率输出方波; 当SQWE=0,SQW脚保持低电平。 DM:时标寄存器格式选择位。 DM=0,为BCD码; DM=1,为二进制码。 24/12:24小时或12小时模式设置位。 24/12=1,选择24小时工作模式; 24/12=0,选择12小时工作模式。 DSE:夏令时允许标志位。

特点:程序读寄存器C或复位后,该寄存器的内容将自动清零。格式如下: 当DSE=1时,夏时制设置有效。在四月的第一个星期日的1:59:59 AM,调到3:00:00 AM;在十月的最后一个星期日的1:59:59 AM,调到1:00:00 AM。 当DSE=0无效。 ③寄存器C 为中断标志位寄存器。 特点:程序读寄存器C或复位后,该寄存器的内容将自动清零。格式如下: D7 D6 D5 D4 D3 D2 D1 D0 IRQF PF AF UF IRQF:中断申请标志位。 该位逻辑表达式为:IRQF = PF · PIE+AF · AIE+UF · UIE。当IRQF=1时,IRQ引脚将输出低电平。

PF、AF、UF:这三位分别为周期中断、闹钟中断、更新周期结束中断标志位。 只要满足各中断的条件,相应的中断标志位将置“1”。 寄存器C的D3~D0位为0,不使用。 ④寄存器D 为状态标志寄存器,只有一个标志位VRT(D7),其余各位均为0。格式如下: D7 D6 D5 D4 D3 D2 D1 D0 VRT VRT:芯片内部RAM与寄存器内容有效标志位。 该位为“1”时,表示芯片内部RAM和寄存器内容有效。读该寄存器后,该位将自动置“1”。

四、硬件设计 硬件电路见图10—13。采用AT89C51单片机作控制器,时钟频率为12MHz。显示器可采用LED显示,但由于LED数码显示所需的数码管较多,这里选用LCD显示器实现。 P1.0~P1.2口分别接开关K1、K2、K3,分别用于光标的移动及整定时间时的数字调整。

图10—13 万年历硬件原理图

(1)DS12887初始化:给寄存器A、B、C、D送控制字(片选有效) 五、软件设计 1、内部控制寄存器命令字设置 (1)DS12887初始化:给寄存器A、B、C、D送控制字(片选有效) ①(0AH)=20H 设置DS12887时钟频率为32.768kHz,DV2~DV0=010; ②(0BH)=82H 设置DS12887更新周期停止,可进行时钟设定,时间和日期采用BCD码,时间单元为24小时计时方式。 (2)DS12887开始计时:设置(0BH)=12H 由UIE=1激活,实现时钟输出显示更新。 (3)LCD液晶显示控制器设置(略)

2、程序结构设计 (1)主程序 用于实现初始化操作,包括中断设置、DS12887时钟芯片及LCD液晶显示控制器的初始化设置等。流程图见10—14所示。 (2)外部中断0服务程序 用于实现DS12887时钟芯片更新值的输出及显示操作。流程图见10—15所示。 (3)按键扫描子程序 用于将三个按键的输入状态扫描至89C51相应的寄存器中,进行光标移动、加1或减1的处理。

(4)显示子程序 用于将显示缓冲区数据依次输出到LCD显示器上。 (5)加1处理子程序 将加1按键的输入状态转换为对相应存储单元的加1操作,并将BCD码转换成ASCII码送显示缓冲区。 (6)减1处理子程序 将减1按键的输入状态转换为对相应存储单元的减1操作,并将BCD码转换成ASCII码送显示缓冲区。 (7)内定时间写入子程序 用于将内定时间00年1月1日12点00分00秒输入DS12887相应的时标寄存器中。

图10—14 主程序流程图图 10—15 中断服务程序流程图

3、主要程序模块清单 主程序: ORG 0000H AJMP MAIN ORG 0003 AJMP EX0INT MAIN: MOV SP,#60H ;设置堆栈指针 ACALL BUSY ;调用检测LCD是否忙 ;的子程序 MOV A,#01H ;LCD清屏 MOV DPTR, #8100H ;送LCD指令寄存地址 MOVX @DPTR,A ACALL LCDFIRST ;调用LCD初始化程序

MOV IE,#81H ;外部中断0允许 MOV A,#20H ;对DS12887的寄存 ;器A赋初值 MOV DPTR,#020AH;送DS12887的寄 ;存器A的地址 MOVX @DPTR,A MOV A,#82H;对DS12887的寄存器B ;赋初值 MOV DPTR,#020BH;送DS12887的寄 ;存器B的地址 MOV DPTR,#020EH;读DS12887寄存器0E ;的内容 MOVX A, @DPTR

CJNE A,#01H,LOOP;为0则未设内定 ;时间 SJMP LOOP1 LOOP: ACALL RAMSTART ;调用内定时间写入子 ;程序 LOOP1:ACALL DISP ;调用成组字符显示子程序 MOV A,#12H;启动DS12887开始计时 MOV DPTR,#020BH MOVX @DPTR,A LOOP2:ACALL KEYSCAN;调用键盘扫描子程序 SJMP LOOP2

中断服务子程序: EX0INT: PUSH ACC ;现场保护 PUSH PSW MOV DPTR,#020CH ;读C寄存器, ;清除中断标志位IRQF MOVX A, @DPTR MOV R2,#00H ;光标位置偏移值 EX01: MOV DPTR,#CUR;LCD光标位置表首地址 MOV A,R2 MOVC A,@A+DPTR;读取光标地址值 ACALL BUSY ;检测LCD是否忙? MOV DPTR,#8100H;送LCD指令寄存器地址 MOVX @DPTR,A MOV DPTR,#TIM;DS12887内部时标寄存器 ;表首地址

MOV A,R2 MOVC A,@A+DPTR;读时标寄存器的地址 MOV DPTR,#0200H;送时标寄存器首址 MOV DPL,A;指向相应时标寄存器地址 MOVX A, @DPTR ;读相应时标寄存器的内容 ACALL BCDACSII;调用BCD码转换ACSII码子程序 ACALL DISP1 ;调用单字符显示子程序 INC R2;指向下一时间单元的处理 CJNZ R2,#06H,EX01 ACALL CURRET;调用光标复位子程序 POP PSW;恢复现场 POP ACC RETI CUR:DB 82H,85H,88H,8BH,8EH,91H ; ;LCD“年月日时分秒”光标地址表 TIM: DB 09H,08H,07H,04H,02H,00H ;时 ;标寄存器“年月日时分秒”地址

内定时间写入子程序: RAMSTART:MOV A,#00H ;写入00秒 MOV DPTR,#0200H MOVX @DPTR,A INC DPTR MOVX @DPTR,A ;写入00分 MOV A,#12H MOV DPTR,#0204H MOVX @DPTR,A ;写入12时 MOV A,#01H MOV DPTR,#0207H

MOVX @DPTR,A ;写入1日 INC DPTR MOVX @DPTR,A ;写入1月 MOV A,#00H;写入00年 MOVX @DPTR,A MOV DPTR,#020EH ;设定已设置内定时 ;间标志 MOV A,#01H RET

六.总结与提高 该课程设计中,为了正确地访问时间和日期信息,使用了更新结束中断(UIE=1)的方式实现时间和日期的读取。DS12887的使用非常灵活,读者也可用查询UIP位的方式或设定周期中断速率的方式来实现时间与日期的读取。为了使万年历的程序设计更加完善,还可在此基础上,增加闹钟定时程序等相关内容。