日历时钟单片机课程设计(附汇编程序+方案图+模块图+ddb模拟图)

合集下载

基于单片机的万年历课程设计

基于单片机的万年历课程设计

一、前言随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

由其是单片机技术的应用产品已经走进了千家万户。

电子万年历的出现给人们的生活带来的诸多方便。

本设计是基于51系列的单片机进行的电子万年历设计,采用八位数码管显示年月日时分秒及温度信息,具有可调整日期和时间功能。

时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。

日历能显示阳历和阴历年、月、日以及星期、时、分、秒。

设计以STC89C52RC 单片机为核心,构成单片机控制电路;以DS1302时钟芯片作为万年历信号发生器;以DS18B20作为检测温度的传感器。

关键词时钟电钟;DS1302;DS18B20;数码管;单片机。

二、系统概述及总体方案2.1系统概述本电子万年历采用单片机控制技术和数码管显示方案,可以很好的完成万年历和实时温度显示。

它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

2.2总体方案2.2.1单片机芯片:采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超低压工作;同时也与MCS-51系列单片机完全相同,该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。

所以选择采用AT89S52作为主控制系统.2.2.2 时钟芯片:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.且同组同学已从Maxim申请到了这种芯片,所以本设计采用了这种芯片。

自己制作的单片机万年历程序+原理图

自己制作的单片机万年历程序+原理图

自己制作的单片机万年历程序+原理图单片机万年历仿真原理图如下仿真Altium Designer画的万年历原理图和PCB图如下:PCB原理图基于51单片机,可以完成时钟显示、公历显示、农历显示、温度显示、闹钟报警定时的LCD时钟PPT内容预览:本设计使用AT89C51来做主控芯片,其强大的功能足够实现我们设计的所有功能。

使用LCD1602的液晶显示器来进行显示。

使用Keil uVision5进行编程。

通过Proteus8.6来进行仿真。

点击一次K1进入时钟设置页面,通过点击K2切换时、秒、分、星期、年、月、日,通过K3与K4实现加减来完成时钟的设置点击两次K1进入闹钟设置页面,通过点击K2切换开关、时、秒、分,通过K3与K4实现加减完成闹钟的设置。

单片机源程序如下注释是很全的#include //调用单片机头文件#define uchar unsigned char //无符号字符型宏定义变量范围0~255#define uint unsigned int //无符号整型宏定义变量范围0~65535#include "eeprom52.h"#include "nongli.h"#include "intrins.h"bit flag_200ms ;bit flag_100ms ;sbit beep = P3^7; //蜂鸣器定义bit flag_beep_en;uint clock_value; //用作闹钟用的sbit dq = P3^1; //18b20 IO口的定义uint temperature ; //温度变量uchar flag_nl; //农历阳历显示标志位uchar menu_1,menu_2;uchar key_time,flag_value; //用做连加的中间变量bit key_500ms ;uchar n_nian,n_yue,n_ri; //农历显示的函数#include "ds1302.h"#include "lcd1602.h"/******************把数据保存到单片机内部eeprom中******************/void write_eeprom(){SectorErase(0x2000);byte_write(0x2000, fen1);byte_write(0x2001, shi1);byte_write(0x2002, open1);byte_write(0x2058, a_a);}/******************把数据从单片机内部eeprom中读出来*****************/void read_eeprom(){fen1 = byte_read(0x2000);shi1 = byte_read(0x2001);open1 = byte_read(0x2002);a_a = byte_read(0x2058);}/**************开机自检eeprom初始化*****************/void init_eeprom(){read_eeprom(); //先读if(a_a != 1) //新的单片机初始单片机内问eeprom{fen1 = 3;shi1 = 8;a_a = 1;write_eeprom(); //保存数据}}/***********************18b20初始化函数*****************************/void init_18b20(){bit q;dq = 1; //把总线拿高delay_uint(1); //15usdq = 0; //给复位脉冲delay_uint(80); //750usdq = 1; //把总线拿高等待delay_uint(10); //110usq = dq; //读取18b20初始化信号delay_uint(20); //200usdq = 1; //把总线拿高释放总线}/*************写18b20内的数据***************/void write_18b20(uchar dat){uchar i;for(i=0;i<8;i++){ //写数据是低位开始dq = 0; //把总线拿低写时间隙开始dq = dat & 0x01; //向18b20总线写数据了delay_uint(5); // 60usdq = 1; //释放总线}}/*************读取18b20内的数据***************/uchar read_18b20(){uchar i,value;for(i=0;i<8;i++){dq = 0; //把总线拿低读时间隙开始value >>= 1; //读数据是低位开始dq = 1; //释放总线if(dq == 1) //开始读写数据value |= 0x80;delay_uint(5); //60us 读一个时间隙最少要保持60us 的时间}return value; //返回数据}/*************读取温度的值读出来的是小数***************/uint read_temp(){uint value;uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0x44); //启动一次温度转换命令delay_uint(50); //500usinit_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0xbe); //发出读取暂存器命令EA = 0;low = read_18b20(); //读温度低字节value = read_18b20(); //读温度高字节EA = 1;value <<= 8; //把温度的高位左移8位value |= low; //把读出的温度低位放到value的低八位中value *= 0.625; //转换到温度值小数return value; //返回读出的温度带小数}/******************1ms 延时函数*******************/void delay_1ms(uint q){uint i,j;for(i=0;i<>< p=""><>for(j=0;j<120;j++);}/******************写星期函数*******************/void write_week(uchar hang,uchar add,uchar week)//写星期函数{if(hang==1)write_com(0x80+add);elsewrite_com(0x80+0x40+add);。

单片机课程设计(论文)电子万年历的设计

单片机课程设计(论文)电子万年历的设计

目录1设计要求 (2)2方案论证与对比 (2)液晶显示器控制方式选择 (2)2.2并行接口动态显示电路选择 (2)2.3LCD液晶显示器的接口方法选择 (3)液晶显示器限流电阻选择 (4)3系统硬件电路的设计 (5)主控模块AT89C52 (5)3.2显示模块电路设计 (6)4系统软件设计 (7)4.1系统软件概述 (7)4.2主要子程序设计 (8)4.2.1 时钟中断服务子程序设计 (8)时间调整子程序设计 (9)4.2.3 判断闰年子程序设计 (9)4.2.4 精度分析分析与计算 (10)4.2.5 第一次初值的设置 (10)4.2.6 重载初值的方法 (10)5系统仿真与测试 (11)5.1系统仿真 (11)功能测试 (11)6总结 (12)参考文献 (13)1设计要求本课题以AT89C52单片机为核心,设计并制作出智能LCD电子钟,具有以下基本功能:能进行时间、年份、日期、星期显示;能区分是否闰年;能检测室温并显示。

扩展功能部分可以通过控制按键使时间暂停、可以调整校正时间并通过按键切换轮流显示时间、年份、日期、星期。

2方案论证与对比2.1液晶显示器控制方式选择采用LCD液晶显示,具有超精致影像画质、十足平面显示、节省空间、节省能源等优点,但按控制方式不同,LCD可分为被动矩阵式LCD及主动矩阵式LCD两种。

可根据不同需要采用不同的方式。

方案一被动矩阵式LCD被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。

由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但成本低廉。

方案二主动矩阵式LCD目前应用比较广泛的主动矩阵式LCD,也称TFT-LCD(Thin Film Transistor-LCD,薄膜晶体管LCD)。

TFT液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。

与CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。

万年历单片机课程设计报告

万年历单片机课程设计报告

1 任务和设计要求首先要学会安装软件, 要熟悉会使用。

2 系统设计系统框图3 硬件设计3.1 电路原理图3.2 主要单元电路3.3 元件清单4 软件设计4.1 程序流程图4.2程序清单TIME_WEEK DATA 52H TIME_YEAR DATA 5DH TIME_MONTH DATA 5EH TIME_DATA DATA 5FH YEARH DATA 36HYEAR DATA 35H MONTH DATA 34HDAY DATA 33HHOUR DATA 32H MINUTE DATA 31HSEC DATA 30HAAA BIT P3.0BBB BIT P3.1AA BIT P3.3BB BIT P3.4CC BIT P3.5BL BIT P3.2BZ1 BIT 21H.0 TIMES DATA 20H COM DATA P1 ORG 0000HLJMP START ORG 0003H RETIORG 000BH LJMP INTT0ORG 0013H RETIORG 001BH RETIORG 0023H RETISTART:MOV R0,#30H MOV R7,#9 CLEETE:MOV @R0,#00H INC R0DJNZ R7,CLEETE MOV TIMES,#00H MOV TMOD,#01H MOV TL0,#0C0H MOV TH0,#63H MOV SEC,#0MOV MINUTE,#0H MOV HOUR,#0H MOV DAY,#01H MOV MONTH,#01H MOV YEAR,#01H MOV YEARH,#20H SETB EASETB ET0SETB TR0MOV R4,#19 START1:CALL DISPJNB AA,SETMM1 JMP START1 SETMM1:CALL SETMMJMP START1 SETMM:CALL DISPCALL DISPJB AA,SETMM0 SETMM2:JNB AA,SETMM3CLR ET0CLR TR0MOV SEC,#0MOV TIMES,#01H MOV R0,#MINUTE SETMM4:NOPINC22:CALL OFFLCALL INC11CALL DISPJB AA,INC22CALL DISPJB AA,INC22INC R0MOV A,TIMESRL AMOV TIMES,AJNB TIMES.5, SETMM4 SETMM12:JNB AA , SETMM11 SETMM0:SETB TR0SETB ET0RETSETMM11:CALL DISPJMP SETMM12 SETMM3:CALL DISPJMP SETMM2INC11:MOV R3,#40INC111:MOV A,@R0JB BB,INC17ADD A,#1DA ACALL INC000INC13:JNB BB , INC14INC17:MOV @R0,A CALL DISP DJNZ R3,INC111RETINC14:CALL DISP JMP INC13 OFFL:MOV 22H,@R0 MOV R6,#10 OFF1:MOV R7,#10OFF2:MOV @ R0, # 0AAH CALL DISPDJNZ R7 , OFF2DJNZ R6 , OFF1MOV @ R0 , 22H RETINC000:JB TIMES.0, INC001 JB TIMES.1, INC002 JB TIMES.2, INC003 JB TIMES.3, INC004 JB TIMES.4, INC005 JMP INCOUTINC005:CJNE A, #99H, INCOUT MOV A,#00H JMP INCOUT INC004:CJNE A, # 13H, INCOUT MOV A,#01H JMP INCOUTINC003:CJNE A,# 32H ,INCOUT MOV A,#01H JMP INCOUT INC002:CJNE A,#24H,INCOUT MOV A,#00H JMP INCOUT INC001:CJNE A,# 60H , INCOUT MOV A,#00H INCOUT:RETINTT0:PUSH ACC PUSH PSWORL TL0,#0C0HMOV TH0,#63H DJNZ R4 , CLKE111 JMP LOOP11 CLKE111:JMP CLKELOOP11:MOV R4,#19H MOV A,SECADD A,#1DA AMOV SEC,A CJNE A, #60H , CLKE99 MOV SEC,#0 MOV A,MINUTE ADD A,#1DA AMOV MINUTE,A CLK0:CJNE A, # 60H, CLKE MOV MINUTE,#0 MOV A,HOURADD A,#1DA AMOV HOUR,ACJNE A, # 24H, CLKE MOV HOUR,#0 MOV A,DAYADD A,#1DA AMOV DAY,A MOV A,MONTH INC AMOVC A, @A + PC SJMP CLK1DB 31H,28H,31H DB 30H,31H,30H DB 31H,31H,30H DB 00H,00H,00H DB 00H,00H,00H DB 31H,30H,31H CLK1:CLR CSUBB A,DAYJNC CLKEMOV A,MONTH CJNE A,#2,CLK3MOV A,YEAR ANL A,#13HJNB ACC.4,CLK2ADD A,#2CLK2:ANL A,#3JNZ CLK3MOV A,DAY XRL A,#29HJZ CLKECLK3:MOV DAY,#1 MOV A,MONTH ADD A,#1DA AMOV MONTH,A CJNE A,#13H,CLKE MOV MONTH,#1 MOV A,YEAR ADD A,#1DA AMOV YEAR,A CLKE99:CALL CONVERT CLKE:POP PSW POP ACC RETIDISP:PUSH PSW PUSH ACC MOV 23H,R0 DISP99:MOV R1,#40H MOV R0,#30H MOV R2,#9 DISP1:MOV A,@R0ANL A,#0FHMOV @R1,AMOV A,@R0SWAP AANL A,#0FHINC R1MOV @R1,ADJNZ R2,DISP2 CALL DISPLAYMOV R0,23HPOP ACCPOP PSWRETDISP2:INC R1INC R0JMP DISP1 DISPLAY:MOV R1,#40HMOV R5,#19SETB AAAPLAY:SETB BBBNOPCLR BBBCLR AAAMOV A,@R1MOV DPTR,#TAB MOVC A,@A+DPTR MOV COM,ACALL DL1MSMOV COM,#0FFHDJNZ R5,PLAY1CLR BBBSETB AAARETPLAY1:INC R1JMP PLAYTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0A3H,8EH,0ABH DL1MS:MOV 25H,R7MOV 24H,R6MOV R7,#20DS1:MOV R6,#10DJNZ R6,$DJNZ R7,DS1MOV R7,25HMOV R6,24HRETSTART_YEAR EQU 01 CONVERT_YEAR DATA 5CH CONVERT_MONTH DATA 38H CONVERT_DATE DATA 37H TEMP_BYTE1 DATA 57H TEMP_BYTE2 DATA 58H TEMP_BYTE3 DATA 59H TEMP_BYTE4 DATA 5AH TEMP_BYTE5 DATA 5BH CONVERT:MOV A, YEARMOV TIME_YEAR,AMOV A,MONTHMOV TIME_MONTH,AMOV A,DAYMOV TIME_DATA,AMOV A,TIME_YEARMOV B,#16DIV ABMOV CONVERT_YEAR,B MOV B,#10MUL ABADD A,CONVERT_YEARMOV CONVERT_YEAR,AMOV A,TIME_MONTHJNB ACC.4,CON_02CLR ACC.4ADD A,#10CON_02:MOV CONVERT_MONTH,A MOV A,TIME_DATAMOV B,#16DIV ABMOV CONVERT_DATE,BMOV B,#10MUL ABADD A,CONVERT_DATEMOV CONVERT_DATE,AMOV DPTR,#MONTH_DATAMOV A,CONVERT_YEARCON_06:CLR CSUBB A,#START_YEARMOV B,#3MUL ABADD A,DPLMOV DPL,AMOV A,BADDC A,DPHMOV DPH,AMOV A, #2MOVC A, @A+DPTRCLR ACC.7MOV B, #32DIV ABMOV TEMP_BYTE1,AMOV TEMP_BYTE2,BMOV TEMP_BYTE3,#0MOV A,CONVERT_MONTH CJNE A,#10,CON_08CON_08:JC CON_09MOV TEMP_BYTE3,#1CON_09:MOV A,CONVERT_YEAR ANL A,#03HJNZ CON_10MOV A,CONVERT_MONTH LCALL GET_RUN_DAYS_LOW SJMP CON_12CON_10:MOV A,CONVERT_MONTH LCALL GET_DAYS_LOWCON_12:MOV B,CONVERT_DATE DEC BADD A,BMOV TEMP_BYTE4,AJNC CON_14INC TEMP_BYTE3CON_14:MOV A,TEMP_BYTE1 LCALL GET_DAYS_LOWDEC AADD A,TEMP_BYTE2MOV TEMP_BYTE5,AMOV A,CONVERT_MONTHCJNE A,TEMP_BYTE1,CON_20 MOV A,CONVERT_DATECJNE A,TEMP_BYTE2,CON_20 CON_20:JC CON_22LJMP CON_60CON_22:MOV A,CONVERT_YEAR JNZ CON_24MOV A,#100CON_24:DEC AMOV CONVERT_YEAR,A MOV A,DPLCLR CSUBB A,#3MOV DPL,AJNC CON_26DEC DPHCON_26:MOV A,TEMP_BYTE5 CLR CSUBB A,TEMP_BYTE4MOV TEMP_BYTE3,AMOV CONVERT_MONTH,#12 CLR F0CLR AMOVC A,@A+DPTRANL A,#0F0HSWAP A;MOV TEMP_BYTE4,AJZ CON_30MOV A, #2MOVC A , @A+DPTRMOV C, ACC.7MOV A, #1MOVC A, @A+DPTRRLC ASJMP CON_34CON_30:MOV A, #1MOVC A, @A+DPTRCON_34:MOV TEMP_BYTE5, A CON_40:MOV A, TEMP_BYTE5 RRC AMOV TEMP_BYTE5, AJC CON_42MOV B, #29SJMP CON_44CON_42:MOV B, #30CON_44:MOV A, TEMP_BYTE3 CLR CSUBB A, BJZ CON_46JNC CON_50CPL AINC ACON_46: INC AMOV B, #10DIV ABSWAP AORL A, BMOV CONVERT_DATE, A MOV A, CONVERT_MONTH MOV B, #10DIV ABSWAP AORL A, BMOV CONVERT_MONTH, A MOV A, CONVERT_YEAR MOV B, #10DIV ABSWAP AORL A, BMOV CONVERT_YEAR, A CALL WEEKRETCON_50:MOV TEMP_BYTE3, A JB F0, CON_52DEC CONVERT_MONTHCON_52:MOV A, CONVERT_MONTH CJNE A, TEMP_BYTE4, CON_54CPL F0CON_54:SJMP CON_40CON_60:MOV A, TEMP_BYTE4CLR CSUBB A, TEMP_BYTE5MOV TEMP_BYTE4, AJNC CON_62DEC TEMP_BYTE3CON_62:MOV CONVERT_MONTH, #1 CLR AMOVC A, @A+DPTRMOV TEMP_BYTE5, AANL A, #0F0HSWAP AXCH A, TEMP_BYTE5CLR F0ANL A, #0FHMOV TEMP_BYTE1, AMOV A, #1MOVC A, @A+DPTRMOV TEMP_BYTE2, AANL A, #0F0HORL A, TEMP_BYTE1SWAP AMOV TEMP_BYTE1, AMOV A, #2MOVC A, @A+DPTRMOV C, ACC.7MOV A, TEMP_BYTE2ANL A, # 0FHSWAP AMOV ACC.3, CMOV TEMP_BYTE2, ACON_70:MOV A, TEMP_BYTE2 RLC AMOV TEMP_BYTE2, AMOV A, TEMP_BYTE1RLC AMOV TEMP_BYTE1, AJC CON_72MOV B, #29SJMP CON_74CON_72:MOV B, #30CON_74:MOV A, TEMP_BYTE4CLR CSUBB A,BJNC CON_78MOV B, AMOV A, TEMP_BYTE3JZ CON_76DEC TEMP_BYTE3MOV TEMP_BYTE4, BSJMP CON_80CON_76:MOV A, TEMP_BYTE4 LJMP CON_46CON_78:MOV TEMP_BYTE4, ACON_80:MOV A, CONVERT_MONTH CJNE A, TEMP_BYTE5, CON_82 CPL F0JNB F0, CON_82SJMP CON_70CON_82:INC CONVERT_MONTH SJMP CON_70GET_DAYS_LOW:MOVC A, @A+PCRETDB 0,31,59,90,120,151,181,212,243,17,48,78 GET_RUN_DAYS_LOW:MOVC A, @A+PCRETDB 0,31,60,91,121,152,182,213,244,18,49,79 MONTH_DATA:DB 04DH,04AH,0B8H;2001DB 00DH,04AH,04CH;2002DB 00DH,0A5H,041H;2003DB 025H,0AAH,0B6H;2004DB 005H,06AH,049H;2005DB 07AH,0ADH,0BDH;2006DB 002H,05DH,052H;2007DB 009H,02DH,047H;2008DB 05CH,095H,0BAH;2009DB 00AH,095H,04EH;2010DB 00BH,04AH,043H;2011DB 04BH,055H,037H;2012 DB 00AH,0D5H,04AH;2013 DB 095H,05AH,0BFH;2014 DB 004H,0BAH,053H;2015 DB 00AH,05BH,048H;2016 DB 065H,02BH,0BCH;2017 DB 005H,02BH,050H;2018 DB 00AH,093H,045H;2019 DB 047H,04AH,0B9H;2020 DB 006H,0AAH,04CH;2021 DB 00AH,0D5H,041H;2022 DB 024H,0DAH,0B6H;2023 DB 004H,0B6H,04AH;2024 DB 069H,057H,03DH;2025 DB 00AH,04EH,051H;2026 DB 00DH,026H,046H;2027 DB 05EH,093H,03AH;2028 DB 00DH,053H,04DH;2029 DB 005H,0AAH,043H;2030 DB 036H,0B5H,037H;2031 DB 009H,06DH,04BH;2032 DB 0B4H,0AEH,0BFH;2033DB 004H,0ADH,053H;2034 DB 00AH,04DH,048H;2035 DB 06DH,025H,0BCH;2036 DB 00DH,025H,04FH;2037 DB 00DH,052H,044H;2038 DB 05DH,0AAH,038H;2039 DB 00BH,05AH,04CH;2040 DB 005H,06DH,041H;2041 DB 024H,0ADH,0B6H;2042 DB 004H,09BH,04AH;2043 DB 07AH,04BH,0BEH;2044 DB 00AH,04BH,051H;2045 DB 00AH,0A5H,046H;2046 DB 05BH,052H,0BAH;2047 DB 006H,0D2H,04EH;2048 DB 00AH,0DAH,042H;2049 DB 035H,05BH,037H;2050 DB 009H,037H,04BH;2051 DB 084H,097H,0C1H;2052 DB 004H,097H,053H;2053 DB 006H,04BH,048H;2054 DB 066H,0A5H,03CH;2055DB 00EH,0A5H,04FH;2056 DB 006H,0B2H,044H;2057 DB 04AH,0B6H,038H;2058 DB 00AH,0AEH,04CH;2059 DB 009H,02EH,042H;2060 DB 03CH,097H,035H;2061 DB 00CH,096H,049H;2062 DB 07DH,04AH,0BDH;2063 DB 00DH,04AH,051H;2064 DB 00DH,0A5H,045H;2065 DB 055H,0AAH,0BAH;2066 DB 005H,06AH,04EH;2067 DB 00AH,06DH,043H;2068 DB 045H,02EH,0B7H;2069 DB 005H ,02DH, 04BH; 2070 DB 08AH, 095H, 0BFH; 2071 DB 00AH, 095H, 053H; 2072 DB 00BH, 04AH, 047H; 2073 DB 06BH, 055H, 03BH; 2074 DB 00AH, 0D5H, 04FH; 2075 DB 005H, 05AH, 045H; 2076 DB 04AH, 05DH, 038H; 2077DB 00AH, 05BH, 04CH; 2078 DB 005H, 02BH, 042H; 2079 DB 03AH, 093H, 0B6H; 2080 DB 006H, 093H, 049H; 2081 DB 077H, 029H, 0BDH; 2082 DB 006H, 0AAH, 051H; 2083 DB 00AH, 0D5H, 046H; 2084 DB 054H, 0DAH, 0BAH; 2085 DB 004H, 0B6H, 04EH; 2086 DB 00AH, 057H, 043H; 2087 DB 045H, 027H, 038H; 2088 DB 00DH, 026H, 04AH; 2089 DB 08EH, 093H, 03EH; 2090 DB 00DH, 052H, 052H; 2091 DB 00DH, 0AAH, 047H; 2092 DB 066H, 0B5H, 03BH; 2093 DB 005H, 06DH, 04FH; 2094 DB 004H, 0AEH, 045H; 2095 DB 04AH, 04EH, 0B9H; 2096 DB 00AH, 04DH, 04CH; 2097 DB 00DH, 015H, 041H; 2098 DB 02DH, 092H, 0B5H; 2090DB 00DH, 053H, 049H; 2100 TIME_WEEK1 DATA 52H WEEK:MOV A, TIME_YEARMOV B, #16DIV ABMOV TEMP_BYTE1, BMOV B, #10MUL ABADD A, TEMP_BYTE1MOV TEMP_BYTE1, AMOV A, TIME_MONTHJB ACC.7, GETW02MOV A, #100ADD A, TEMP_BYTE1MOV TEMP_BYTE1, AMOV A, TIME_MONTHCLR ACC.7GETW02: JNB ACC.4, GETW04 ADD A , #10CLR ACC.4GETW04: MOV TEMP_BYTE2,AMOV A, TIME_DATAMOV B, #16DIV ABMOV TEMP_BYTE3, BMOV B, #10MUL ABADD A, TEMP_BYTE3MOV TEMP_BYTE3, AMOV A ,TEMP_BYTE1ANL A, #03HJNZ GETW10MOV A, TEMP_BYTE2CJNE A, #3,GETW06GETW06: JNC GETW10DEC TEMP_BYTE3GETW10: MOV A,TEMP_BYTE2 LCALL GET_CORRECTADD A, TEMP_BYTE1MOV B, #7DIV ABMOV A, TEMP_BYTE1ANL A, #0FCHRR ARR AADD A, BADD A, TEMP_BYTE3 MOV B, #7DIV ABMOV A, BCJNE A, #0,OUTOUT MOV B, #8 OUTOUT:MOV TIME_WEEK, B RETGET_CORRECT: MOVC A, @A+PC RETDB 0,3,3,6,1,4,6,2,5,0,3,5 END5 系统仿真及调试6 仿真结果及分析上图为运行时的显示, 左边两个数码管显示器显示的是年、月、日, 中间的显示的是时、分、秒, 右边显示的是农历日期以及星期。

51单片机电子万年历设计电路图及程序

51单片机电子万年历设计电路图及程序

51单片机电子万年历设计电路图及程序(总37页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March摘要:电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。

它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。

在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。

在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。

在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。

万年历的设计过程在硬件与软件方面进行同步设计。

硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。

在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。

显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。

7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。

为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。

74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。

软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。

程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。

单片机课程设计(可调式中文电子日历)

单片机课程设计(可调式中文电子日历)

摘要万年历的功能可实现年、月、日、时、分、秒和星期的显示。

随着社会的发展日历的功能越来越强大,精确度越来越高。

本次设计的日历采用DS1302时钟芯片,该芯片精确度高,性能可靠。

用LCD12864液晶屏,既可以显示数字又可以显示汉字,方便了人们的生活。

本设计总体分为硬件部分和软件部分。

硬件部分可分为:时钟芯片DS1302、AT89C51和LCD12864等。

本设计非常适合家庭使用。

电源采用+5V电压供电。

走时精确,是现代家庭必备的设备之一。

关键词:单片机,万年历, DS1302,时钟芯片1引言可调式电子日历与时钟小巧便于携带,界面清爽,一目了然,方便的知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品。

在现今的可调式电子日历与时钟具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。

2.总体设计2.1基本原理硬件主要涉及到:AT89C51、DS1302、LCD12864等。

软件通过框图编写出程序。

AT89C51主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理。

LCD12864主要的功能是实现年、月、日、时、分、秒的显示效果。

实时时钟DS1302可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

2.2系统总体框图及设计思路3.详细设计3.1 硬件设计3.1.1 DS1302芯片及原理介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

基于51单片机的万年历设计

基于51单片机的万年历设计

单片机课程设计题目基于51 单片机的万年历设计学生姓名专业班级学号院(系)指导教师完成时间目录1课程设计的目的1..2课程设计的任务与要求....................... 1.2.1设计任务1..2.2设计要求.............................................. 1. .3单片机发展概况1..4设计原理与功能说明4..4.1设计思想4..4.2总体电路图5..4.3时钟模块5..4.4液晶显示模块6..4.5按键模块7..5系统测试7...5.1硬件测试.............................................. 7. .5.2软件测试8..6总结8...参考文献.............................................. 1.0 .附录一:总体电路原理图....................... 1.1附录二:主程序.............................................. 1.. 2附录三:元器件清单........................... 2.7附录四:实物图 (2)..81课程设计的目的1.通过制作万年历,可以对单片机这门课程更好的认识。

2.理论与实践结合,提高自己的动手能力。

3.学会与合作者更好的交流学习,共同进步和提高。

4.能够增长查阅资料的能力,视野更加开阔。

5.拓展其他学科的联系,全面发展。

6.培养自我发现问题,解决问题的能力。

2课程设计的任务与要求2.1设计任务1.可以去学校图书馆或者网上,搜集整理相关的资料,做好前期理论准备,为以后设计电路,看懂电路图做理论支持。

2.构想万年历电路图,并且具有可行性,画出电路图。

3.列举电路所需的电子元件,仔细对比所需的元件的参数,通过去电子元件经销商或者网购购买。

2.2设计要求1.显示年、月、日、时、分、秒。

单片机课程设计报告(万年历)

单片机课程设计报告(万年历)

目录一、摘要 (2)二、设计任务 (4)三、总体方案设计与论证 (4)1、液晶显示模块 (4)2、实时时间计算模块 (5)3、实时环境温度采集模块 (5)4、报警模块 (6)5、设置模块 (6)四、总体方案组成框图 (7)五、系统硬件设计 (8)1、LCD显示模块 (8)2、实时时间计算模块 (12)3、实时环境温度检测模块 (16)4、报警模块 (21)5、设置模块 (22)六、系统软件设计 (23)七、系统硬件电路设计 (24)八、系统硬件PROTEUS仿真原理图 (25)九、系统硬件仿真运行情况图 (26)1、显示欢迎界面 (26)2、显示实时时间 (26)3、显示当前温度 (27)4、时间设置 (27)5、最高报警温度设置 (28)6、闹钟时间设置 (28)7、超温 (29)8、闹钟时间到 (29)附录一:实物图 (30)附录二:PCB图 (32)附录三:源程序代码 (33)附录四:参考文献 (62)摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。

本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒;实时监测环境温度(可根据需要启动高温报警功能);电子闹钟。

M bn本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。

计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。

温度检测采用DALLAS公司的数字化温度传感器,该芯片采用的是独特的“一线总线”的方式与单片机进行通信,一线总线独特而且经济的特点,是用户可以轻松的组建传感器网络,为测量系统的构建引入全新的概念。

基于51单片机的12864液晶显示的万年历

基于51单片机的12864液晶显示的万年历

附录程序
/*****************说明*********************************** 基于 51 单片机的 12864 液晶显示的万年历
版权所有,如需转载请通知本人,不得用于商业用途 ,仅限学习交流之用
*****************************************************************/
3
图-1 主控制系统
2.3.2 时钟电路模块的设计 DS1302 是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、
时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进 行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一 个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容, 但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
//延时 1MS/次
unsigned char
{
sec,min,hour,day,month,year,cen,week,
unsigned char i;
next,aa,bb,cc,dd,mm,temp0,LunarMonth,
while(--a)
LunarDay,LunarYear;
{
int temp;
9三三系统的软件设计系统的软件设计3131程序流程框图程序流程框图图图aa主程序流程图主程序流程图10图b计算阳历程序流程图计算阳历程序流程图1112图图cc时间调整程序流程图时间调整程序流程图yynnyynnyy图图dd设置温度报警闹钟的数据保存到设置温度报警闹钟的数据保存到at24c02at24c02中中是否进入温度报警上下限温度设置设置是否进入设置闹钟时间设置报警温度上下限开始设置闹钟的时间开始报警闹钟的开关是否开起at24c02存设置的功能保蜂鸣器开启闹钟报警功能开启结束设置13五五作品功能实现作品功能实现通过硬件的焊接与程序的编写本电子万年历终于完成了实现的功能如下

单片机电子万年历(含程序)

单片机电子万年历(含程序)

CHANGZHOU INSTITUTE OF TECHNOLOGY科研实践项目名称:电子万年历设计二级学院:电子信息与电气工程学院专业:电气工程及其自动化班级: 10 电二学生姓名:祝学东学号: 10020442 指导教师:庄志红职称:副教授起止时间: 2013年12月9日—2013年12月20日摘要本设计是电子万年历。

具备三个功能:能显示:年、月、日、时、分、秒、星期,并具有可调整日期和时间功能。

该电子万年历使用12MHZ晶振与单片机AT89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。

同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。

若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。

若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

关键词:单片机数字显示动态扫描时间日期可调目录第一章设计论证及要求 (1)1.1设计应用意义 (1)1.2设计方案论证 (1)1.2.1 单片机芯片选择 (1)1.2.2显示模块选择 (1)1.2.3时钟芯片选择 (2)1.3设计流程 (2)第二章系统硬件电路设计 (3)2.1 CPU时钟 (3)2.2 主控芯片AT89C52模块 (3)2.3 显示控制电路的设计及原理 (4)2.4 按键电路设计 (6)第三章系统软件设计 (7)3.1 软件主流程 (7)3.2初始化程序及宏定义 (9)3.3主程序 (10)3.4显示子程序 (12)3.5 按键子程序 (15)3.6 延时子程序 (16)第四章系统调试与分析 (17)第五章设计总结 (20)第六章参考文献 (21)附一元件清单 (22)附二仿真原理图 (23)附三程序清单 (24)附四实物图 (35)第一章设计论证及要求1.1设计应用意义二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。

单片机课程设计万年历显示设计

单片机课程设计万年历显示设计

单片机课程设计报告题目: 基于单片机的LCM1602液晶操纵——万年历显示设计所在系部:信息与电气工程所在专业:通信本所在班级: 1001 姓名:曹怀宝学号: 20203615276 指导教师:陈勇完成时刻: 2013年 7月 3日基于单片机的LCM1602液晶操纵——万年历显示设计1.设计目的该设计是基于AT89C52单片机的电子万年历系统,采纳LCD1602液晶屏实现显示。

显示年月日礼拜温度等,双行显示,。

显示年、月、日、礼拜、时刻,可设置,设置功能。

综上所述此时钟具有读取方便、显示直观、功能多样、电路简练、等优势,符合电子仪器仪表的进展趋势,具有广漠的市场前景。

2.设计原理及相关说明设计原理:利用DS1302读取系统中的日期和时刻信息,并别离利用P端口和P 端口将相关信息传送至STC12C5A60S2主芯片当中,利用P0端口使之显示于LCD1602液晶显示屏上,四个按键别离置于P1口的五、六、7端口能够对时刻进行操纵修改。

详细请参阅第三节的芯片介绍。

日历时钟系统设计框图如图1所示:图1 电子万年历系统设计框图3 各芯片的设计及其挪用3.1 STC12C5A60S2单片机主控模块STC12C5A60S2简介STC12C5A60S2是STC生产的单时钟/机械周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换1、增强型8051CPU,1T(1024G),单时钟机械周期2、工作电压5.5-3.5V3、1280字节RAM4、通用I/O口,复位后为:准双向口/弱上拉可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每一个I/O口驱动能力都可达到20mA,但整个芯片最大不要超过120mA5、有EEPROM功能六、看门狗7、内部集成MAX810专用复位电路八、外部掉电检测电路九、时钟源:外部高精度晶体/时钟,内部R/C振荡器常温下内部R/C单片机为:11~17MHz 3.3V单片机为:8~12MHz 针对电机操纵,强干扰场合。

单片机万年历课程设计

单片机万年历课程设计

单片机万年历课程设计河南工程学院实习报告专业:班级:姓名:学号:2011年11月日实习(训)报告评语等级:评阅人: 职称:年月日河南工程学院实习(训)报告实习目的(内容):实习时间: 自 11 月 21 日至 12 月 2 日共天。

实习地点: 实习单位:指导教师: 系主任:一、设计任务与要求:利用ATC89C1单片机设计一个具有如下功能的电子万年历:1、能够显示年、月、日、时、分、秒、星期。

2、可更改年、月、日、时、分、秒、星期。

3、更改时间及日期时蜂鸣器鸣声提示。

二、方案设计与论证按照系统设计的要求和功能,将系统分为主控模块、时钟电路模块、按键扫描模块、LCD显示模块、蜂鸣器电路、电源电路、复位电路、晶振电路几个模块,系统框图如图1所示。

主控模块采用ATC89C51单片机,按键模块用3个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302实时时钟实现对时间,日期的操作。

图1 基于AT89C51单片机的电子万年历系统框图三、硬件单元电路设计与参数计算1、主控模块选用AT89C51单片机作为中央处理器,如图2所示。

AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。

图2 AT89C51主控模块2、时钟振荡电路时钟振荡电路图3所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。

日历时钟单片机课程设计(附汇编程序+方案图+模块图+ddb模拟图)

日历时钟单片机课程设计(附汇编程序+方案图+模块图+ddb模拟图)

;山东科技大学信电通信07-1 lfj 作品方案一:方案二:采用方案二。

模块图; ------------------------- 按键说明-------------------------;--------------------------1键——进入可调状态-------------------------; -------------------------2键——结束返回-------------------------; -------------------------3键——秒加1/日加1 -------------------------; -------------------------4键——分加1/月加1 -------------------------; -------------------------5键——显示24小时制/时加1/年加-------------; -------------------------6键——显示12小时制-------------------------; -------------------------7键——可调时间-------------------------; -------------------------8键——可调日期-------------------------CLK BIT ;时钟信号端DISP BIT ;串出锁存端DBUF EQU 30H ;秒的最低位地址LED BITCHANGE2 BIT 21H ;加12的标志位AD1 EQU 40H ;秒AD2 EQU 41H ;分AD3 EQU 42H ;时AD4 EQU 43H ;天AD5 EQU 44H ;月AD6 EQU 45H ;年; 初始化存储单元结束ORG 0000HLJMP MAINORG 000BH ;T0中断入口LJMP INTORG 0030HMAIN: MOV R0,#AD1MOV R7,#06HLOOP0: MOV A,#00HMOV @R0,AINC R0DJNZ R7,LOOP0 ;R0~R7清零MOV AD1,#37HMOV AD2,#22HMOV AD3,#0CHMOV AD4,#08HMOV AD5,#08HMOV AD6,#08H ;初始化时间为12:34:56,日期为08年08月08日MOV IE,#82H ;允许T0中断MOV TMOD,#01H ;T0允许工作MOV TH0,#4CHMOV TL0,#00H ;送入计数初值MOV R5,#00H;初始化结束SETB TR0 ;T0使能LOOP: LCALL TEST ;扫描键盘CJNE A,#0FEH,NEXTD ;0FEH为1键LCALL DY1MSLCALL KEYDONENEXTD: SJMP LOOP ;扫描键盘看是否需要调整日历DISPLAY: LCALL TEST ;扫描键盘CJNE A,#0DFH,ERSHISI1 ;0DFH为6键SETB ;显示十二小时LJMP TIMEZHUANERSHISI1:CJNE A,#0EFH,ERSHISI2 ;0EFH为5键CLR ;显示二十四小时CLR CHANGE2LJMP TIMEZHUANERSHISI2:CJNE A,#0CFH,CHANGE ;0CFH为5+6键CLRSETB CHANGE2 ;CHANGE2=1表示把十二表示法转换成二十四小时LJMP TIMEZHUANCHANGE: CLR CHANGE2TIMEZHUAN:LCALL TESTCJNE A,#7FH,NEXTL ;7FH为8键SETBLJMP ZHUAN1NEXTL: CJNE A,#0BFH,ZHUAN1 ;0BFH为7键CLRZHUAN1: JB ,DAY ;=0 调整时间,为1则调整日期MOV A,AD1 ;调整时间键码分离MOV B,#0AHDIV ABMOV R0,#DBUFMOV @R0,BINC R0MOV @R0,AMOV A,AD2MOV B,#0AHDIV ABINC R0MOV @R0,BINC R0MOV @R0,AJB ,TIMEZHUAN1LJMP TIMEZHUAN2TIMEZHUAN1: ;判断时间是否大于12 MOV A,AD3MOV B,#0CHSUBB A,BJC NORMALTMOV AD3,ALJMP NORMALTTIMEZHUAN2:JNB CHANGE2,NORMALT ;判断是否加12MOV A,AD3ADD A,#MOV AD3,ACLR CHANGE2NORMALT: MOV A,AD3MOV B,#0AHDIV ABINC R0MOV @R0,BINC R0MOV @R0,ASJMP DDISPDAY: ;调整日期键码分离 MOV A,AD4MOV B,#0AHDIV ABMOV R0,#DBUFMOV @R0,BINC R0MOV @R0,AMOV A,AD5DIV ABINC R0MOV @R0,BINC R0MOV @R0,AMOV A,AD6MOV B,#0AHDIV ABINC R0MOV @R0,BINC R0MOV @R0,ADDISP: ;显示,串入并处的方式,上升沿写入MOV R0,#DBUFMOV R7,#06HLOOP2:MOV R6,#08HMOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTR ;显示秒CLR CLOOP3:RRC ACLR CLKMOV DISP,CSETB CLKDJNZ R6,LOOP3INC R0DJNZ R7,LOOP2RETKEYDONE: ;人工手动调整日历AGAINB: LCALL DY250MS ;防抖250msCJNE A,#7FH,NEXTL1 ;7FH为8键SETBLJMP ZHUAN12NEXTL1:CJNE A,#0BFH,ZHUAN12CLR ;以上为扫描键盘并设置ZHUAN12:JB ,NEXT6B ;判断调整日期还是时间CJNE A,#0FDH,NEXTA ;0FDH为2键,如果按键值为FDH 则结束LJMP BACKNEXTA: CJNE A,#0FBH,NEXTB ;0FBH为3键INC AD1 ;秒加1MOV A,AD1CJNE A,#3CH,AGAINAMOV AD1,#00HSJMP AGAINANEXTB: CJNE A,#0F7H,NEXTC ;0F7H为4键INC AD2 ;分加1MOV A,AD2CJNE A,#3CH,AGAINAMOV AD2,#00HSJMP AGAINANEXTC: CJNE A,#0EFH,AGAINA ;0EFH为5键INC AD3 ;时加1MOV A,AD3CJNE A,#18H,AGAINAMOV AD3,#00HNEXTT: SJMP AGAINANEXT6B:CJNE A,#0FDH,NEXTAB;JIESHUJIAN ;0FDH为2键LJMP BACKNEXTAB: CJNE A,#0FBH,NEXTBB ;0FBH为3键INC AD4 ;日加1MOV A,AD4CJNE A,#20H,AGAINAMOV AD4,#01HSJMP AGAINANEXTBB: CJNE A,#0F7H,NEXTCB ;0F7H为4键INC AD5 ;月加1MOV A,AD5CJNE A,#0DH,AGAINAMOV AD5,#01HSJMP AGAINANEXTCB: CJNE A,#0EFH,AGAINA ;0EFH为5键INC AD6 ;年加1MOV A,AD6CJNE A,#64H,AGAINAMOV AD6,#00HAGAINA: LCALL DISPLAYLJMP AGAINBBACK: RETINT: INC R5CJNE R5,#20,NEXTS1 ;循环20次,每次循环为秒,共*20=1秒MOV R5,#00HLCALL DISPLAY ;满一秒后的显示LJMP MENDNEXTS1: LJMP NEXTS ;满一秒后的显示MEND: MOV A,AD1CJNE A,#0AH,LAREMENDSETB LED ;满十秒关灯,否则继续LAREMEND:INC AD1MOV A,AD1CJNE A,#3CH, NEXTS2LJMP MEND1NEXTS2: LJMP NEXTS ;以上为看是否修改秒,满60,分加一否则跳转继续MEND1: MOV AD1,#00HINC AD2MOV A,AD2CJNE A,#3CH,NEXTS3LJMP MEND2NEXTS3: LJMP NEXTS ;以上为看是否修改分,满60,时加一否则跳转继续MEND2: MOV AD2,#00HINC AD3MOV A,AD3CJNE A,#0Ah,ZAIJIANCHAAJMP BAOSHIZAIJIANCHA:CJNE A,#0Bh,ZHENGCHANGBAOSHI: CLR LED ;以上为两个报时开灯ZHENGCHANG:MOV A,AD3CJNE A,#18H,NEXTS4 ;不满二十四小时跳出LJMP MEND3 ;满二十四后跳到清零小时继续加天NEXTS4: LJMP NEXTSMEND3: MOV AD3,#00HINC AD4MOV A,AD5CJNE A,#02H,JIXUTIAN ;判断是否为二月份MOV A,AD6MOV B,#4HDIV ABMOV A,BJZ RUNNIAN ;判断是否为闰年PINGNIAN:MOV A,AD4 ;平年CJNE A,#1DH,NEXTSMOV AD4,#01HAJMP JIXUYUERUNNIAN: MOV A,AD4 ; 闰年CJNE A,#1EH,NEXTSMOV AD4,#01HAJMP JIXUYUEJIXUTIAN: ; 不为二月,再查看是那个月MOV A,AD5CJNE A,#01H,PAN1LJMP SANSHIYIPAN1: CJNE A,#03H,PAN3LJMP SANSHIYIPAN3: CJNE A,#04H,PAN4LJMP SANSHIPAN4: CJNE A,#05H,PAN5LJMP SANSHIYIPAN5: CJNE A,#06H,PAN6LJMP SANSHIPAN6: CJNE A,#07H,PAN7LJMP SANSHIYIPAN7: CJNE A,#08H,PAN8LJMP SANSHIYIPAN8: CJNE A,#09H,PAN9LJMP SANSHIPAN9 : CJNE A,#10H,PAN10LJMP SANSHIYIPAN10: CJNE A,#11H,SANSHIYILJMP SANSHISANSHIYI:MOV A,AD4 ;月份:1,3,5,7,8,10,12CJNE A,#20H,NEXTSAJMP JIXUYUESANSHI: MOV A,AD4 ; 月份:2,4,6,8,11 CJNE A,#1FH,NEXTSMOV AD4,#01HJIXUYUE: INC AD5 ; 满月后加年CJNE A,#0DH,NEXTSMOV AD5,#01HINC AD6MOV A,AD6CJNE A,#64H,NEXTS ; 年满100后清零MOV AD6,#00HNEXTS: ;再赋初值MOV TH0,#4CHMOV TL0,#00HRETIDY250MS: ; 延迟防抖250msMOV R4,#0FAHLOOP8: LCALL DY1MSDJNZ R4,LOOP8RETDY1MS: ; 延迟防抖1msMOV R5,#0B0HLOOP7: MOV R7,#2AHDJNZ R7,$DJNZ R5,LOOP7RET;键盘扫描子程序TEST: MOV R7,#08HSETBCLR ;低电平锁存NOPNOPSETB ;高电平输出AGAIN3: CLRNOPNOPMOV C, ;把的状态存入CSETBRLC A ;键盘状态存入A DJNZ R7,AGAIN3 ;扫描八个按键RETTAB:DB 88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,09H;子程序功能索引:;TEST——扫描键盘;DDISP——显示;NEXTS——重新赋初值;DY1MS——延迟防抖1msEND。

电子实时时钟万年日历系统-单片机课程设计(含电路图、流程图、汇编语言)

电子实时时钟万年日历系统-单片机课程设计(含电路图、流程图、汇编语言)

一、题目:电子实时时钟/万年日历系统二、功能要求:1.基本要求:⑴显示准确的北京时间(时、分、秒),可用24小时制式;⑵随时可以调校时间。

2.发挥要求:⑴增加公历日期显示功能(年、月、日),年号只显示最后两位;⑵随时可以调校年、月、日;⑶允许通过转换功能键转换显示时间或日期。

三、方案考虑:1、硬件方案:⑴显示器采用6位LED数码管(共阳),可分别显示时间或日期。

⑵显示器的驱动采用动态扫描电路形式,以达到简化电路的目的。

但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路。

可采用74LS244或者晶体管;其中74ls244是用来驱动段选码,晶体管是驱动位选码。

⑶采用“一键多用方案”,以减少按键数目。

本方案采用了4按键。

⑷整体上要考虑:结构简单、布局美观、操作方便、成本低廉。

2、设计电路图如下:3、元件清单:(我们使用的是TX-1C开发板)⑴ 89C52 1个⑵IC座(40脚) 3个(其中1个用于接插89C51、2个用于接插LED段数码管)。

⑶ 74LS244 1个(用于驱动6个共阳的LED段数码管)。

⑷ IC座(20脚) 1个(用于接插74LS244)。

(5)显示器:LED_8段数码管(共阳型)6个三极管:(6)PNP(8550)6个(用于驱动6个共阳型LED段数码管)。

(7)微型开关:3个(其中1个用于复位电路、其它用于键盘)。

(8)晶体振荡器(12MHz):1个(用于振荡电路)。

(9)电阻器:⑴ 3KΩ 1个(用于系统复位电路)。

⑵ 1KΩ 6个(用作PNP三极管基极电阻)。

⑶ 100Ω 7个(驱动器用作74LS244输出限流电阻)。

(10)电容器:⑴ 10μF1个(用于系统复位电路)。

⑵ 30 pF 2个(用于系统振荡电路)。

(11)其它:⑴万能电路板(10×15):1块⑵焊锡条: 2米⑶带插头、座的电源端子: 1条⑷各种颜色外皮的导线:各1米(12)工具:1.电烙铁:1把2.剪钳:1把3.镊子:1把4.万用表:1个(13)设备:编程器(MEP300或TOP851)6个4、软件方案:(1)使用全汇编编写(2)时钟基准时间由单片机内部定时中断来提供,定时时间应该乘以一个整数得到,且不宜太长或太短,最长不能超过16位定时器的最长定时时间,最短不能少于定时中断服务程序的执行时间。

单片机课程设计 电子万年历的设计

单片机课程设计 电子万年历的设计
2.具备年、月、日、星期、时、分、秒校准功能;
3.具有定时闹钟功能;
4.阴历与阳历的转换;
1.2
方案1——基于AT89S52单片机定时器产生时钟脉冲
不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。AT89S52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦写1000余次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
③P2端口 (P2.0~P2.7) P2是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
④P3端口(P3.0~P3.7)P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。
P3.6
/WR (外部数据存储器写选通)
P3.7
/RD (外部数据存储器读选通)
(2).DS1302时钟电路
芯片介绍:
低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义。
·可选的慢速充电(至VCC1)的能力。

单片机万年历程序(带闹钟)

单片机万年历程序(带闹钟)

第一章设计方案1.1.硬件设计1.1.1设计要求实现年月日、时分秒、星期的显示功能,用两个按键来实现日期和时间的调整功能,调整要求星期能自动更新,且能实现位调。

显示格式:四位年,两位月,两位日,星期字母前三位,两位时,两位分,两位秒。

比如:YYYY-MM-DD WEEKHH:MM:SS1.1.2硬件框图图1-1-硬件框图日期时间由硬件软件结合产生;按键之间相互配合完成当前日期时间的调整功能。

过程与结果由控制芯片分别输出到显示器上。

本设计附加了播放音乐的功能。

音乐从蜂鸣器产生。

1.1.3硬件选择1).显示模块本设计具体选用与实际应用与消耗资源相关。

万年历用到的地方大多都在室内。

现市场上与许多显示器,在日常生活中最常见的有数码管,led点阵屏,lcd液晶显示器等。

八段数码管的优点:亮度高,显示大。

驱动部份的软件简单;缺点:与液晶相比,耗电及体积大。

数码管只能单纯的显示数字,不能生动的表达各个参数的信息,消耗电力也比led液晶显示器大。

LCD液晶显示器它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。

因此,液晶显示器画质高且不会闪烁。

数字式接口,液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

体积小、重量轻,液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

功耗低,相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

Lcd液晶能一屏把本设计所要显示的信息表达完整。

而且lcd耗电小,体积小很适合与室内使用。

本设计的要求日期时间以数字表示、星期用3位英文字符表示共21个字符,lcd1602能显示32个字表 1-1 lcd1602引脚及功能2).按键与蜂鸣器本设计选用轻触按钮,型号为XDJT1102S。

单片机课程设计-万年历

单片机课程设计-万年历

单片机课程设计题目名称:姓名:学号:系别:班级:指导老师:完成时间:华南理工大学广州学院课程设计任务书一、实现功能利用51单片机芯片和DS1302芯片设计电子万年历功能图如下通过四个按键输入调整,在LCD液晶模块上能显示阳历年、月、日、星期、时、分、秒和阴历月、日,在显示农历时间时,能标明是否为闰年。

当切断主5V电源时,由3.3V 备用电池供电,1302内时钟仍然工作。

当重新接上5V电源后,则可以实时显示当前时间。

二、开发环境操作系统:windows XP开发芯片:89C52RC+编译器:keil51三、硬件实现1、整体仿真图如下2、12864LCD12864采用8位并行数据传送方式,占用单片机的P0口。

由于P0口用作普通I/O口时为开漏输出,所以为了输出高电平,增大负载能力,需在每个P0位接一个上拉电阻,本设计中采用10K的排阻接线。

图中的RV1为LCD背光调节电位器,可调节屏幕的亮度。

3、DS13021脚接+5V电源;8脚接3.3V备份电源;2、3脚接晶振;4脚接地;5脚接P2.6;6脚接P2.4;7脚接P2.5;+5V工作时,DS1302的7脚时钟信号由单片机的P2.5口提供,当以3.3V工作时时钟由其2、3脚外接的晶振提供时钟,晶振的震荡频率为32.768KHz。

4、按键选择按键一端接P2.0,另一端接地;加按键一端接P2.1,另一端接地;减按键一端接P3.1,另一端接地;确定按键一端接P3.2,另一端接地;四、软件实现程序流程图如下1、农历为复杂的历法,因此适宜采用查表法进行编程;2、编程中接按键的四个管脚皆为查询方式,单片机上电默认为高电平,当按键按下去的时候变为低电平,输入有效,并执行相应的事件处理程序;3、12864采用8位并行数据传送方式,占用单片机的P0口;4、DS1302位一线串行方式,所以在编程中对时序的要求非常严格,应认真注意时序的先后;主要程序源代码uchar Read1302(uchar ADDRorCOMM){uchar dat;DS1302_RST=0; //禁止数据传输DS1302_SCLK=0; //确保写写之前SCLK被拉低DS1302_RST=1; //启动数据传输DS1302InputByte(ADDRorCOMM); //写入命令或地址dat=DS1302OutputByte(); // 读出数据DS1302_SCLK=1; //将时钟电平置于高电平状态置高是为了让下次写的时候能准确的被拉低保证电平状态的正确性//DS1302_RST=0; //禁止数据传输return(dat);}void Init_1302(void) //(2008年7月12日12时00分00秒星期六){uchar flag;flag=Read1302(0x81); //读秒寄存器if(flag&0x80) //CH为0(flag最高位是0),时钟走动,不用初始化。

基于单片机的电子日历时钟系统

基于单片机的电子日历时钟系统

目录一、设计任务二、设计方案三、硬件及电路设计四、程序设计及流程图五、设计体会一、设计任务利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个电子日历时钟系统。

使用液晶显示器将日期,时间实时显示出来,并且能够通过按钮修改日期,完成实时操作并具有闹铃功能。

二、设计方案硬件选择:单片机AT89C51,DS1302时钟芯片,SED1520液晶控制器接口芯片:74LS138,74LS373,片选CS0三、硬件及电路设计(一)实验所用芯片简要介绍1、主控芯片采用单片机AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机,与AT80C51引脚和指令系统完全兼容,可擦除只读存储器可以反复擦除1000次。

AT89C51共有128×8位内部RAM ,32可编程I/O线,两个16位定时器/计数器,5个中断源,采用全静态工作,三级程序存储器锁定和可编程串行通道,工作频率为0Hz-24MHz。

另外片内内置振荡器和时钟电路,低功耗的闲置和掉电模式。

2、实时时钟部分采用DS1302DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。

采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

3、SED1520液晶控制器SED1520液晶显示驱动器是一种点阵图形式液晶显示驱动器,它可直接与8位微处理器相连,集行、列驱动器于一体,因此使用起来十分方便,作为内藏式控制器被广泛应用于点阵数较少的液晶显示模块,内置显示RAM区RAM容量为2560位,RAM中的1位数据控制液晶屏上一个点的亮灭状态:“1”表示亮,“0”表示暗,具有16个行驱动口和16个列驱动口,可直接与80系列微处理器相连,亦可直接与68系列微处理器相连。

电子实时时钟万年日历系统-单片机课程设计(含电路图、流程图、PCB图、汇编语言)

电子实时时钟万年日历系统-单片机课程设计(含电路图、流程图、PCB图、汇编语言)

摘要围绕电子钟系统的设计与开发工作进行研究和实践,详细介绍了电子钟系统的整体结构、硬件设计、软件设计,系统方案以及其的开发和具体实现。

介绍一种基于在系统可编程技术和C51编译器配有集成开发的新型电子钟的设计方法,阐述了其工作原理和软硬件设计。

在硬件上,用KEIL公司的C51大规模集成芯片对其外围电路进行集成,用1片8051实现了几十片分离元件才能实现的功能,几乎将整个系统下载于同一芯片中,实现了所谓的片上系统,从而大大简化了系统结构,增强了系统的可靠性和性价比。

该电子钟特别适用于家庭、办公大楼、公共场所等。

关键词电子钟;单片机;硬件设计;软件设计ABSTRACTAround the electronic clock system design and development of the study and practice, details the electronic clock system overall, hardware design, software design, system solutions as well as the development and implementation. Introduction of a new technology based on in-system programming and C51 compiler equipped with an integrated development of new electronic clock design method, explains how it works and software and hardware design. In the hardware companies with KEIL C51 large-scale integrated circuit chip on its surrounding, to integrate 1 tablet 8051 implementation of scores of tablets separation components to implement functionality, almost the entire system for download on the same chip, implementation of the so-called SOC, thereby greatly simplifies system structure, enhances system reliability and high performance/price ratio. The electronic clock is particularly relevant for home, office buildings and public place, etc.Key words electronic clock; single-chip; hardware; software design目录1 系统总体设计方案 (4)1.1 设计课题任务 (4)1.2 功能要求说明 (4)1.3 总体方案介绍及工作原理 (4)2 硬件系统的设计 (6)2.1 系统各功能模块介绍 (6)2.2 系统电路图 (7)2.3 系统元器件清单 (7)3 软件系统的设计 (8)3.1设计使用单片机资源介绍 (8)3.2 软件系统各功能模块介绍 (8)3.3 软件系统程序流程框图 (9)3.4 软件系统的程序 (10)4 系统的仿真分析及结论 (11)4.1 系统设计的使用说明 (11)4.2 系统设计的仿真结果 (11)4.3 系统的误差分析 (12)4.4 设计体会 (12)4.5 教学建议 (13)参考文献 (14)致谢 (15)附录(1) (16)附录(2) (17)1 系统总体设计方案1.1 设计课题任务设计一个具有特定功能的电子钟。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;山东科技大学信电通信07-1 lfj 作品lifaji@ 方案一:方案二:采用方案二。

模块图; ------------------------- 按键说明-------------------------;--------------------------1键——进入可调状态-------------------------; -------------------------2键——结束返回-------------------------; -------------------------3键——秒加1/日加1 -------------------------; -------------------------4键——分加1/月加1 -------------------------; -------------------------5键——显示24小时制/时加1/年加1-------------------------; -------------------------6键——显示12小时制-------------------------; -------------------------7键——可调时间-------------------------; -------------------------8键——可调日期-------------------------CLK BIT P1.6 ;时钟信号端DISP BIT P1.7 ;串出锁存端DBUF EQU 30H ;秒的最低位地址LED BIT P1.1CHANGE2 BIT 21H ;加12的标志位AD1 EQU 40H ;秒AD2 EQU 41H ;分AD3 EQU 42H ;时AD4 EQU 43H ;天AD5 EQU 44H ;月AD6 EQU 45H ;年; 初始化存储单元结束ORG 0000HLJMP MAINORG 000BH ;T0中断入口LJMP INTORG 0030HMAIN: MOV R0,#AD1MOV R7,#06HLOOP0: MOV A,#00HMOV @R0,AINC R0DJNZ R7,LOOP0 ;R0~R7清零MOV AD1,#37HMOV AD2,#22HMOV AD3,#0CHMOV AD4,#08HMOV AD5,#08HMOV AD6,#08H ;初始化时间为12:34:56,日期为08年08月08日MOV IE,#82H ;允许T0中断MOV TMOD,#01H ;T0允许工作MOV TH0,#4CHMOV TL0,#00H ;送入计数初值0.05sMOV R5,#00H;初始化结束SETB TR0 ;T0使能LOOP: LCALL TEST ;扫描键盘CJNE A,#0FEH,NEXTD ;0FEH为1键LCALL DY1MSLCALL KEYDONENEXTD: SJMP LOOP ;扫描键盘看是否需要调整日历DISPLAY: LCALL TEST ;扫描键盘CJNE A,#0DFH,ERSHISI1 ;0DFH为6键SETB PSW.1 ;显示十二小时LJMP TIMEZHUANERSHISI1:CJNE A,#0EFH,ERSHISI2 ;0EFH为5键CLR PSW.1 ;显示二十四小时CLR CHANGE2LJMP TIMEZHUANERSHISI2:CJNE A,#0CFH,CHANGE ;0CFH为5+6键CLR PSW.1SETB CHANGE2 ;CHANGE2=1表示把十二表示法转换成二十四小时LJMP TIMEZHUANCHANGE: CLR CHANGE2TIMEZHUAN:LCALL TESTCJNE A,#7FH,NEXTL ;7FH为8键SETB PSW.5LJMP ZHUAN1NEXTL: CJNE A,#0BFH,ZHUAN1 ;0BFH为7键CLR PSW.5ZHUAN1: JB PSW.5,DAY ;PSW.5=0 调整时间,为1则调整日期MOV A,AD1 ;调整时间键码分离MOV B,#0AHDIV ABMOV R0,#DBUFMOV @R0,BINC R0MOV @R0,AMOV B,#0AHDIV ABINC R0MOV @R0,BINC R0MOV @R0,AJB PSW.1,TIMEZHUAN1LJMP TIMEZHUAN2TIMEZHUAN1: ;判断时间是否大于12 MOV A,AD3MOV B,#0CHSUBB A,BJC NORMALTMOV AD3,ALJMP NORMALTTIMEZHUAN2:JNB CHANGE2,NORMALT ;判断是否加12MOV A,AD3ADD A,#MOV AD3,ACLR CHANGE2NORMALT: MOV A,AD3MOV B,#0AHDIV ABINC R0MOV @R0,BINC R0MOV @R0,ASJMP DDISPDAY: ;调整日期键码分离MOV A,AD4MOV B,#0AHDIV ABMOV R0,#DBUFMOV @R0,BINC R0MOV @R0,AMOV A,AD5DIV ABINC R0MOV @R0,BINC R0MOV @R0,AMOV A,AD6MOV B,#0AHDIV ABINC R0MOV @R0,BINC R0MOV @R0,ADDISP: ;显示,串入并处的方式,上升沿写入MOV R0,#DBUFMOV R7,#06HLOOP2:MOV R6,#08HMOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTR ;显示秒CLR CLOOP3:RRC ACLR CLKMOV DISP,CSETB CLKDJNZ R6,LOOP3INC R0DJNZ R7,LOOP2RETKEYDONE: ;人工手动调整日历AGAINB: LCALL DY250MS ;防抖250msLCALL TESTCJNE A,#7FH,NEXTL1 ;7FH为8键SETB PSW.5LJMP ZHUAN12NEXTL1:CJNE A,#0BFH,ZHUAN12CLR PSW.5 ;以上为扫描键盘并设置PSW.5 ZHUAN12:JB PSW.5,NEXT6B ;判断调整日期还是时间CJNE A,#0FDH,NEXTA ;0FDH为2键,如果按键值为FDH则结束LJMP BACKNEXTA: CJNE A,#0FBH,NEXTB ;0FBH为3键INC AD1 ;秒加1MOV A,AD1CJNE A,#3CH,AGAINAMOV AD1,#00HSJMP AGAINANEXTB: CJNE A,#0F7H,NEXTC ;0F7H为4键INC AD2 ;分加1MOV A,AD2CJNE A,#3CH,AGAINAMOV AD2,#00HSJMP AGAINANEXTC: CJNE A,#0EFH,AGAINA ;0EFH为5键INC AD3 ;时加1MOV A,AD3CJNE A,#18H,AGAINAMOV AD3,#00HNEXTT: SJMP AGAINANEXT6B:CJNE A,#0FDH,NEXTAB;JIESHUJIAN ;0FDH为2键LJMP BACKNEXTAB: CJNE A,#0FBH,NEXTBB ;0FBH为3键INC AD4 ;日加1MOV A,AD4CJNE A,#20H,AGAINAMOV AD4,#01HSJMP AGAINANEXTBB: CJNE A,#0F7H,NEXTCB ;0F7H为4键INC AD5 ;月加1MOV A,AD5CJNE A,#0DH,AGAINAMOV AD5,#01HSJMP AGAINANEXTCB: CJNE A,#0EFH,AGAINA ;0EFH为5键INC AD6 ;年加1MOV A,AD6CJNE A,#64H,AGAINAMOV AD6,#00HAGAINA: LCALL DISPLAYLJMP AGAINBBACK: RETINT: INC R5CJNE R5,#20,NEXTS1 ;循环20次,每次循环为0.05秒,共0.05*20=1秒MOV R5,#00HLCALL DISPLAY ;满一秒后的显示LJMP MENDNEXTS1: LJMP NEXTS ;满一秒后的显示MEND: MOV A,AD1CJNE A,#0AH,LAREMENDSETB LED ;满十秒关灯,否则继续LAREMEND:INC AD1MOV A,AD1CJNE A,#3CH, NEXTS2LJMP MEND1NEXTS2: LJMP NEXTS ;以上为看是否修改秒,满60,分加一否则跳转继续MEND1: MOV AD1,#00HINC AD2MOV A,AD2CJNE A,#3CH,NEXTS3LJMP MEND2NEXTS3: LJMP NEXTS ;以上为看是否修改分,满60,时加一否则跳转继续MEND2: MOV AD2,#00HINC AD3MOV A,AD3CJNE A,#0Ah,ZAIJIANCHAAJMP BAOSHIZAIJIANCHA:CJNE A,#0Bh,ZHENGCHANGBAOSHI: CLR LED ;以上为两个报时开灯ZHENGCHANG:MOV A,AD3CJNE A,#18H,NEXTS4 ;不满二十四小时跳出LJMP MEND3 ;满二十四后跳到清零小时继续加天NEXTS4: LJMP NEXTSMEND3: MOV AD3,#00HINC AD4MOV A,AD5CJNE A,#02H,JIXUTIAN ;判断是否为二月份MOV A,AD6MOV B,#4HDIV ABMOV A,BJZ RUNNIAN ;判断是否为闰年PINGNIAN:MOV A,AD4 ;平年CJNE A,#1DH,NEXTSMOV AD4,#01HAJMP JIXUYUERUNNIAN: MOV A,AD4 ; 闰年CJNE A,#1EH,NEXTSMOV AD4,#01HAJMP JIXUYUEJIXUTIAN: ; 不为二月,再查看是那个月MOV A,AD5CJNE A,#01H,PAN1LJMP SANSHIYIPAN1: CJNE A,#03H,PAN3LJMP SANSHIYIPAN3: CJNE A,#04H,PAN4LJMP SANSHIPAN4: CJNE A,#05H,PAN5LJMP SANSHIYIPAN5: CJNE A,#06H,PAN6LJMP SANSHIPAN6: CJNE A,#07H,PAN7LJMP SANSHIYIPAN7: CJNE A,#08H,PAN8LJMP SANSHIYIPAN8: CJNE A,#09H,PAN9LJMP SANSHIPAN9 : CJNE A,#10H,PAN10LJMP SANSHIYIPAN10: CJNE A,#11H,SANSHIYILJMP SANSHISANSHIYI:MOV A,AD4 ;月份:1,3,5,7,8,10,12CJNE A,#20H,NEXTSMOV AD4,#01HAJMP JIXUYUESANSHI: MOV A,AD4 ; 月份:2,4,6,8,11 CJNE A,#1FH,NEXTSMOV AD4,#01HJIXUYUE: INC AD5 ; 满月后加年CJNE A,#0DH,NEXTSMOV AD5,#01HINC AD6MOV A,AD6CJNE A,#64H,NEXTS ; 年满100后清零MOV AD6,#00HNEXTS: ;再赋初值MOV TH0,#4CHMOV TL0,#00HRETIDY250MS: ; 延迟防抖250ms MOV R4,#0FAHLOOP8: LCALL DY1MSDJNZ R4,LOOP8RETDY1MS: ; 延迟防抖1ms MOV R5,#0B0HLOOP7: MOV R7,#2AHDJNZ R7,$DJNZ R5,LOOP7RET;键盘扫描子程序TEST: MOV R7,#08HSETB P1.7CLR P1.7 ;低电平锁存NOPNOPSETB P1.7 ;高电平输出MOV A,#0FFHAGAIN3: CLR P2.3NOPNOPMOV C, P3.5 ;把p3.5的状态存入CSETB P2.3RLC A ;键盘状态存入ADJNZ R7,AGAIN3 ;扫描八个按键RETTAB:DB 88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,09H;子程序功能索引:;TEST——扫描键盘;DDISP——显示;NEXTS——重新赋初值;DY1MS——延迟防抖1msEND。

相关文档
最新文档