万年历程序设计说明书
- 格式:docx
- 大小:37.30 KB
- 文档页数:3
硬件详细设计说明书——基于单片机电子万年历设计姓名:部门:编号:目录一、系统概述 (1)二、硬件详细设计 (1)2.1主控模块 (1)2.2 电源模块 (2)2.3 时钟模块 (2)2.4 键盘输入模块 (3)2.5 显示模块 (3)2.6 闹钟模块 (4)2.7 温度采集模块 (4)2.8 ISP下载电路 (5)一、系统概述基于单片机的万年历是运用51系列单片机为主处理器实现日期、时间、温度等信息的显示,并带有闹钟提示功能。
该系统主要由主控模块、电源模块、时钟模块、键盘输入模块、显示模块、闹钟模块、温度采集模块、ISP下载模块共八个模块组成。
系统框图如图1.1所示。
图1.1 电子万年历系统框图二、硬件详细设计2.1主控模块P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDU7STC12LE5A60S2-35I-PDIP40RST9XTAL218XTAL119GND20PSEN29ALE/PROG30EA/VPP31VCC40P1.0/T21P1.1/T2-EX2P1.23P1.34P1.45P1.56P1.67P1.7821P2.0/A8P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P2.7/A1528P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732VCC_3.3VR144.7KP2.[0..7]RSTXTAL1XTAL2P0.0P0.1P0.2P0.3P0.4VCC_3.3VP0.5P0.6P0.7图1.1 主控模块电路主控模块电路如图1.1所示。
湄洲湾职业技术学院万年历说明书系别:自动化工程系年级:10级专业:电气自动化姓名:小清学号:1001020254导师姓名:佘明辉职称:副教授2013年 5 月27日目录1.前言 (1)2.系统设计参数要求 (2)3.系统设计 (3)3.1系统设计总体框图 (3)3.2 各模块原理说明 (3)3.2.1 AT89C51单片机最小系统模块 (3)3.2.2 液晶显示模块 (4)3.2.3 蜂鸣器模块 (5)3.2.4 独立键盘模块 (5)3.3 系统总原理图说明 (6)3.4系统印刷电路板的制作图 (6)3.5系统的操作说明 (6)3.6 系统操作注意事项 (6)参考文献 (7)致谢词 (8)附录 (9)附录1:电路总原理图 (9)附录2:印刷电路板 (10)附录3:原件清单 (11)1.前言随着半导体技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了很多的改变。
尤其是单片机技术的应用产品已经随着社会前进的步伐走进我们的生活。
电子产品的应用可谓多不胜数,电子万年历就是其中的一种。
电子万年历的出现给人们的生活带来的极大的方便。
单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。
本设计是制作一个万年历,系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。
系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。
本系统硬件部分由AT89C51单片机、液晶显示器、DS18B20温度测量、键盘、蜂鸣器系统等部分构成。
软件部分在keil环境下用C51语言编写,包括时间设置、时间显示、定时闹钟、温度显示。
2.系统设计参数要求该系统要求参数具体如下:[1] 能显示年、月、日、星期、时、分、温度[2] 用液晶显示器来显示时间[3] 用PROUTEUS设计,仿真基于AT89C51单片机的万年历实验的硬件电路[4] 可设置定时时间,当定时时间到时,蜂鸣器发出报警声音3.系统设计3.1系统设计总体框图采用AT89C51作为主控单片机,温度模块选用DS18B20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路,其框图如图3.1所示。
目录摘要......................................... (错误!未定义书签。
) Abstract . (1)绪论.......................................... (错误!未定义书签。
)第1章基本概念简介. (2)1.1 EDA技术和FPGA/CPLD简介 (2)1.2 VHDL的简介 (3)1.3 Quartus II的简介 (4)第2章系统设计 (5)2.1 设计思想 (5)2.2 设计原理图 (6)2.3 设计流程图 (6)第3章模块分析 (7)3.1 计数器模块分析 (7)3.1.1 秒和分计数器模块 (7)3.1.2 时计数器模块 (8)3.1.3 日计数器模块 (9)3.1.4 月计数器模块 (12)3.1.5 年计数器模块 (14)3.2 校时模块 (16)3.3 显示及显示方式切换模块 (18)3.4 顶层原理图 (20)第4章引脚设定与验证 (21)4.1 引脚设定 (21)4.2 下载验证 (23)总结 (23)参考文献 (25)致谢.......................................... (错误!未定义书签。
)摘要随着EDA(电子设计自动化)技术的发展和应用领域的扩大,EDA技术在电子信息、通信、自动化控制及计算机应用领域的重要性日益突出。
EDA技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL (Hardware Description language)为系统逻辑描述手段完成的设计文件,自动完成逻辑化简、逻辑分割、逻辑综合(布局布线)、逻辑优化和仿真测试等项功能,直至实现既定性能的电子线路系统功能。
EDA的关键技术之一是用形式化方法来描述数字系统的硬件电路、即用所谓的硬件描述语言来描述硬件电路。
本设计是基于VHDL语言的万年历。
单芯片万年历设计教学目标一、课程设计的性质本课程是在预先验证的认知实验和相关理论课程编制依据上,设计更高层次命题的教学环节。
它是一种供学生在教师指导下自主获取资料、设计、安装和编程特定功能的电子程序。
电路课程。
对提高学生的电子工程素质和科学实验能力具有十分重要的意义。
2.课程设计的目的本课程旨在培养学生综合数字电路和单片机知识的能力,解决电子信息中常见的实际问题,了解一般电子电路和单片机形成简单系统和更复杂的编程方法的能力。
是参加各类大学生电子竞赛前的技能训练课程,促进学生积累单片机系统开发经验,为更复杂、更实际的应用领域做准备。
目的是夯实基础,专注设计,发展技能,追求创新,变得实用。
二、课程设计专题(万年历设计)功能要求:1、显示年、月、日、时、分、秒;2、分、时、年、月、日可调;技术要求:课程设计通过制作PCB完成。
三、编程1.液晶1602初始化;PB口为数据输入输出口#define LCD_DDR PB_DDR MOV LCD_DDR,#0MOV PB_CR1,#0FFHMOV PB_CR2,#0#define Data_IN PB_IDR #define Data_Out PB_ODR;初始化PE5为RSBSET PE_DDR,#5BSET PE_CR1,#5BRES PE_CR2,#5BSET PE_ODR,#5#define RS PE_ODR, #5;初始化PE6为RWBSET PE_DDR,#6BSET PE_CR1,#6BRES PE_CR2,#6BSET PE_ODR,#6#define RW PE_ODR, #6;初始化PE7为E(片选信号)BSET PE_DDR,#7BSET PE_CR1,#7BRES PE_CR2,#7BRES PE_ODR,#7定义E PE_ODR,#7;液晶初始化MOV R03,#15呼叫延迟MOV LCD_COM,#38H ;调用 LCDWR_NDMOV R03,#05呼叫延迟MOV LCD_COM,#38H调用 LCDWR_ND移动 R03,#05 ;显示关闭呼叫延迟MOV LCD_COM,#08H调用 LCDWR_NDMOV R03,#05 ;显示清屏呼叫延迟MOV LCD_COM,#01H调用 LCDWR_NDMOV R03,#12 ;读或写一个字符后,地址指针减一呼叫延迟MOV LCD_COM,#04H调用 LCDWR_NDMOV R03,#15 ;显示开,光标不显示呼叫延迟MOV LCD_COM,#0CH调用 LCDWR_NDMOV R03,#15呼叫延迟2.子程序LCDWR_ND.LCDWR_ND.LBSET RW布雷斯 RS ;选择命令;阅读模式MOV LCD_DDR,#00H ;0,数据总线处于输入状态灯带1.LBSET E无无MOV LCD_D1,数据_IN布雷斯BTJT LCD_D1,#7,灯带1;写模式MOV LCD_DDR,#0FFHBRES RWMOV Data_Out, LCD_COMBSET E无无布雷斯RET3.子程序W_CODE.W_CODE.L ;读取数据布雷斯 RS ;数据指令BSET RWMOV LCD_DDR,#00HW_CODE_1.LBSET E无无LD A,Data_IN布雷斯LD R11,ABTJT R11,#7,W_CODE_1MOV LCD_DDR,#0FFHBSET RSBRES RWMOV Data_Out, LCD_COMBSET E无无布雷斯RETRETRETRETRET4. Subroutine Delay(起到延时作用)(1) TIM3初始化;计数器初始化MOV TIM3_PSCR,#01H移动 TIM3_ARRH,#27HMOV TIM3_ARRL,#10HMOV TIM3_CR1,#04HBRES TIM3_IER,#0BSET TIM3_CR1,#0(2)中断程序中断 TIM3_Interrupt_OverTIM3_Interrupt_Over.lBRES TIM3_SR1,#0十二月 R03IRET(3) 主要部分.延迟.LBSET TIM3_EGR,#0BSET TIM3_IER,#0延迟_1.lLD A, R03CP A,#00JRUGT 延迟_1BRES TIM3_IER,#0RET5、计时部分:(1) TIM1初始化;计数器初始化MOV TIM1_SMCR,#00HBRES TIM1_ETR,#6MOV TIM1_PSCRL,#01HMOV TIM1_ARRH,#{HIGH 10000} ;初始化自动重载初值寄存器TIM1_ARR MOV TIM1_ARRL,#{LOW 10000}MOV TIM1_RCR,#00H ;初始化重复计数寄存器 TIM1_RCRMOV TIM1_CR1,#05H BSET TIM1_CR1,#0 ;启动定时器 TIM1 (2) 中断程序中断 TIM1_Interrupt_OverTIM1_Interrupt_Over.lBRES TIM1_SR1,#0十二月 R19JRNE TIM1MOV R19,#100公司 R05 ; R05 是秒的一位数CLR ALD A, R05CP A,#10JRNE TIM1CLR R05INC R06 ;R06 是第二个的十位LD A, R06CP A,#6JRNE TIM1CLR R06公司 R07 ; R07 是分钟的一位数TIM1.LIRET6、LCD1602显示部分(1) 年、月、日的显示无限循环1.l移动地址,#08CHMOV LCD_COM,地址调用 LCDWR_ND无限循环2.lCLRW XCLR ACLRW YLDW X, R22LDW Y,#4DIVW X,YLD A, YLCP A,#0JRNE FRNCLRW YCLRW XCLR ALDW Y,#100LDW X, R22DIVW X,YLD A, YLCP A,#0JRNE润年CLRW YCLRW XCLR ALDW Y,#400LDW X,R22DIVW X,YLD A, YLCP A,#0JRNE FRN润年.lCLR ALD A,R21CP A,#2JRNE AS8LD A,R20CP A,#30JRC SD1MOV R20,#1INC R21JPF ASFRN.lCLR ALD A,R21CP A,#2JRNE AS8LD A,R20CP A,#29JRC SD1MOV R20,#1INC R21JPF ASAS8.LLD A,R21CP A,#1JRNE AS1LD A,R20CP A,#32JRC SD1MOV R20,#1INC R21 SD1.LJPF ASAS1.LLD A,R21CP A,#3JRNE AS2LD A,R20CP A,#32JRC SD2MOV R20,#1INC R21 SD2.LJPF ASAS2.LLD A,R21CP A,#5JRNE AS3LD A,R20CP A,#32JRC SD3INC R21 SD3.LJPF ASAS3.LLD A,R21CP A,#7JRNE AS4LD A,R20CP A,#32JRC SD4MOV R20,#1INC R21 SD4.LJPF ASAS4.LLD A,R21CP A,#8JRNE AS5LD A,R20CP A,#32JRC SD5MOV R20,#1INC R21 SD5.LJPF ASAS5.LLD A,R21CP A,#10JRNE AS6LD A,R20CP A,#32JRC SD6MOV R20,#1INC R21 SD6.LJPF ASAS6.LLD A,R21CP A,#12JRNE AS7LD A,R20CP A,#32JRC SD7INC R21 SD7.LJPF ASAS7.LIKELD A,R20CP A,#31JRC ASMOV R20,#1INC R21升学CLRW XCLR ALD A,R20LD XL,ALDW Y,#10DIVW X,YLD A,XLLD R31,ALD A, YLLD R30,ALD A,R21CP A,#13JRNE DFMOV R21,#1LDW X,R22INCW XLDW R22,X东风CLRW XCLR ALD A,R21LD XL,ALDW Y,#10DIVW X,YLD A,XLLD R33,ALD A, YLLD R32,ACLRW XCLR ALDW X,R22LDW Y,#1000DIVW X,YLD A,XLLD R37,ALDW X,YLDW Y,#100DIVW X,YLD A,XLLD R36,ALDW X,YLDW Y,#10DIVW X,YLD A,XLLD R35,ALD A,YLLD R34,A;日;个位LD A,R30CLRW XCLR ALD A,R30LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;十位CLRW XCLR ALD A,R31LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥2+0}LD LCD_COM,A调用 W_CODE;月;个位CLRW XCLR ALD A,R32LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;十位CLRW XCLR ALD A,R33LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥2+0}LD LCD_COM,A调用 W_CODELD A,R34CP A,#10JRNE条112CLR R34INC R35条112.lCLRW XCLR ALD A,R34LD XL,ALD A,(ShuZi,X) ;年的个位LD LCD_COM,A调用 W_CODELD A,R35CP A,#10JRNE条113CLR R35INC R36条113.lCLRW XCLR ALD A,R35LD XL,ALD A,(ShuZi,X) ;年的十位LD LCD_COM,A调用 W_CODELD A,R36CP A,#10JRNE条114CLR R36INC R37条114.lCLRW XCLR ALD A,R36LD XL,ALD A,(ShuZi,X) ;百岁LD LCD_COM,A调用 W_CODECLRW XCLR ALD A,R37LD XL,ALD A,(树子,X) ;年以千计LD LCD_COM,A调用 W_CODE(2) 时、分、秒显示部分.鲜食.l;秒的一位数条1.lCLRW XCLR ALD A, R05LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;几十秒条2.lCLRW XCLR ALD A, R06LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥+0}LD LCD_COM,A调用 W_CODE;分钟的一位数LD A, R07CP A,#10JRNE条3CLR R07INC R08条3.lCLRW XCLR ALD A, R07LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;分钟的十位LD A,R08CP A,#6JRNE条4CLR R08INC R09条4.lCLRW XCLR ALD A,R08LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥+0}LD LCD_COM,A调用 W_CODE;小时的个位LD A,R10CP A,#2JRNE庆玲LD A,R09CP A,#4JRNE条5CLR R09CLR R10INC R20MOV R24,#0FFHJRT条5青灵.lLD A,R09CP A,#10JRNE条5CLR R09INC R10条5.lCLRW XCLR ALD A,R09LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;小时的十位LD A,R10CP A,#3JRNE条6CLR R10条6.lCLRW XCLR ALD A,R10LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODELD A,{WEL_1+0}LD LCD_COM,A调用 W_CODECLR ALD A,R24CP A,#0FFHJRNE QCLR R24JPF 无限循环1QLJPF 无限循环RET7、键盘调时部分中断 TIM3_Interrupt_OverTIM3_Interrupt_Over.lBRES TIM3_SR1,#0十二月 R03IRETIRETIRETIRETIRET中断 TIM2_Interrupt_Over TIM2_Interrupt_Over.lBRES TIM2_SR1,#0十二月 R12JRNE 中断_TIM2_Key1MOV R12,#20BSET KeySTU,#4中断_TIM2_Key1.lLD A,KeySTU和 A,#07HJRNE 中断_TIM2_Key_exitLD A,KeyTIMECP A,#125JRNC 中断_TIM2_Key_exitINC KeyTIME中断_TIM2_Key_exit.lSCAN_Key.lBTJT KeySTU,#4,SCAN_Key_NEXT1JPF SCAN_Key_EXIT SCAN_Key_NEXT1.LBRES PG_ODR,#1无无无LD A,PC_IDR和 A,#0FEHCP A,#0FEHJRNE SCAN_Key_NEXT2供应链金融JRT SCAN_Key_NEXT3 SCAN_Key_NEXT2.LRCFSCAN_Key_NEXT3.LLD A,KeySTURLC A和 A,#07HLD KeySTU,AJREQ SCAN_Key_NEXT41CP A,#010BJRNE SCAN_Key_NEXT4BRES KeySTU,#1SCAN_Key_NEXT41.LLD A,KeyTIMECP A,#125JPF SCAN_Key_EXITCLR 密钥时间JRT SCAN_Key_NEXT6 SCAN_Key_NEXT4.LCLR 密钥时间CP A,#101BJRNE SCAN_Key_NEXT5BSET KeySTU,#1JPF SCAN_Key_EXITSCAN_Key_NEXT5.LCP A,#100BJREQ SCAN_Key_NEXT6IRETSCAN_Key_NEXT6.LCALL Key_Check_ProcSCAN_Key_EXIT.LIRETIRETIRETIRETIRET.Key_Check_Proc.lBTJT PC_IDR,#1,Key_Check_Proc_1INC R18LD A,R18CP A,#6JRNE 一号CLR R18MOV R24,#0FFH一个.lJPF Key_Check_Proc_6Key_Check_Proc_1.lLD A,R18CP A,#1JRNE Key_Check_Proc_2BTJT PC_IDR,#2,JianYi_1CLR R05CLR R06INC R07JPF Key_Check_Proc_6简一_1.lBTJT PC_IDR,#6,Key_Check_Proc_1_1LD A,R07CP A,#0JRNE建一_1_1MOV R07,#10LD A,R08CP A,#0JREQ建一_1_1十二月 R08建一_1_1.lCLR R05CLR R06十二月 R07Key_Check_Proc_1_1.LJPF Key_Check_Proc_6Key_Check_Proc_2.lLD A,R18CP A,#2JRNE Key_Check_Proc_3BTJT PC_IDR,#2,JianYi_2INC R09JPF Key_Check_Proc_6简一_2.lBTJT PC_IDR,#6,JianYi_2_2LD A,R09CP A,#0JRNE建一_2_1MOV R09,#10LD A,R10CP A,#0JREQ建一_2_1十二月 R10简一_2_1.l十二月 R09简一_2_2.lJRT Key_Check_Proc_6Key_Check_Proc_3.lLD A,R1CP A,#3JRNE Key_Check_Proc_4BTJT PC_IDR,#2,JianYi_3INC R20MOV R24,#0FFHJRT Key_Check_Proc_6简一_3.lBTJT PC_IDR,#6,Key_Check_Proc_6CP A,#0JRNE建一_3_1MOV R20.29建一_3_1.l十二月 R20MOV R24,#0FFHJRT Key_Check_Proc_6Key_Check_Proc_4.lLD A,R18CP A,#4JRNE Key_Check_Proc_5BTJT PC_IDR,#2,JianYi_4INC R21MOV R24,#0FFHJRT Key_Check_Proc_6简一_4.lBTJT PC_IDR,#6,Key_Check_Proc_6LD A,R21CP A,#1JRNE建一_4_1MOV R21,#13简一_4_1.l十二月 R21MOV R24,#0FFHJRT Key_Check_Proc_6Key_Check_Proc_5.lLD A,R18CP A,#5JRNE Key_Check_Proc_6BTJT PC_IDR,#2,JianYi_5CLRW XLDW X,R22INCW XLDW R22,XMOV R24,#0FFHJRT Key_Check_Proc_6简一_5.lBTJT PC_IDR,#6,Key_Check_Proc_6CLRW XLDW X, R22DECW XMOV R24,#0FFHJRT Key_Check_Proc_6 Key_Check_Proc_6.lRETRETRETRETRET4.硬件设计一、一般电路原理图2、LCD1602电路3、微控制器最小系统[1]世伟.印刷电路板的排版设计:科技文献,1983[2]永雄,沙河等。
汇编语言课程设计报告书一.课程设计的题目和内容用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。
二.系统设计及功能要求1.系统封面设计内容:题目名称,设计日期,设计者姓名。
要求:具有动感,如题目名称移动;字体具有立体感。
可插入一些图画,如学校的校徽图。
2.输入画面设计内容及要求:①密码及口令:输入,核查及修改功能。
②年份:输入及判断功能。
如:年份值是否为4位整数,不为4位,提示用户重输。
3.日历计算功能设计①求某年某月某日是星期几的子功能。
(要求编成子程序)算法:s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c(其中:y为年份;c为某月某日是这一年的第几天,由②求出;s为总天数。
“/”为整除。
)n=s%7 (其中:n为星期数;“%”为求余数)②求某月某日是这一年的第几天的子功能。
(要求编成子程序)二月份是否为平年(28天)或闰年(29天)的算法:y/400=0∨y/4=0∧y/100≠0 (y为年份;“/”整除),则y为以闰年;否则,y为平年。
根据①②可求出一年中的日历。
4.日历输出功能设计。
①格式及显示设计显示要求:设置显示滚动区;在该区中每次显示4个月的日历(并列排列)。
②日历打印设计:将日历按年存入磁盘不同的文件中保存,供打印或再次显示使用。
1.程序系统总体功能模块调用图及模块功能说明封面程序的功能是显示欢迎信息,并且显示制作人的信息的;验证用户名和密码的程序是验证用户是否是合法的用户的,该程序要有容错的功能;万年历程序是主程序,该程序的功能是通过用户输入年和月,来查询日历的,并且该程序还可以判断输入的年份是平年还是闰年。
封底程序是用来显示用户退出万年历系统的时候,一个感谢用户使用万年历的界面的。
2.程序系统详细的程序框图(每个子程序的流程图)①封面子程序,封底子程序的框图注:以封面程序为例,封底程序与封面程序类似②用户名和密码子程序框图注:以用户名程序为例,密码程序和用户名程序类似③求某年某月某日是星期几的子程序④..求某月某日是这一年的第几天的⑤判断是平年还是闰年的子程序⑥年份月份转化为真值的子程序四. 程序运行结果五.系统源程序.386DATA SEGMENT USE16A0 DB ' _____◆____◆____◆____◆____◆____◆_____◆_____ $' DB '※※$' DB '| |$' DB '◆◆$' DB '| ┏☆━━━━━━━━━━━━━━☆┓|$' DB '◆☆^ǒ^*☆*^ǒ^*★*^ǒ^*☆*^ǒ^*★*^ǒ^*☆◆$' DB '| ┃欢迎进入万年历系统┃|$' DB '◆☆^ǒ^*★*^ǒ^*☆*^ǒ^*★*^ǒ^*☆*^ǒ^*☆◆$' DB '| ┗☆━━━━━━━━━━━━━━☆┛|$' DB '◆◆$' DB '| |$' DB '◆制作人:某某某◆$' DB '| |$' DB '◆班级:2班◆$' DB '| |$' DB '◆学号:123456789012 ◆$' DB '| |$' DB '◆日期:08.1.15 ◆$' DB '| |$' DB '◆◆$' DB '| |$' DB '◆◆$' DB '| 版权所有,请勿仿冒|$' DB '※____◆____◆____◆____◆____◆____◆____◆____※$'A1 DB ' ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆┏━☆━━━━━━★━━━━━━☆━┓◆$' DB '◇┃◆◇┃◇$' DB '◆┃请输入用户名和密码┃◆$' DB '◇┃◇↑↑↑↑↑↑↑↑↑↑↑↑↑◆┃◇$' DB '◆┗━☆━━━━━━★━━━━━━☆━┛◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB '◇用户名:◇$' DB '◆◆$' DB '◇◇$' DB '◆密码: ◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB ' ◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇$'A2 DB '******★******☆******★*******☆*******★********$' DB '☆☆$' DB '| |$' DB '★★$' DB '| *********************************** |$' DB '☆* 欢迎再次使用万年历系统* ☆$' DB '| *********************************** |$' DB '★★$' DB '| |$' DB '☆☆$' DB '| |$' DB '★☆☆★★$' DB '| 如有不足之处,请联系我☆☆|$' DB '☆☆$' DB '| ★★☆|$' DB '★我们会不断的完善的★$' DB '| |$' DB '☆^_^ ☆$' DB '| |$' DB '★ISBN 7-300-00528-9 ★$' DB '| |$' DB '☆********★******☆********★********★*********☆$'A3 DB '******************万年历*******************$' DB '** ** ** **$' DB '======================================$' DB '| S UN | MON | T UE | WED | T HU | F A I | S A T |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$'YEAR DW ?MONTH DB ?B DW ?C1 DW 0D1 DW 0E DW 0G DB 0T DW 0S DB 0P DW ?N DW 0Y DW 0M DW 0BUF1 DB 31,?,31,30,31,30,31,31,30,31,30,31BUF2 DB 1,2,3,4,5,6,7,8,9,10,11,12INPUT1 DB '请输入要查询的年份:$'INPUT2 DB '请输入要查询的月份:$'INPUT3 DB '该年是平年$'INPUT4 DB '该年是闰年$'INPUT5 DB '要继续查询? 1.继续查询 2.退出万年历系统$'STR5 DB 5DB 0DB 5 DUP(0)STR6 DB 3DB 0DB 3 DUP(0)BUF3 DB ' 1',0AH,0DH,'$'DB ' 2',0AH,0DH,'$'DB ' 3',0AH,0DH,'$'DB ' 4',0AH,0DH,'$'DB ' 5',0AH,0DH,'$'DB ' 6',0AH,0DH,'$'DB ' 7',0AH,0DH,'$'DB ' 8',0AH,0DH,'$'DB ' 9',0AH,0DH,'$'DB '10',0AH,0DH,'$'DB '11',0AH,0DH,'$'DB '12',0AH,0DH,'$'DB '13',0AH,0DH,'$'DB '14',0AH,0DH,'$'DB '15',0AH,0DH,'$'DB '16',0AH,0DH,'$'DB '17',0AH,0DH,'$'DB '18',0AH,0DH,'$'DB '19',0AH,0DH,'$'DB '20',0AH,0DH,'$'DB '21',0AH,0DH,'$'DB '22',0AH,0DH,'$'DB '23',0AH,0DH,'$'DB '24',0AH,0DH,'$'DB '25',0AH,0DH,'$'DB '26',0AH,0DH,'$'DB '27',0AH,0DH,'$'DB '28',0AH,0DH,'$'DB '29',0AH,0DH,'$'DB '30',0AH,0DH,'$'DB '31',0AH,0DH,'$'C DB ?D DB ?STR1 DB 20DB 0DB 20 DUP(0)STR2 DB 20DB 0DB 20 DUP(0)STR3 DB 'admin' ; 用户名COUNT1 EQU $-STR3STR4 DB 'admin' ;密码COUNT2 EQU $-STR4BUF4 DB '用户名不正确,请重新输入!$'BUF5 DB '密码不正确,请重新输入!$'DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AH,0 ;设置显示方式MOV AL,3 ;彩色文本方式INT 10H;************************封面程序************************************ MOV AH,6MOV AL,0MOV CL,0 ;清整个屏幕MOV DH,24MOV DL,79MOV BH,26INT 10HMOV CX,24MOV SI,OFFSET A0MOV B,000EHLOPA0: MOV AH,2MOV BX,0MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SIMOV AH,9INT 21HADD SI,52DEC CXJNZ LOPA0MOV AH,1INT 21H;*************************用户名,密码程序****************************MOV AL,0MOV CH,0MOV CL,0 ;清整个屏幕MOV DH,24MOV DL,79MOV BH,30INT 10HMOV CX,24 ;显示用户名的密码页面,共24行,循环输出24次MOV SI,OFFSET A1MOV B,000EHLOPA1: MOV AH,2 ;定光标位置MOV BX,1MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SI ; 显示字符串MOV AH,9INT 21HADD SI,52DEC CXJNZ LOPA1MOV C,3 ;容错三次LOPA2: MOV AH,2 ;设置用户名光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,0D21HINT 10HLEA DX,STR1 ;输入用户名,保存在缓冲区STR1中MOV AH,10INT 21HMOV AL,STR1+1 ;用户名的长度送到AL中CMP AL,COUNT1 ;比较输入的用户名是否和指定的用户名长度一样JNE R ;长度不一样,跳转到PLEA SI,STR1+2LEA DI,STR3MOV CX,COUNT1REPZ CMPSB ;逐一比较两串的对应字符是否相等JNE R ;不相等,跳转到P 否则程序往下执行,输入密码MOV D,3LOPA3: MOV AH,2 ;设置密码光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,1021HINT 10HLEA DX,STR2 ;输入密码,保存在缓冲区STR2中MOV AH,10INT 21HMOV AL,STR2+1 ;密码的长度送到AL中CMP AL,COUNT2 ;比较输入的密码是否和指定的密码长度一样JNE Q ;长度不一样,跳转到QLEA SI,STR2+2LEA DI,STR4MOV CX,COUNT2REPZ CMPSB ;逐一比较两串的对应字符是否相等JNE Q ;不相等,转QJMP T1 ;相等,转LOPA4R: MOV AH,2 ;设置显示用户名错误信息光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,1521HINT 10HLEA DX,BUF4 ;输出用户名错误信息MOV AH,9INT 21HMOV AH,6MOV AL,1MOV CH,13MOV CL,33 ;清用户名输入行的屏幕MOV DH,13MOV DL,53MOV BH,30INT 10HINT 21HMOV AH,6MOV AL,1MOV CH,21MOV CL,33 ;清用户名出错行的屏幕MOV DH,21MOV DL,60MOV BH,20INT 10HDEC C ;循环次数减1JNZ LOPA2 ;跳转到LOPA2,重新输入用户名JE EXITQ: MOV AH,2 ;设置显示密码错误信息光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,1521HINT 10HLEA DX,BUF5 ;输出密码错误信息MOV AH,9INT 21HMOV AH,6MOV AL,1MOV CH,16MOV CL,33 ;清密码输入行的屏幕MOV DL,53MOV BH,30INT 10HMOV AH,1INT 21HMOV AH,6MOV AL,1MOV CH,21MOV CL,33 ;清密码出错行的屏幕MOV DH,21MOV DL,60MOV BH,20INT 10HDEC D ;循环次数减1JNZ LOPA3 ;跳转到LOPA3,重新输入密码JE EXITMOV AH,1INT 21H;***********************显示万年历程序*******************************T1: MOV T,0MOV AH,6MOV AL,0MOV CL,0 ;清整个屏幕MOV DH,24MOV DL,79MOV BH,27INT 10HMOV CX,17MOV SI,OFFSET A3MOV B,0411HLOPA4: MOV AH,2MOV BX,0MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SIMOV AH,9INT 21HADD SI,44DEC CXJNZ LOPA4MOV AH,2 ;定输入年份提示信息的光标MOV BX,0MOV DH,1MOV DL,17INT 10HLEA DX,INPUT1 ;提示信息,请输入要查询的年份MOV AH,9INT 21HMOV AH,2 ;定输入年份的光标MOV BX,0MOV DH,5MOV DL,19INT 10HLEA DX,STR5 ;输入年份,保存在缓冲区STR1中MOV AH,10INT 21HLEA DI,STR5+2 ; DI指向年份输入串的首地址MOV CL,STR5+1 ;输入年份字符串的长度送到CLMOV AX,0 ;年份转化为真值P1: MOV BL,[DI] ; 取字符送到BLSUB BL,30H ;字符减去30H,转化为真值MOV BH,0MOV P,10MUL PADD AX,BXINC DI ;DI指向下一个字符DEC CX ;长度减一JNZ P1MOV YEAR,AX ;把年送到YEAR中CALL PR ;调用判断平年还是闰年的程序JC L1 ;有进位,借位,跳转到L1,输出闰年,否则顺序执行,是平年MOV AH,2 ;输出平年信息的光标MOV BX,0MOV DH,1MOV DL,36INT 10HLEA DX,INPUT3 ;输出平年MOV AH,9INT 21HLEA DI,BUF1MOV [DI+1],BYTE PTR 28 ;平年把28送入BUF1中JMP J0L1: MOV AH,2 ;输出闰年信息的光标MOV BX,0MOV DH,1MOV DL,36INT 10HLEA DX,INPUT4 ; 输出闰年MOV AH,9INT 21HLEA DI,BUF1MOV [DI+1],BYTE PTR 29 ;闰年把29送入BUF1中J0: MOV AH,2 ;定输入月份提示信息的光标MOV BX,0MOV DH,2MOV DL,17INT 10HLEA DX,INPUT2 ;提示信息,请输入要查询的月份MOV AH,9INT 21HMOV AH,2 ;定输入月份的光标MOV BX,0MOV DH,5MOV DL,56INT 10HLEA DX,STR6 ;输入月份,保存在缓冲区STR2中MOV AH,10INT 21HLEA DI,STR6+2 ;DI指向月份输入串的首地址MOV CL,STR6+1 ;月份输入串的长度送到CL中MOV AX,0P2: MOV BL,[DI] ;取字符送到BL中SUB BL,30H ;字符减去30HMOV BH,0MOV S,10MUL SADD AX,BXINC DI ;DI指向下一个字符DEC CX ;长度减一JNZ P2MOV WORD PTR MONTH,AX ;月份值送到MONTH中CALL DTOB1 ;显示日历,调用DTOB1子程序返回N侄MOV DI,OFFSET BUF1DEC MONTHADD DI,WORD PTR MONTH ;取出每个月的天数MOV CL,[DI]MOV G,CLMOV SI,OFFSET BUF3MOV AL,6MUL NADD AX,19MOV B,AXMOV C1,9J1: MOV AH,2 ;确定每个月的一号的光标位置,即确定初始输入位置MOV BX, 0MOV DH,BYTE PTR C1MOV DL,BYTE PTR BINT 10HCMP DL,55JBE J2 ;DL<33,跳转到J2,否则行加1列从3开始ADD C1,2MOV B,19JMP J1J2: MOV DX,SIMOV AH,9 ;在当前光标位置显示数字INT 21HADD SI,5ADD B,6DEC GJNZ J1MOV AH,2 ;定输入月份的光标MOV BX,0MOV DH,22MOV DL,17INT 10HLEA DX,INPUT5MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,31HJE T1JMP T2DTOB1 PROC NEAR ;求某年某月某日是星期几子程序PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV CX,0DEC YEARMOV AX,YEAR ;YEAR-1送入AX中MOV CX,YEARMOV DX,0MOV BL,4DIV BXMOV C1,AX ;(YEAR-1)/4送入C1中ADD CX,C1MOV AX,YEARMOV DX,0MOV BL,100DIV BXMOV D1,AX ;(YEAR-1)/100送入D中SUB CX,D1MOV AX,YEARMOV DX,0MOV BX,400DIV BXMOV E,AX ;(YEAR-1)/400 送入E中ADD CX,EMOV DX,0 ;DX清零MOV BX,0 ;BX清零MOV DL,MONTH ;求每个月的第一天是本年的第几天SUB DL,1MOV DI,OFFSET BUF2MOV SI,OFFSET BUF1R1: CMP [DI],DLJA R2 ;一月份的时候,跳转到R2MOV BL,[SI] ; 其它月份的时候,进行累加,计算每个月的第一天是该年的第几天ADD T,BXADD SI,1ADD DI,1JMP R1R2: ADD T,1ADD CX,T ;s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+TMOV AX,CXMOV DX,0MOV BX,7 ;S%7,计算每个月的第一天是星期几DIV BXMOV N,DXPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETDTOB1 ENDPPR PROC NEAR ;判断是平年还是闰年PUSH AXPUSH BXPUSH CXPUSH DXMOV AX,YEARMOV CX,AXMOV DX,0MOV BX,4DIV BXJNZ B1MOV AX,CXMOV BX,100DIV BXCMP DX,0JNZ B2MOV AX,CXMOV BX,400DIV BXCMP DX,0JZ B2B1: CLCJMP B3B2: STCB3: POP DXPOP CXPOP BXPOP AXRETPR ENDP;***********************底封程序*************************************T2: MOV AH,6MOV AL,0MOV CH,0MOV CL,0 ;清整个屏幕MOV DL,79MOV BH,26INT 10HMOV CX,22MOV SI,OFFSET A2MOV B,010EH LOPA5: MOV AH,2MOV BX,0MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SIMOV AH,9INT 21HADD SI,52DEC CXJNZ LOPA5EXIT: MOV AH,4CHINT 21HCODE ENDSEND START六.系统设计及实现的技术特点,不足及改进的建议设计封面,封底的时候,我先开始不会用循环的方法显示封面,所以用了许多9号功能调用来显示封面,但用这样的方法,显示的封面不能太大,所以我改用了循环的方法来显示封面,这样封面就可以做的很大了,这是我的一个技术特点在编写验证用户名和密码的程序时,我原先没有弄容错的功能,但是后来经过我的思考,我加了一个循环,让输入错了再返回到原输入位置,并且用循环判断是不是到了最大的输入次数,超过最大次数就退出系统,否则继续输入。
计算机科学与技术学院硬件课程设计报告在日常生活中,手表,闹钟是不可或缺的。
在实际生活生产活动中,也要考虑时间的因素,如工时的计算,霓虹灯的亮灭。
因为集成电路制造技术的不断提高,出现了高性能、高可靠的集成芯片。
电子时钟在工业领域,日常生活中得到了广泛的应用。
电子时钟在性能方面具有精度高,实时性好,易于调整等优点。
这些使得温度控制系统的研究和开发得到的各方面的广泛关注和支持。
本次课程设计,我利用8254计数芯片,8255芯片,4*4小键盘,12864LCD 液晶显示器,蜂鸣器制作了一个带有闹钟功能的电子时钟万年历。
它可以实现由4*4小键盘输入初始时间(包括年月日时分秒星期),利用8254计数,通过程序处理进位,判断闰年,在液晶显示屏上实时显示时间。
还可以由小键盘选择不同的闹钟模式,设定闹钟时间。
关键词:电子时钟; 8255A芯片; 8254芯片; 12864LCD液晶显示器;键盘输入;蜂鸣器;闹钟功能;万年历1.设计任务与要求...........................................................................6- 1.1实验目的 (6)1.2具体要求 (6)2.总体方案与说明...........................................................................6- 2.1使用硬件 (6)2.1流程设计 (6)2.1.1系统程序模块 (6)2.1.1系统流程图 (7)3.硬件方案 (7)3.1硬件说明 (7)3.1.1计数芯片8254 (7)3.1.2可编程外围接口芯片8255A (8)3.1.2 128×64字符液晶显示器 (11)3.2电路原理图与说明 (12)3.2.1键盘电路 (13)3.2.2 8254计数电路 (13)3.2.3 液晶显示电路 (14)3.3电路连接图 (14)3.3.1 8254计数芯片 (14)3.3.2 整体电路 (15)4.软件方案 (15)4.1软件主要模块流程图 (15)4.1.1输入子程序模块流程图 (16)4.1.2显示子程序模块流程图 (18)4.1.2闰年子程序模块流程图 (18)4.1.2蜂鸣器子程序模块流程图 (18)4.1.2时间进位程序模块流程图 (19)4.1.2主程序模块流程图 (20)4.2源程序清单与注释 (21)5.分析与测试 (38)6.运行结果 (38)6.1试验线路图 (39)6.2实验结果 (39)6.2.1欢迎界面 (39)6.2.2闹钟设定界面 (40)6.2.3闹钟功能实现 (41)6.2.4闰年功能实现 (41)7.结论与体会 (43)7.1结论 (43)7.2体会 (44)参考文献 (45)-1 设计任务与要求1.1实验目的1.复习8255芯片,8254芯片工作原理及使用方法2.学会使用12864字符液晶显示屏,蜂鸣器3.锻炼小规模逻辑电路设计4.提高分析、解决问题的能力1.2具体要求本系统要求能通过4*4键盘输入预设时间,实时反映当前时间的变化并能对闰年进行准确判断。
万年历程序设计说明书
一、引言
万年历是一款方便用户查询日期、农历、节假日等信息的应用程序。
本文档将详细介绍万年历程序的设计和功能实现,以帮助开发人员理解和使用该程序。
二、需求分析
1. 用户可以通过程序查询指定日期的公历和农历信息。
2. 用户可以查看指定日期是否为节假日,并显示节假日名称。
3. 用户可以选择查询某个年份的所有节假日。
4. 用户可以设置提醒功能,当指定日期到来时,程序会发送通知提醒用户。
5. 界面友好,操作简单,用户体验良好。
三、系统设计
1. 技术选型
本程序将使用Python语言进行开发,使用以下库和框架:
- tkinter:用于创建程序的图形用户界面。
- datetime:用于处理日期和时间相关的操作。
- requests:用于发送HTTP请求,获取节假日数据。
- plyer:用于发送系统通知。
2. 模块划分
本程序将分为以下几个模块:
- 主界面模块:负责显示程序的主界面,包括日期选择框、查询按钮等。
- 日期查询模块:负责处理用户输入的日期,查询公历和农历信息,并显示在界面上。
- 节假日查询模块:负责查询指定日期是否为节假日,并显示节假日名称。
- 节假日提醒模块:负责设置提醒功能,当指定日期到来时发送系统通知提醒用户。
3. 数据获取与处理
- 公历和农历信息:使用datetime库获取指定日期的公历和农历信息。
- 节假日数据:通过发送HTTP请求获取节假日数据,并使用json库进行解析和处理。
四、功能实现
1. 主界面设计
主界面应包括日期选择框、查询按钮、显示区域等组件,用户可以通过日期选择框选择查询日期,并点击查询按钮进行查询操作。
查询结果将显示在显示区域中。
2. 日期查询功能实现
用户选择查询日期后,程序将使用datetime库获取公历和农历信息,并将其显示在界面上。
3. 节假日查询功能实现
用户可以选择查询某个年份的所有节假日。
程序将通过发送HTTP请求获取节假日数据,并使用json库进行解析和处理。
查询结果将显示在界面上。
4. 节假日提醒功能实现
用户可以设置提醒功能,当指定日期到来时,程序将发送系统通知提醒用户。
程序将使用plyer库发送系统通知,提醒用户注意节假日或重要日期。
五、测试与优化
1. 单元测试
对每个模块进行单元测试,确保功能的正确性和稳定性。
2. 用户测试
邀请用户参与测试,收集用户的反馈意见和建议,及时修复和优化程序。
3. 性能优化
对程序进行性能优化,提高程序的响应速度和稳定性。
六、总结
本文档详细介绍了万年历程序的设计和功能实现,包括需求分析、系统设计、
功能实现等内容。
通过合理的模块划分和技术选型,我们可以开发出一个功能强大、界面友好的万年历应用程序,为用户提供便捷的日期查询和节假日提醒服务。