版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于 AT89C51 的单片机课程设计 60S 倒与时钟烟台南山学院单片机课程设计The Design Of Single Chip Micro Computer Course课题名称:60S倒与时钟 自动化 07 自动化本科 1 班 2007790054学班姓学院:级: 名: 号:2009 年 12 月 14 日至 2009 年 12 月 27 日共 2 周指导:1基于 AT89C51 的单片机课程设计 60S 倒与时钟中要近年来随着计算机在领域的渗透, 单片机的应用正在不断地深入,同时带动传统作为一个检测日新月益更新。在实时检测和自动的单片机应用系统中,单片机往往是部件来使用,仅单片机方面
2、知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的结合,以作完善。本此课程设计我主要设计了简单的 60 秒倒器的设计与制作以及简单时钟的设计 ,此次设计主要由硬件与两部分组成,硬件主要由 Proteus 此进行硬件模拟,主要用 keil C51 采用汇编语言编译。通过此次设计加深了我对单片机知识的运用与理解,同时还让我学会了 Proteus的应用。限于,设计者的学识有限,缺点错误在所难免,殷切希望,同学给予批评、指正。【】 单片机;AT89S51; LED 数码管显示器;keil C51;倒器;时钟英要Permeate in the social realm along with
3、the calculator in recent years, single slice the application of the machine just at constantly alignment thorough, arouse a traditional control anexamination a day a new moon benefit renewal in the me.In solidly the hour theexamination the single slice that controls with auto the machine the applica
4、tion the system, single slice machine usually Be a core parts to use, only single slice the machine aspect knowledge is not enough, return should according to concrete the hardware structure, and aim at concrete application the software ofwith the object characteristics combine to make perfect.The m
5、ain design of this course design I have a simple 60-second countdown Design and production, as well as simple electronic clock design, the design of hardware and software, mainly b y two parts, hardware, the software mainly by Proteus hardware simulation, software, mainly use of assembly language us
6、ing keil C51 compiler. With this design has deepened my knowledge of the use and understanding of the SCM, but also I learned Proteus software applications.Limited to, the designer's knowledge is limited, shortcos and mistakes are inevitable,earnestly hope that the teachers ands be criticized an
7、d corrected.【Key words 】SCM; AT89S51; LED digital tube displays; keil C51; countdown device; electronic clock2基于 AT89C51 的单片机课程设计 60S 倒与时钟目与录时钟设计任务书1一、基于 AT89C51 的 60S 倒二、课程设计总体硬件部分说明22.1 单片机概述22.2 AT89C51概述22.3 LED 数码管显示器概述42.4 单片机的最小系统与复位电路6三、设计一 60S倒73.1 硬件设计原理图73.2设计73.3 程序编译83.4调试10四、设计二时钟114.1
8、 硬件设计114.2设计121523234.3 程序编译五、心得体会与致谢六、参考文献3基于 AT89C51 的单片机课程设计 60S 倒与时钟一、 基于 AT89C51 的 60S 倒与时钟设计任务书烟台南山学院课程设计任务书自动化自动化专业07 自动化本科 1 班课程设计题目:60S 倒与时钟完成期限:从 2009 年 12 月 14 日起到 2009 年 12 月 27 日1、设计任务、指标内容及要求:(1)单片机的 60s 倒设计要求1 用单片机 AT89C51 的定时器实现 60s 倒。本例中用两位数码管静态显示倒秒值。2 用 PROTEUS 设计,基于 AT89c51 单片机的 6
9、0s 倒实验。(2)基于单片机的时钟设计要求1 可以设置时间;2 时钟必须有定闹功能,定闹设置掉电不丢失;3 掉电时间不丢失。2、设计目的:(1)掌握单片机中汇编语言的使用(2)学会使用 Proteus 以及 keil的编辑使用(3) 真正理解单片机中软硬件结合工作的原理(4) 学会查阅资料进行课程的设计(5) 学会对设计结果整体评估(6) 确定最终方案,并进一步优化完成两个设计3、设计的大体分析:这两个设计题目要求的硬件电路都主要由 AT89C51、LED 数码管显示器、晶振产生电路、复位电路组成。其中时钟的课程设计外加了 8155的扩展电路。还有 AT89C51能。主要由完成驱动。最终通过
10、 Keil 与 Proteus联调完成模拟功4、分析草图如下:图一4基于 AT89C51 的单片机课程设计 60S 倒与时钟二、课程设计总体硬件部分说明2.1 单片机概述单片机因将其主要组成部分集成在一个上而得名,具体说就是把处理器器ROMCPU(Central processing unit)。随机器RAM(Random access memory)。只读(only memory)。 中断系统、定时器计数器以及IO(Input/output)接口电路等主要微型机部件集成在一个上。虽然单片机只是一个,但从组成和功能上看,它已具有了计算机系统的属性。为此,称它为单片微型计算机SCMC(Singl
11、e chip microcomputer),单片机。单片机主要应用与也可以把单片机称为微领域,用以实现各种测试和功能,为了强调起属性, 器”的器MCU(Micro controller unit)。在国际上,“微叫法似乎更通用一些,而在我国则比较习惯与“单片机”这一名称。 单片机在应用时,通常是处于系统的地位并融入其中,即以嵌入的方式进行使用,为了强调其嵌入的特点,也常常将单片机称为在单片机的电路和结构中,有许多微器EMCU(Embedded micro controller unit)。应用的特点。2.2 AT89C51概述AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k
12、Bytes ISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序器,器件采用ATMEL公司的高密度、非通用8位技术,兼容标准MCS-51指令系统及80C51引脚结构,内集成了处理器和ISP Flash单元,功能强大的微型计算机的AT89C51可为许多嵌入式应用系统提供高性价比的解决方案。AT89C单片机为很多系统提供了一种灵活性高且价廉的方案。列如图二所示其工作电压在4.5-5V,我们选用5V电压。外形及引脚排图二5基于 AT89C51 的单片机课程设计 60S 倒与时钟(1) AT89C51·与 MCS-51 兼容·4K 字节可编
13、程闪烁器主要性能:·:1000 写/擦循环·数据保留时间:10 年·全静态工作:0Hz-24MHz·三级程序器锁定·12位内部 RAM·32 可编程 I/O 线·两个 16 位定时器/计数器·5 个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路(2)管脚说明1 电源及时钟引脚(4 个) Vcc: 电源接入引脚Vss:接地引脚XTAL1:晶振震荡器接入的一个引脚(采用外部振荡器时,此引脚接地);XTAL2:晶体振荡器的另一个引脚(采用外部振荡器时,此引脚作为外部振荡
14、器信号的输入端)。2线引脚(4个)RST/Vpd:复位信号输入引脚/备用电源输入引脚;ALE:地址锁存信号输出引脚/编程脉冲输入引脚:EA:内外器选择引脚/片外EPROM编程电压输入引脚;PSEN:外部程序3 并行I/O引脚P0.0-P0.7: P1.0-P1.7: P2.0-P2.7:P3.0-P3.7:器选通信号输出引脚。I/O口引脚或数据/低位地址总线复用引脚; I/O口引脚; I/O口引脚或高位地址总线引脚;I/O口引脚或第二功能引脚(3)振荡器说明XTAL1 和 XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器
15、件,XTAL2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。6基于 AT89C51 的单片机课程设计 60S 倒与时钟2.3 LED 数码管显示器概述1 在 60S 倒的设计中采用的是 7SEGCOM ANODE 型号数码管,它是一种半导体发光器件,其基本单元是发光二极管。该设计用到是 LED 数码管的静态显示,其中该设计中用到的实物如下图三所示:图三图四而在时钟设计中采用的是 7SEG-MPX6-CA 型号数码管,其中用到是LED 数码管的动态显示,同样实物图如图四所示2 数码管的数码管按分为七码管和八码管,八
16、码管比七码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为 1 位、2 位、4 位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电,相应字段就点亮。当某一字段的阴极为高电,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用将公共极 COM 接到地线 GND上,当某一字段发光二极管的阳极为高电,相应字段就点亮。当某一字段的阳极为低电,相应字段就不
17、亮(其图形如下图五所示)。LED数码管有两种连接如下:共阳极接法。把发光二极管的阳极连在一起每个发光二极管的阴极通过电阻与输入端相连。共阴极接法。把发光二极管的阴极连在一起个发光二极管的阳极通过电阻与输入端相连。公共阳极,使用时公共阳极接+5V,公共阴极,使用时公共阴极接地。每图五LED数码显示器的显示段码。 为了显示字符,要为LED显示器段码(或称字形代码),7基于 AT89C51 的单片机课程设计 60S 倒与时钟组成一个8字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED显示器的显示段码为1个字节。各段码位的对应码。如下表一所示.十六进制数及空白字符与P的显示段表一3 数码管
18、的驱动方式数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管驱动方式的不同,可以分为静态式和动态式两类。一、 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的 I/O 端口进行驱动,或者使用如 BCD 码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用 I/O 端口多,如驱动 5 个数码管静态显示则需要 5×840 根 I/O 端口来驱动,要知道一个 89S51 单片机可用的 I/O 端口才 32 个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。二、
19、 动态显示驱动:数码管动态显示接口是单片机中应用最的一种显示方式之一,动态驱动是将所有数码管的 8 个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极 COM 增加位选通电路,位选通由各自的 I/O 线,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通 COM 端电路的,所以我们只要将需要显示的数码管的选通打开,该位就显示出字形,没有选通的数码管就亮。通过分时轮流各个数码管的的 COM 端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为 12
20、ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组的8段码位D7D6D5D4D6D2D1D0显示段pdgfedeba字型共阳极段码共阴极段码字型共阳极段码0C0H3FH990H1F9H06HA88H2A4H5BMB83H3B0H4FHCC6H499H66HDA1H592H6DHE86H682H7DHF84H7F8H07H空白FFH880H7FHP8CH基于 AT89C51 的单片机课程设计 60S 倒与时钟显示数据,有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口,而且功耗更低。4 数码管使用的
21、电流与电压电流:静态时,推荐使用 10-15mA;动态时,16/1 动态扫描时,平均电流为 4-5mA, 峰值电流 50-60mA。电压:查引脚排布图,看一下每段的数量是多少?当红色时,使用 1.9V 乘以每段的串联的个数;当绿色时,使用 2.1V 乘以每段的串联的个数。5 其他元器件及参数选择这两个设计中还用到其他一些元器件,例如:晶振,电容,电阻排,电解电容,开关、8155等等。其中60S倒中晶振采用频率为12MHZ,连接的两个电容为30pF;电解电容为10u;按钮开关功能是在过程中,按下开关便能实现60秒复位。8155主要在时钟设计中应用,其作用主要是实现电路线的扩展,当然还有其他应用这
22、里不再赘述。2.4单片机的最小系统与复位电路(1)最小系统最小系统就是单片机在发挥具体测控功能时所必须的组成部分。如下图六所示为最小系统方框图:图六(2)复位电路复位电路产生复位信号,复位信号送入RST后还要送至片内的触发器,由片内复位电路在每个机器周器的S5P2时刻对触发器输出采样信号,然后由内部复位电路产生复位操作所要的信号。按键复位。的复位电路可分为上电自动复位和按键复位,我们在此选用的是按键复位较为简单,这里简述一下上电复位。上电自动复位原理:RST引脚是复位信号的输入端,只要高电平的复位信号持续两个机器周期以上的有效时间,就可以使单片机上电复位。上电自动复位是通过电容充电实现的,上电
23、瞬间,RST端电位与Vcc相同,随充电电流的减少,RST的电位逐渐下降,直到复位信号无效。9基于 AT89C51 的单片机课程设计 60S 倒与时钟三、设计一60S倒3.1硬件设计原理图:图七电路是用 Proteus 模拟关于 60S 倒硬件电路的说明:此的,其中晶振采用 12MHz,复位电路采用的是按键复位,其工作原理比较简单,这里不再赘述。3.2设计:(1)程序框图如图:图八10基于 AT89C51 的单片机课程设计 60S 倒与时钟(2) 定时/计数器初值计算1 本电路应用TIMER0 MODE 16位计数器的中断法。2 1秒等于1000000微秒,而每一脉冲是1微秒,因此需输入1000
24、00个脉冲,方可达到1秒的时间。本设计中,设定中断每次溢出时间50ms。3 由上式得知,循环20次即可达到1秒定时,即: N=t/Tcy=0.05s/0.000001=5000X=65536-5000=15536=3CB0H4 由上式得知5000个脉冲,首先需设定TL0=3CH,TH0=0B0H,此时第1次只要输入5000个脉冲输入,就会溢出;第2次至第20次,则需每1000000个脉冲,定时1秒。5 按键时,显示 60,开始倒数3.3 程序编译:(1) 汇编程序:按下开关实现复位。ORG AJMP ORG MOV MOVMOV0000H MAIN0030HMAIN:LOOP1:R2,#60
25、A,R2B,#10;计数初值DIVMOVABDPTR,#TABLEMOVC A,A+DPTR;查表;十位显示MOVMOVP0,AA,BMOVC A,A+DPTRMOV MOV MOV MOVMOVP2,A R7,#20 TMOD,#01H TH0,#3CHTL0,#0B0H;个位显示LOOP0:;置T0工作于方式0;装入计数初值SETB TR0;启动定时器T0;TF0=0,等待;清TF0;循环20次;减一;倒11JNBCLRTF0,$TF0DJNZ R7,LOOP0DECR2CJNER2,#0FFH,LOOP1基于 AT89C51 的单片机课程设计 60S 倒与时钟AJMPMAIN;复位回到6
26、0秒初始TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END(2)单片机 C 编译#include<reg52.h>unsigned unsignedxa4,0xf9;unsignedchar num,t,n;char code table=0xc0,0x90,0x80,0xf8 ,0x82,0x92,0x99,0xb0,0char code table1=0x92,0x99,0xb0,0xa4,0xf9,0xc0;void main()num=0; t=0; TMOD=0x01;TH0=(65536-50000)/25
27、6; TL0=(65536-50000)%256; EA=1;ET0=1; TR0=1; P0=0xc0; P2=0x82;while(1)if(t=20)t=0;num+; if(num=10) num=0; P2=tablenum; if(num=1)P0=table1n; n+;if(n=6)if(num=0) while(1);void exter0() interrupt112基于 AT89C51 的单片机课程设计 60S 倒与时钟TH0=(65536-50000)/256; TL0=(65536-50000)%256; t+;3.4调试(1)系统调试工具 keil c51Keil
28、C51器是一款利用KEIL C51 的IDE 集成开发环境作为环境的廉价器,是利用SST公司具有IAP功能的单片机SST89C58制作而成,主要是利用了SST89C58的IAP功能,所谓IAP功能是In application program 的英文缩写,是在应用编程的意思,通俗一点讲就是:它可以通过串口将用户的程序到单片机中,可以通过串口对单片机进行编程。它之所以具有这种功能,实际上它有两块程序flash区,其中一块flash中运行的程序可以更改另外的一块程序flash区中的程序,正是利用这一特性才用它作成了器,我们把器的程序事先烧入SST89C58,程序通过SST89C58的串口和PC通讯
29、,当使用KEIL C51的IDE环境用户设置断点等操作功能 。时,用户的程序通过串口被程序写入flash中,当,flash程序中的用户程序也在相应的更改,从而实现了调试的主要:1. 启动 Keil c512. 新建一个工程。Project菜单New project ,选择好我们要保存的文件夹后, 键入Frist 保存。接着弹出CPU类型选择框,我们选择最常用的AT89C51,按确定。3. 在工程中加入文件。新建一个文件,文件菜单FileNew,我们再选择:文件菜单FileSave As? (另存为)弹出框后,我们文件名框中键入First.c(注意文件后缀名是 .c)保存。C文件建好啦。现在我们
30、把文件加入到工程中去。 点击Target 1前面的+号,右键单击Source Group 1选择Add Files to Group ,Source Group 1,选择添加 Add。编译运行,检查程序是否有错误。(2)ProteusProteus 是一款 EDA,该具有模拟电路,数字电路,单片机以及电路组成的系统的,RS-232 动态,I2C 调试器,SPI 调试器,键盘和 LCD 系统的,以及各种虚拟仪器,如示波器,逻辑分析仪,信号发生器等。该目前支持的单片机类型有:68000 系列、8051 系列、AVR 系列、PIC12 系列、PIC16 系列、PIC18 系列、Z80 系列、HC11
31、 系列、ARM 以及各种。该还支持大量的器和,所以,该调试是一款集单片机和 SPICE 分析于一身的。:首先用 Keil将 C 编译成 HEX 文件,打开 Keil,新建一个文档,输入 C 程序,保存成 C 格式文件,然后新建工程,连接单片机为 AT89C51,选择 Options fortarget,选择 OUTPUT 子菜单,在 Create HEX Fi 前打钩,DeBug 子菜单中,Settings 选择 ProteusVSM Simulator,USE 前打钩,再次运行文件,13后在目录下会生成 HEX 文件,基于 AT89C51 的单片机课程设计 60S 倒与时钟打开 Proteu
32、s,或直接点击 DSN 文件,双击单片机模板,点击文件夹式样的图标选择对应的 HEX 驱动文件,然后点击开始,进行调试。至此基于 AT89C51 的 60S 倒设计完毕!四、设计二时钟4.1 硬件设计(1)电路原理图时钟的是 89C51 单片机,系统配备 62 位 LED 显示器和 4 ´3 键盘,采用 8155 作为键盘、显示接口电路,利用 8155 的 A 口作为 6 位 LED 显示器的位选口,其中,PA0-PA5分别对应为 LED0-LED5;B 口则作为;C 口德低 3 位为键盘输,对应 0-2 行;A口同时用作键盘的列扫描口。由于采用共阴极数码管,因此 A 口输出低电平选
33、中相应的位, 而 B 口输出高电平点亮相应的段。P1.0 接蜂鸣器,低电平驱动蜂鸣器鸣叫启闹。电路如下图所示。图九8155 的地址分配如下:A 口:8001H,定义为 PORTA B 口:8002H, 定义为 PORTB C 口:8003H, 定义为 PORTC(2)系统工作流程本时钟具备功能如下:1 时钟显示:6 位 LED 显示器从左到右依次显示时、分、秒,采用 24h;2 键盘功能:采用 4´3 键盘,以下键;zzz“0-9”数字键,键号为 00H-09H;“*”键 时间设定/启动键,键号为 0AH“#”键 闹钟设置/启闹/停闹键,键号为 0BH其工作流程如下:1 时间显示:上
34、电后,系统自动进入时钟显示,从 00:00:00 开始14,此时可以基于 AT89C51 的单片机课程设计 60S 倒与时钟设定当前时间。2 时间调整:按“*”键,系统停止,进入时间设定状态,系统保持原有显示,等待键入当前时间。按“0-9”数字键可以顺序设置时、分、秒,并在相应的 LED 显示器上显示设置值,直至 6 位设置完毕。系统将自动由设定的时间开始显示。3 闹钟设置/启闹/停闹;按“#”键,系统继续,显示 00:00:00,进入闹钟设置状态,等待键入启闹时间。按“0-9”数字键可以顺序进行相应的时间设置,并在相应的 LED 显示器上显示设置值,直至 6 位设置完毕。启动定时启闹功能,并
35、恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按“#”键停闹,并取消闹钟设置。4.2设计(1)系统资源分配说明1 定时器:定时器 0 用作时钟定时,按方式 1 工作,每隔 100MS 溢出中断一次;2 片内 RAM 及标志位的分配与定义如下表所列表二(2)流程根据上述工作流程,设计可分为以下几个功能模块。1主程序:初始化与键盘。2:为定时器 0 中断服务子程序,完成刷新缓冲区的功能。3时间设置于闹钟设置:由键盘输入设置当前时间与定时启闹时间。4显示:完成 6 位动态显示。5键盘扫描:是否有键按下,并取键号。6定时比较:启闹时间到否?如时间到,则启动蜂鸣器鸣叫。7其他辅助功能子程序,如键盘设置、
36、拆字、合字、时间检测等。下面分模块进行设计:1 主程序模块 MAIN:主程序流程图如图十所示;15地址功能名称初始化值30H-35H显示缓冲区,小时、分、秒(高位在前)DISP0-DISP500H3CH-3FH缓冲区,时、分、秒、100msHOUR,MIN,SEC,MSEC00H40H-42H闹寄存区,时、分、秒AHOUR,AMIN,ASECFFH50H-7FH堆栈区PSW.5显示位(1:,0:)F00PSW.1闹钟标志位(1:正在闹响,0:未闹响)F10基于 AT89C51 的单片机课程设计 60S 倒与时钟2程序模块 CLOCK:程序流程图如图十一所示。图十图十一。定时 0 每隔 100m
37、s 溢出中如前所述,系统定时采用定时器与循环相结合的断一次,则循环中断 10 次延时时间为 1s,上述过程重复 60 次为 1min,分时 24 次则时间重新回到 00:00:00.60 次为 1h,设系统使用 6MHz 的晶振,定时器 0 工作在方式 1,则 100ms 定时对应的定时器初值可由下式计算得到,即定时时间=(216 -定时器 0 初值)´(12/f)因此,定时器 0 初值osc=3CB0H,即 TH0=3CH,TL0=0B0H。3 时间设置示。将键盘输入的 6 位时间值合并为 3 位压缩 BCD 码(时、分、秒)送入缓冲区和闹闹钟定时程序模块 MODIFY:时间设置/
38、闹钟定时流程图如图十二所寄存区,作为当前起始时间或闹钟定时时间。该模块的为缓冲区或闹钟值寄存区的周地址,置入 R1 中。程序调用一个键盘设置子程序 KEYIN(如图 5-7 所示)将16基于 AT89C51 的单片机课程设计 60S 倒与时钟输入的 6 位时间值送入键盘设置缓冲区,然后用合字子程序 COMB 将键盘设置缓冲区中的 6位 BCD 码合并为 3 位压缩 BCD 码,送入缓冲区或闹寄存区。该程序同时作为时间值检测程序。若键盘输入的小时值大于 23,分和秒值大于 59,则不合法,将取消本次设置,清零重新开始(键盘设置流程图如图十三所示)。4 键盘扫描程序模块 KEYSCAN:键盘扫描流
39、程图如图十四所示。5 显示程序模块 DISPLAY:显示流程图如图十五所示。键显示缓冲区中的 6 位 BCD 码用动态扫描方式显示。为此,必须首先将 3 字节缓冲区中的时、分、秒压缩 BCD 码拆分为 6 字节(百位、十位、分别占有 1 字节)BCD 码,这能由拆字子程序 SEPA 来实现。需要注意的是,当按下时间或闹钟设置键后,在 6 位设置完成之前,应显示键入的数据,而不显示当前时间。为此,通常设置了一个显示标志位 F0,在闹钟时间/设置期间 F0=1,不调用 SEPA,即调用 SEPA图十二刷新显示缓冲区的前提条件是 F0=0.图十三图十四6 定时比较程序模块 ALARM:定时比较流程图
40、如图十六所示。将当前时间(缓冲区的值)与预设的启闹时间(闹钟设置寄存区的值)比较,二者完全相同时,启动蜂鸣器鸣叫,并置位闹钟标志位。返回后,待重新按下#键停闹,并清零闹钟标志。7 拆字程序 SEPA 与合字程序 COMB:如前所述,拆字程序的功能是将 3B缓冲区中的时、分、秒压缩 BCD 码拆分为 6B(百位、十位、个位分别占有 2B)BCD 码并刷新显示缓冲区;合字程序的功能是将键盘设置缓冲区中的 6 位 BCD 码合并为 3 位压缩 BCD 码,送入17基于 AT89C51 的单片机课程设计 60S 倒与时钟缓冲区或闹寄存区,同时检测时间值的。图十五图十六4.3 程序编译:;*主程序 MA
41、IN*ORG AJMP ORG ANMP ORG PORT PORTA PORT PORT DISP0 DISP1 DISP2 DISP3 DISP4 DISP5HOUR0000H MAIN 000BH CLOCK 0030H EQU EQU EQU EQU EQU EQU EQU EQU EQU EQUEQU8000H8001H8002H8003H30H31H32H33H33H35H3CH;8155寄存器地址;8155A 口,6 个 LED 位选口;8155B 口,6 个 LED;8155C 口,键盘输;显示缓冲区;缓冲区18基于 AT89C51 的单片机课程设计 60S 倒与时钟MIN S
42、EC MSEC AHOUR AMIN ASEC F1MAIN:EQU EQU EQU EQU EQU EQU RIT MOV MOVX MOV MOVX CLR CLR MOV MOV MOV MOV MOV CLR MOV INC DJNZ MOV MOV MOV SETB SETB SETB ACALL ACALL CJNE CLR MOV ANMPCJNE3DH3EH3FH40H41H42H PSW.1 SP,#50HDPTR,#PORT A,#30H DPTR,AF1 F0AHOUR,#0FFH AMIN,#0FFH ASEC,#0FFH R7,#10H R0,#DISP0A R0,A
43、 R0R7,LOOP TMOD,#01H TL0,#0B0H TH0,3CH TR0EA ET0 ALARMKEYSCAN A,#0AH,NEXT1 TR0R1,#HOUR MODA,#0BH,BEGIN;闹钟寄存区;设置堆栈区;8155 初始化;清零闹钟标志位;显示;闹钟寄存器置初值;循环次数;显示缓冲区,缓冲区清零LOOP:;设置初值;定时器 0 初始化,定时时间 100ms;启动定时器;开中断;调用定时比较;调用键盘比较;调用“*”键否;是则暂时停止;地址指针指向BEGIN:缓冲区首地址NEXT1:;按“#”键否19基于 AT89C51 的单片机课程设计 60S 倒与时钟JB MOVSE
44、TBF1,NEXT2 R1,#AHOURF0;闹钟正在闹响否;地址指针指向闹寄存区首地址MOD:;置位时间设置/闹钟定时标志, 间;调用时间设置/闹钟定时程序;重新开始显示时ACALL SETBCLRMODIFY TR0F0;清零时间设置/闹钟定时标志,恢复显 示时间AJMP SETB CLRAJMPBEGIN P1.0 F1BEGINNEXT2:;闹钟正在闹响;清零闹钟标志;*时间设置/闹钟定时模块 MODIFY*MODIFY:ACALL ACALLRETKEYINCOMB;调用键盘设置子程序;调用合字子程序;*键盘设置子程序 KEYIN*KEYIN:PUSH PUSH SETB MOV M
45、OV CLR ACALL SETB CJNE JNC MOV INC DJNZ POP POP CLRRETPSW ACC RS1R0,#DISP0 R7,06H RS1 KEYSCAN RS1 A,#0AH,L2 L1R0,A R0 R7,L1 ACC PSWRS1;保护现场;R0 指向显示缓冲区首地址;设置键盘输入次数L1:;调用键盘扫描程序取按下键的键号;输入数检测(是否大于 9)L2:;大于 9,重新输入;键号送显示缓冲区;6 位时间输入完否?未完继续否则返回;恢复现场;*键盘扫描子程 KEYSCAN*20基于 AT89C51 的单片机课程设计 60S 倒与时钟KEYSCAN:ACAL
46、L JNZ ACALL ACALL AJMP ACALL ACALL ACALL JNZ ACALL ACALL AJMP MOV MOV MOV MOV MOVX NOV MOVX JB MOV AJMP JB MOV AJMP JB MOV AJMP INC MOV JNB RL MOV AJMPAJMPTEST REMOV DISPLAY ALARM KEYSCAN DISPLAY ALARM TEST LIST DISPLAY ALARM KEYSCAN R2,#0FEH R3,00HDPTR,#PORTA A,R2 DPTR,A DPTR,#PORTC A,DPTR ACC.0,LI
47、NE1 A,#00HTRYK ACC.1,LINE2 A,#04HTRYK ACC.2,NEXT A,08HTRYK R3 A,R2ACC.3,EXIT AR2,ALINE0 KEYSCAN;调判按键是否按下子程序 TEST;有键按下调延时消抖;无键按下继续判是否按键;调用显示子程序延时消抖REMOV:;再判是否有键按下;有键按下转逐列扫描;无键按下继续判是否按键;首行扫描字送 R2;首行键号送 R3;DPTR 指针指向 8155的A口 ;首行扫描字送 R2;首行扫描字送 8155的A口 ;DPTR 指针指向 8155的C口 ;读入 C 口的行状态;第 0 行键无键按下转下转第 1 行;第 0
48、 行有键按下,行首键号送 ALIST:LINE0:;号LINE1:;第 1 行键无键按下转第 2 行;第 1 行有键按下,行首键号送 A;号LINE2:;第 2 行健无键按下转第 3 行;第 2 行有键按下,行首键号送 A;号NEXT:;扫描下一列;列扫描字送 A;4 列扫描完,重新进行下一轮扫描;4 列未扫描完,扫描字左移扫描下一列;扫描字送 A;转向扫描下一列;等待下一次按键EXIT:21基于 AT89C51 的单片机课程设计 60S 倒与时钟TRYK:ADD PUSH ACALL JNZ POP RET MOV MOV MOVX MOV MOVX CPL ANLRETA,R3 ACC T
49、EST LETKACC;按公式计算键码,求得键号;键号入栈保护;等待入栈保护;按键未,继续等待LETK:;按键,键号出栈;键盘扫描结束,返回;DPTR 指针指向 8155的A口 TEST:DPTR,#PORTA A,#00H DPTR,A DPTR,#POPTC A,DPTRAA,#07H;全扫描字 00H 送 8155 的 A 口;DPTR 指针指向 8155的C口 ;读入 C 口行状态;A 取反,以高电平表示有键按下;高 5 位;*显示子程序 DISPLAY*DISPLAY:JB ACALL PUSH PUSH SETB MOV MOV MOVX MOV MOV MOV MOV MOV M
50、OV MOVC MOV MOVX MOV MOVMOVXF0,DISP SEPA PSWACC RS0DPTR,#PORTA A,#0FFH DPTR,A R0,#DISP0 R7,#00H R6,#06H R5,0FEH DPTR,#TAB A,R0 A,A+DPTR DPTR,#PORTB DPTR,A DPTR,#PORTA A,R5DPTR,A;时间显示标志 F0=0 转 DISP;否则调用 SEPA 刷新显示缓冲区;动态扫描显示子程序DISP:;关显示DISI:22基于 AT89C51 的单片机课程设计 60S 倒与时钟HERE:DJNZ INC MOV RL NOV DJNZ CLR POP POP RET DBDVR7,HERE R0A,R5 A R5,AR6,DISI RS0ACCPSWTAB:3FH,06H,5BH,4FH,66H,6DH,7DH,07H7FH,6FH,77H,7CH,39H,5EH,79H,71H;共阴极字形码表;*合字子程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 米南加保语日常会话试题及解析
- 妇产科医师围产期护理题目及详解
- 战略咨询师题目及答案
- 睡眠监测佩戴护理
- 胆囊炎手术护理专项考试试卷(含解析)
- 肾病综合征护理理论考核试题
- 肿瘤与血管介入治疗科第一季度护理业务考核试卷
- 化妆品生产公司管理制度(2026版)
- 2026年虚拟现实培训协议(企业)
- 工厂奖励协议书模板
- 2026初级会计师《经济法基础》考前十页纸
- 2026年及未来5年市场数据中国戒烟产品行业市场深度研究及投资战略规划报告
- 2025-2030智能办公家具行业市场供需预测及投资策略规划研究报告
- 设计保密保证措施
- 2026年西师大版三年级数学下册 3.3 一位小数的加减法(课件)
- 2025年甘肃钢铁职业技术学院辅导员考试真题
- 基于生态法治情境的思维建构与价值引领-中考道德与法治二轮专题复习:生态文明
- 食品厂员工培训管理制度
- 屋顶光伏施工技术规范
- 宁德时代Ener D 液冷集装箱(20 尺)产品规格书
- 第节深圳市中考英语听说考试概述
评论
0/150
提交评论