单片机课程设计报告书模板
单片机课设报告

单片机课设报告
一、引言
单片机是一种集成电路,它可以完成各种不同的功能。
在本次课设中,我们将使用单片机来实现一个简单的计算器。
二、设计思路
本次设计采用了AT89C51单片机作为控制器,通过按键输入数字和运算符,然后将结果显示在数码管上。
具体实现步骤如下:
1. 按键扫描模块:通过对按键进行扫描,获取用户输入的数字和运算符。
2. 数字存储模块:将输入的数字存储到寄存器中。
3. 运算符判断模块:判断输入的运算符类型,并进行相应的计算。
4. 结果显示模块:将计算结果显示在数码管上。
三、硬件设计
1. AT89C51单片机:作为控制器,负责整个系统的控制和数据处理。
2. 数码管:用于显示计算结果。
3. 按键:用于输入数字和运算符。
4. 电源模块:提供系统所需的电源。
四、软件设计
1. 系统初始化:包括端口初始化、定时器初始化等操作。
2. 按键扫描程序:通过对按键进行扫描,获取用户输入的数字和运算符,并将其存储到寄存器中。
3. 运算程序:根据输入的运算符类型,进行相应的计算。
4. 结果显示程序:将计算结果显示在数码管上。
五、实现效果
经过测试,本次设计可以正确地完成加减乘除四种运算,并将结果显示在数码管上。
六、总结
本次课设通过对单片机的学习和应用,使我们更深入地了解了单片机的工作原理和应用场景。
同时,也锻炼了我们的动手能力和团队合作能力。
单片机课程设计计划书(精选五篇)

单片机课程设计计划书(精选五篇)第一篇:单片机课程设计计划书机电科学与工程系电气自动化技术专业(专科)《单片机原理及接口技术课程设计》计划书一、目的及要求1.目的:通过本课程设计,•使学生进一步掌握单片机应用系统的硬、•软件开发方法,输入/输出(I/O)接口的扩展技术,应用程序设计技术并结合专业能设计简单、实用的单片机应用系统。
主要针对课堂重点讲授内容使学生加深对单片机硬件原理的理解及提高汇编语言程序设计的能力,提高学生的开发创新能力。
2.基本要求:重点研究单片机、A/D转换器、运算放大器、传感器、LED显示器、固态继电器、微型直流电机等元器件的特性、功能及使用方法;同时掌握主程序、子程序、中断服务程序框图的设计方法与汇编语言程序设计方法。
要求设计系统具有可靠性高、可维护、维修性好及检测精度高等优点。
设计内容可参考设计题目,也可根据自身情况自己拟定。
3.任务要求:了解控制对象、环境参数检测原理,在充分掌握单片机、A/D转换器、运算放大器、传感器、LED显示器、固态继电器、微型直流电机等元器件的工作原理、特性、功能及使用方法的基础上,创造性的、两人一组分工协作(一人偏软、一人偏硬)独立的设计本课题的内容。
二、设计内容、步骤及材料要求1.设计内容画出硬件原理图一张(A4号);软件框图(包括主程序框图、主要子程序框图、中断服务程序框图等)和系统初始化的汇编语言原程序。
提交不少于4000字的设计报告一份(A4纸)。
从整体方案的规划设计到各功能模块的设计,可实现功能及各元器件的选择,参数计算均需表述清楚。
报告的书写要清除工整,层次清晰,文字流畅。
后附5篇以上的参考文献。
2.设计步骤设计时间为5天,前2天进行硬件原理草图设计,指导教师审查之后用1天的时间再进行绘图;第四天进行软件框图(包括主程序框图、主要子程序框图、中断服务程序框图)的设计及系统初始化的汇编语言原程序的设计;第5天答辩。
3.设计图纸要求(1)硬件原理图的绘制:元件图正确、型号标注要准确、连线清楚.(2)软件框图的绘制:流程清晰。
单片机课程设计报告

单片机课程设计报告项目简介本文档将详细介绍单片机课程设计项目的背景、目标、实施过程和结果。
本项目旨在通过单片机开发一个特定功能的系统,并实现相应的硬件和软件设计。
背景单片机是一种集成电路,集中了处理器、存储器和其他外围器件的功能。
它的小巧、低功耗和低成本使得它成为嵌入式系统中常用的控制器。
单片机课程设计是大多数电子工程专业的必修课程,通过实际设计和开发单片机系统,提高学生在硬件和软件方面的实践能力。
目标本项目的主要目标是设计一个基于单片机的系统,能够完成特定任务。
我们选择了一个温度监控系统作为设计任务,主要包括以下功能: - 采集温度数据 - 实时显示温度 - 根据设定温度报警设计过程硬件设计在硬件设计方面,我们选用了ATmega328P单片机作为主控芯片,通过使用温度传感器LM35来采集温度数据。
单片机与温度传感器之间通过模拟输入引脚连接。
为了实现实时显示温度,我们选择了一个七段LED显示器,将数字信号发送至显示器实现温度的显示。
此外,我们还使用按钮来设置报警温度,并通过蜂鸣器进行报警。
软件设计在软件设计方面,我们使用C语言进行单片机程序的编写。
通过编写相应的代码,实现以下功能: 1. 初始化单片机及相关外设 2. 采集温度数据并进行处理 3. 将温度数据转换为七段LED显示所需的数字信号 4. 设置报警温度,并进行判断 5. 当温度超过报警温度时,触发蜂鸣器进行报警实施结果经过设计和实施,我们成功实现了温度监控系统的目标功能。
在系统测试中,我们能够准确采集温度数据,并通过七段LED显示器实时显示。
当温度超过设定的报警温度时,系统能够准确触发蜂鸣器进行报警。
整个系统工作稳定,达到了预期效果。
总结单片机课程设计是电子工程专业中重要的实践环节,通过实际设计和开发单片机系统,可以提高学生的动手能力和解决问题的能力。
本项目以温度监控系统为例,详细介绍了硬件和软件的设计过程,并展示了最终的实施结果。
在未来的学习和工作中,我们将继续积极运用单片机技术,深入研究和探索更多的应用领域。
单片机课程设计任务书5(5篇)

单片机课程设计任务书5(5篇)第一篇:单片机课程设计任务书5课程设计任务书学生姓名:石樊专业班级:光信科1102指导老师:陈梦苇工作单位:武汉理工大学理学院题目:定时闹铃的设计初始条件:电脑一台、protel作图软件、keilc51编译器、medwin仿真软件、isp在线编程软件要求完成的主要任务:(包括课程设计工作量及其技术要求以及说明书撰写等具体要求)1、技术要求:以89s51单片机为核心芯片,设计一个定时闹铃,要求如下:A、能够显示定时的时间;B、定时时间到让相应的发光二极管发光;2、主要任务:(1)复习有关课程,如数字电路、单片机等;(2)以89s51为核心,根据设计指标设计电路的框图;(3)根据要求设计出电路逻辑图和装配图;(4)查阅资料,确定所需各元器件型号和参数;(5)自拟调整测试方法,并调试电路使其达到设计指标要求;(6)撰写设计说明书,进行答辩。
3、撰写课程设计说明书:封面:题目,学院,专业,班级,姓名,学号,指导教师,日期任务书目录正文:1、技术指标;2、设计方案及其比较;3、实现方案;4、调试过程及结论;5、心得体会;6、参考文献时间安排:课程设计时间:18周:明确任务,查阅资料,初步设计电路原理图;19~20周:按照电路原理图布线,并调试通过。
按照要求撰写课程设计说明书。
指导教师签名:年月日系主任(或负责老师)签名:年月日第二篇:单片机课程设计任务书“单片机课程设计”任务书一、设计目的通过该课程设计,主要达到以下目的:①使学生增进对单片机系统的感性认识,加深对单片机理论方面的理解,为顺利完成毕业设计打基础。
②使学生掌握对单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口和串行口通讯等。
③进一步深化和巩固所学基础理论、专业知识及实验技能,提高学生的技术应用能力,使学生了解和掌握单片机应用系统的软、硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
单片机课程设计报告模板

单片机技术及应用综合训练(设计报告)题目:姓名:学院:专业:班级:学号:指导教师:2014年5 月一、选题要求临床求助呼叫监护是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断和护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士,并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。
呼叫系统的优劣直接关系到病员的安危,要求及时、准确、可靠、简便可行。
本呼叫系统基于Ateml89C52单片机,振荡电路的晶振采用12MHz,由控制核心AT89C52单片机、电源电路、振荡电路、复位电路、数码管解码芯片、病房选择和七段数码管等部分组成,系统框图如下:二、硬件电路设计工作原理为:电源电路为单片机以及其他模块提供5V电源。
晶振模块为单片机提供时钟标准,使系统各部分能协调工作。
复位电路模块为单片机系统提供复位功能。
单片机作为主控制器,根据输入信号对系统进行相应的控制。
病房一共为四个,从1号病房到4号病房病人的情况由重到轻,即1号病房的优先级最高,4号病房的优先级最低。
所以,当有两个病房一起呼叫时,优先级高的病房号显示;当低优先级的病房呼叫完毕后高优先级的病房呼叫,系统显示的号码改变;当优先级高的病房呼叫完毕后工作人员未复位的情况下,低优先级的病房呼叫无效。
另外,当有病房呼叫时蜂鸣器响直至复位。
此次设计的电路图如下:三、软件设计1、功能介绍:启动系统后,数码管显示0。
当有一个病人呼叫时,数码管显示相应病房号,同时蜂鸣器响起;当有多个病人同时呼叫时,数码管显示优先级高的病房号,同时蜂鸣器响起;当有一个病房呼叫后另一个病房呼叫,若后呼叫的病房优先级低,则数码管显示不变,若后呼叫的病房优先级高,则数码管显示后呼叫的病房号,两种情况下蜂鸣器都会叫,只是在有别的病房呼叫时有一点变音。
2、程序流程图:3、程序源代码:#include <reg51.h>#define uchar unsigned char sbit key4=P3^0;//定义按键位置sbit key3=P3^1;sbit key2=P3^2;sbit key1=P3^3;sbit reset=P3^4;//复位sbit BEEP=P1^7;//定义蜂鸣器端口uchar flag,i;void choice();void clean();void delay();void de();void ring();void main(){while(1){P3=0xff;reset=0;BEEP=0;flag=0;choice();delay();clean();}}void choice()//确定病人{ while(reset!=1&&flag==0) {if(key1==0){de();if(key1==0){P0=0X86;flag=1;}}else if(key2==0){de();if(key2==0&&key1!=0){P0=0Xdb;flag=1;}}else if(key3==0){de();if(key3==0&&key1!=0&&key2!=0){P0=0Xcf; flag=1;}}else if(key4==0){de();if(key4==0&&key1!=0&&key2!=0&&key3!=0){P0=0Xe6; flag=1;}}}}void clean() //RESET 为高的时候复位{if(reset==1){BEEP=0;P0=0x3f;}}void delay() //RESET为低的时候延时{while(!reset){ring();}}void ring(){for(i=0;reset==0;i++)//喇叭发声的时间循环{de();BEEP=!BEEP;if(key1==0||key2==0||key3==0)//第二次呼叫{if( P0==0X86)P0=0X86;else if(P0==0Xdb&&key1==0)P0=0X86;else if(P0==0Xcf&&key1==0)P0=0X86;else if(P0==0Xcf&&key1==1&&key2==0)P0=0Xdb;else if(P0==0Xe6&&key1==0)P0=0X86;else if(P0==0Xe6&&key1==1&&key2==0)P0=0Xdb;else if(P0==0Xe6&&key1==1&&key2==1&&key3==0)P0=0Xcf;}}}void de(){for(i=300;i>0;i--);}四、软硬件调试结果1、未通电:2、通电时:3、低优先级病房先呼叫:(蜂鸣器响)高优先级病房后呼叫:(蜂鸣器响)4、高优先级病房先呼叫:(蜂鸣器响)低优先级病房后呼叫:(蜂鸣器响)呼叫有效呼叫无效5、当有三个病房同时呼叫时:1号2号4号病房同时呼叫显示1五、总结本次实验程序参考网上,但下载时程序有误,经细心验证检查得已改正,这有助于我进一步对C语言的学习和掌握。
单片机课程设计报告模板

河南科技大学课程设计报告课程名称__ 单片机系统设计_题目名称_ 智能门禁系统设计学生学院 ___ 信息工程学院_____专业班级 ___ 自动化134班学号 131404010410学生姓名 __ 华科 _ ___指导教师 __ 刘磊坡 _2016年5 月25 日课程设计任务书(指导教师填写)课程设计名称单片机系统设计学生姓名华科专业班级自动化134班设计题目智能门禁系统设计一、课程设计目的1.培养学生单片机开发应用能力,如何利用键盘输入密码,开启门禁系统。
2.培养学生综合分析问题、发现问题和解决问题的能力。
3.培养学生综合运用知识的能力和工程设计的能力。
4.培养学生理论联系实际的能力。
5.提高学生课程设计报告撰写水平。
二、设计内容、技术条件和要求1设计内容智能门禁系统设计主要功能是用单片机实现通过矩阵键盘输入密码,密码正确开门,并lcd上显示“欢迎光临”,密码错误lcd上提示“密码错误请重新输入”,三次输入错误报警。
(1)设计矩阵键盘模块、定时器模块;(2)设计中断、LCD模块(3)EEPROM(AT24CXX)的使用2 设计要求•设计单片机最小系统(包括复位按钮、晶振电路等);•绘制实现本设计内容的硬件电路(原理图),系统的组成框图。
•相应的控制状态表;•编写本课程设计内容的软件设计(包含程序流程图和对程序注释)。
3 总体设计思想(供参考)•利用矩阵键盘实现输入;•IIC通信协议;•采用LCD12864作为显示屏。
4 设计参考智能门禁系统设计主要包含单片机主控电路、显示电路、键盘电路、IIC通信协议模块电路等组成。
5 知识点准备:•+5V电源原理及设计;•单片机复位电路工作原理及设计(元件选择的依据);•单片机晶振电路工作原理及设计(元件选择的依据);•LCD显示特性、驱动设计及应用;•单片机引脚资源、引脚分配等;•单片机汇编语言及程序设计(中断、延时子程序的设计)。
三时间进度安排按教学计划规定,单片机原理课程设计总学时为1周,其进度安排和时间大致分配如下:1.十二周周一至周二查阅资料、进行软、硬件初步设计;2.十二周周三至周四上机调试,发现问题,解决问题,完善课程设计;十二周周五3.1、何立民. 单片机高级教程.总结设计过程,编写课程设计报告书。
单片机课程设计报告模板

单片机课程设计报告模板单片机课程设计报告一、设计目的本次单片机课程设计旨在培养我们对单片机的基本认知和应用能力,通过对STC89C52单片机的学习和实践,提升我们的编程能力和创新思维,同时让我们深入了解单片机的工作原理和应用场景,为未来工作和学习打下坚实基础。
二、设计内容本次课程设计主要涵盖了单片机的基本原理、C语言编程以及电路设计。
我们以智能家居为例,设计了一个可以通过Wi-Fi连接到手机APP控制家电的智能开关系统。
1.单片机的选择我们选择STC89C52作为单片机的核心控制器,这是一款8位高性能单片机,拥有大容量闪存和SRAM存储器、多种定时器和计数器、16位定时器等重要功能,非常适合用于物联网控制和智能家居领域。
2.开发环境的搭建我们采用KEIL软件和PROTEUS电路仿真软件作为开发工具,为了让我们更加熟练地使用这两款软件,我们在课堂上进行了详细的讲解和实践操作,学习了单片机的汇编、C语言编程、调试和调试工具的使用。
3.电路设计为了实现智能家居的控制,我们需要搭建一个能够与单片机相互协作的电路。
我们选择了常见的继电器来控制家电设备的开和关。
具体的电路设计方案如下:①按键电路:在电路中加入按键触发模块,实现单片机中断、感应等功能。
②Wi-Fi WiFi模块:为了实现远程控制,我们使用了ESP8266模块和手机APP进行通讯。
③继电器模块:该模块内置独立的继电器驱动IC,设计电容保护电路和DIP开关控制当前继电器输出端口,保障免受电磁干扰和防止继电器共振。
4.软件设计本次课程设计的重点是编写单片机程序。
我们通过不断的实践和调试,成功编写了相应的程序,实现了以下功能:①通过Wi-Fi模块连接到手机APP,实现APP和单片机的通讯。
②实现对接ESP8266模块,并正确设置ESP8266模块的IP地址和端口号。
③通过单片机控制继电器模块,实现对家电的远程控制。
5.上位机程序设计上位机程序我们选择了Visual Studio C++作为开发工具,通过Socket编程实现了与单片机的通讯。
单片机课程设计报告参考模板

注意:以下单片机课程设计报告格式是结合老师发来的报告要求制作的,其中正文“程序存储器和数据存储器的单元分配”没有,由于大部分同学的程序都是使用C语言编写的,单元分配可能无法知道。
本人报告中不具有这部分内容。
本版本报告给是仅供参考!仅供参考!
惠州学院
课程设计
课程:
题目:
学生系别:
学生专业:
学生班级:
学生姓名:
学生学号:
指导教师:
2013年11月25日
惠州学院课程设计任务书
摘要
目录1.设计方案
1.1设计思想
1.2设计说明
2.硬件部分
2.1原理框图
2.2 STC89C52单片机
2.3四位LED共阴数码管
2.4按键电路
2.4.1复位电路
2.4.2电源电路
2.4.3晶振电路
2.4.4调整电路
2.5 74LS373锁存器
3.软件部分
3.1程序流程图
3.1.1主程序流程图
3.1.2子程序流程图
3.2程序清单
4.调试
4.1整合过程
4.2问题与解决方法
4.3实物效果图
5.总结
6.参考文献
7.附录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
. .. . .. ..西南科技大学2011级微机原理与接口技术课程设计报告课题名称微机原理与接口技术姓名学号院、系、部制造科学与工程学院专业指导教师2014年月日目录一、绪言 (1)二、系统设计 (1)2.1系统整体流程图 (1)2.2日历时钟的控制方案论证 (1)2.3单片机的选择方案论证 (2)2.4键盘选择方案论证 (2)2.5显示模块的选择方案论证 (2)2.6模块的选择方案论证 (2)三、硬件电路设计 (2)3.1日历时钟的控制电路图 (2)3.2行列式键盘的设计 (3)3.3数码管显示电路的设计 (3)3.4蜂鸣器驱动电路的设计 (4)3.5主要元器件选择 (4)四、程序流程图 (5)五、c语言程序设计 (5)六、日历时钟的控制器仿真 (19)6.1K e i l调试 (19)6.2P r o t e u s调试 (19)七、结束语 (20)八、参考文献 (21)1、绪言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。
本设计采用AT89C51单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。
数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
2、系统设计2.1 设计任务1、利用MCS-51内部定时器定时,编程实现年、月、日、时、分、秒的显示,显示格式为:年月日:10-06-18时分秒:09-12-35也可自行设定显示格式,两部分可按键切换显示;2、能按键调整日期、时间的数值;3、可设定时间报警,报警的时间至少有2个,报警时应有报警指示。
4、要求至少调试出任务的前两项。
2.2 方案比较与论证2.2.1 系统整体流程图2.2.2用4*3的行列式键盘组成0-9数字键及确认键、删除键,从矩阵键盘输入8位数密码,起始密码由程序设定,输入完后按确定键开锁,取消键清除所有输入。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“-”,当密码位输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提示。
当密码不正确时,禁止按键输入3秒,同时启动蜂鸣器发出“嘀、嘀”报警声。
2.2.3 单片机的选择方案论证方案一:采用可编程逻辑期间CPLD 作为控制器。
CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。
采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。
但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高,且从使用及经济的角度考虑我们放弃了此方案方案二:采用Atmel公司的AT89S52单片机作为控制器。
AT89S52是一个低功耗,高性能的51内核的CMOS 8位单片机,片内含8k空间的可反复擦些1000次的Flash只读存储器,具有256 bytes的随机存取数据存储器(RAM),32个IO口,2个16位可编程定时计数器。
综合考虑,选择方案二,采用Atmel公司的AT89S52单片机作为控制器。
2.2.4 键盘选择方案论证方案一:采用独立式键盘。
由于各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可以很容易的判断哪个按键被按下。
此种键盘适用于按键较少或操作速度较高的场合。
但本题发挥部分要求12个功能键,按键数目较多,这就需要较多的输入口线,而且电路结构复杂。
故此方案不可取。
方案二:采用行列式键盘。
它由行线和列线组成,按键位于行列的交叉点上,行线信号和列线信号分别通过两个接口和CPU相连,通过行列扫描法判定按键的位置,此方案适用于按键较多的场合。
通过对电子密码锁题目的分析,采用4*3行列式键盘。
2.2.5 显示模块的选择方案论证方案一:采用带字库LCD模块显示。
能显示复杂的信息,具有质量轻,体积小,功耗低,指令功能强,接口简单,可靠性强等优点,显示内容丰富,图形美观,易于人机交流。
但是价格昂贵。
方案二:采用LED数码管显示。
数码管能显示数字和符号,但是占用IO口资源较多,对于简单的电路可以选用此方案。
电子密码锁,电路简单,选用方案二,显示所需信息。
2.2.6 模块的选择方案论证当输入密码时,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提示。
当密码不正确时,禁止按键输入3秒,同时发出“嘀、嘀”报警声,为实现此功能我们选用LED 发光二极管和蜂鸣器混合使用。
3 硬件电路设计3.1 电子密码锁控制电路图图2 电子密码锁控制线路图3.2 行列式式键盘的设计键盘电路如图3所示。
设计数字键0~9 的键号依次为0~9,取消键的键号为10,确认键的键号为11,键号可按键值=行首键号(0、4、8、12)+列键号(0、1、2、3)公式计算。
图3 键盘电路3.3 数码管显示电路的设计数码管驱动采用8 个共阴极数码管显示,由于单片机的驱动能力有限,采用74LC245 作为数码管的驱动,在7 段码输出线上串联100 欧姆电阻起限流作用。
其电路如图3所示。
图4 数码管显示电路3.4 蜂鸣器驱动电路的设计蜂鸣器的驱动采用NPN 三极管2484 来驱动,低电平有效。
其电路如图5 所示。
图5 蜂鸣器电路图3.5 主要元器件选择主要元器件选用型号和数量如表1所示:表1 主要元器件清单4 程序流程图时间程序流程图5 C语言程序设计程序清单:设置变量缓冲区SEC EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMON EQU 34HYEAR EQU 35H;************************************************************************* ORG 0000HLJMP MAINORG 000BHLJMP INT_T0ORG 0030HMAIN: LCALL CHUSHIMOV TMOD,#01HMOV TH0,#4CHMOV TL0,#00HMOV IE,#82HSETB TR0 ;开启定时器T0MOV 50h,#00H ;启用定时器T0的初始值MOV 37H,#0 ;显示日期和时间的标志MOV 38H,#0 ;12进制和24进制的标志MOV 39H,#23 ;默认时间为24进制CLR F0 ;日历定时0和1的标志LOOP: MOV A,37HJZ SHIJIANMOV R1,#33HLJMP BEGIN1SHIJIAN:MOV R1,#30H ;初始化显示BEGIN1: M OV A,38HJZ JZ24MOV 39H,#11LJMP BEGIN2JZ24: MOV 39H,#23BEGIN2: L CALL DISPLAYLCALL KEY ;扫描键盘CJNE A,#05H,DINGS ;判断键值是否为5号键LCALL DY1MS ;若是,则实现调整LCALL TIAOTLCALL TIAOTLCALL DISPLAYLJMP DOWNDINGS: CJNE A,#06H,QIEH ;判断键值是否为6号键,定时LCALL DY1MS ;若是,则实现调整CPL F0JNB F0,DI0 ;F0=0,定时器0LCALL DISHI1 ;F0=1,定时器1LCALL DISPLAYLJMP DOWNDI0: L CALL DISHI0LCALL DISPLAYLJMP DOWNQIEH: CJNE A,#07H,BIANH ;判断键值是否为7号键,切换LCALL DY1MS ;若是,则切换显示,年月日与时分秒切换LCALL DISPLAYMOV A,37HCPL AMOV 37H,ALJMP DOWNBIANH: CJNE A,#08H,DOWN ;判断是否为八号键,变换进制LCALL DY1MSLCALL DISPLAYMOV A,38HCPL AMOV 38H,ADOWN: LJMP loop;调整子程序********************************************************************** TIAOT: push accCLR P SW.1 ;初始化标志位TOP1: LCALL KEY ;扫描键盘CJNE A,#08H,PANFAN ;判断键值是否为8号键,不是8键,则继续判断CPL PSW.1 ;取反标志位JB PSW.1,TC ;标志位为1,调整时间change0LCALL CHG1 ;标志位为0,调整日期change1LCALL DISPLAYLJMP TOP1TC: CLR TR0LCALL CHG0LCALL DISPLAYPANFAN: CJNE A,#5,TOP1pop accRET;调整时间子程序****************************************************************** CHG0: MOV R1,#30HLCALL DISPLAYLCALL KEYS: CJNE A,#01H,M ;判断键值,是否为1号键MOV R0,#SEC ;键值为01,即1号键调整秒MOV A,R0 ;进制CJNE A,#59,L0 ;判断秒是否为59MOV SEC,#00 ;若是,秒清零LCALL DISPLAYLJMP CHG0L0: INC AMOV R0,ALCALL DISPLAYLJMP CHG0M: CJNE A,#02H,H ;判断键值,是否为02HMOV R0,#MIN ;若是,即2号键,则调整分钟MOV A,R0CJNE A,#59,L2 ;判断分是否为59MOV MIN,#00 ;若是,分钟清零LCALL DISPLAYLJMP CHG0L2: INC AMOV R0,ALCALL DISPLAYLJMP CHG0H: CJNE A,#03H,K ;判断键值,是否为03H MOV R0,#HOUR ;键值为03,即3号键调整小时MOV A,R0CJNE A,39H,L4 ;判断小时是否为23MOV HOUR,#00LCALL DISPLAYLJMP CHG0L4: INC AMOV R0,ALCALL DISPLAYLJMP CHG0K: CJNE A,#04H,CHG0SETB TR0RET;调整日期********************************************************************** CHG1: MOV R1,#33HLCALL DISPLAYLCALL KEYR: CJNE A,#01H,Y ;判断键值,是否为1HMOV R0,#DAY ;键值为01,调整日期MOV A,R0 ;进制CJNE A,#31,B0 ;判断30MOV DAY,#00LCALL DISPLAYLJMP CHG1B0: INC AMOV R0,ALCALL DISPLAYLJMP CHG1Y: CJNE A,#02H,N ;判断键值,是否为2MOV R0,#MONMOV A,R0CJNE A,#12,B1 ;判断月是否12MOV MON,#00LCALL DISPLAYLJMP CHG1B1: INC AMOV R0,ALCALL DISPLAYLJMP CHG1N: CJNE A,#03H,K1 ;判断键值,是否为FBMOV R0,#YEAR ;键值为3,调整年MOV A,R0CJNE A,#99,B2MOV YEAR,#0LCALL DISPLAYLJMP CHG1B2: INC AMOV R0,ALCALL DISPLAYLJMP CHG1K1: CJNE A,#04H,CHG1RET;第一次定时子程序***************************************************************** DISHI0: MOV 40H,SEC ;保存原值MOV 41H,MINMOV 42H,HOURLCALL CHG0 ;调用调整子程序MOV 43H,SECMOV 44H,MINMOV 45H,HOURLCALL DIRET;第二次定时子程序***************************************************************** DISHI1: MOV 40H,SECMOV 41H,MINMOV 42H,HOURLCALL CHG0MOV 46H,SECMOV 47H,MINMOV 48H,HOURLCALL DIRETDI: MOV SEC,40H ;恢复原值MOV MIN,41HMOV HOUR,42HLCALL DISPLAYRET;定时器T0子程序******************************************************************* INT_T0: INC 50hmov r5,50hCJNE R5,#20,DUAN11 ;判断是否到一秒LJMP DUAN12DUAN11: LJMP NEXT0DUAN12: MOV 50h,#0 ;若是,则重新初始化循环次数MOV A,SECCJNE A,#59,DUAN21 ;判断秒是否为59LJMP DUAN22DUAN21: LJMP N0DUAN22: MOV SEC,#00 ;若是则秒清零lcall displayMOV A,MINCJNE A,#59,DUAN31 ;判断分钟是否为59LJMP DUAN32DUAN31: LJMP N1DUAN32: MOV MIN,#00 ;若是,则分钟清零lcall displayMOV A,HOURCJNE A,39H,DUAN41 ;判断小时是否23LJMP DUAN42DUAN41: LJMP N2DUAN42: MOV HOUR,#00 ;若是,小时清零lcall displayMOV A,DAYPUSH ACCMOV A,MONCJNE A,#1,YUE3POP ACCLJMP RR2YUE3: CJNE A,#3,YUE5 ;1,3,5,7,8,10,12月31天POP ACCLJMP RR2YUE5: CJNE A,#5,YUE7POP ACCLJMP RR2YUE7: CJNE A,#7,YUE8POP ACCLJMP RR2YUE8: CJNE A,#8,YUE10POP ACCLJMP RR2YUE10: CJNE A,#10,YUE12POP ACCLJMP RR2YUE12: CJNE A,#12,YUE4POP ACCLJMP RR2YUE4: CJNE A,#4,YUE6 ;4,6,9,11月30天LJMP RR1YUE6: CJNE A,#6,YUE9POP ACCLJMP RR1YUE9: CJNE A,#9,YUE11POP ACCLJMP RR1YUE11: CJNE A,#11,YUE2POP ACCLJMP RR1YUE2: MOV A,YEAR ;2月:是闰年29天,是平年28天MOV B,#4DIV ABMOV A,BJZ RYUEPYUE: POP ACCLJMP RR00RYUE: POP ACCLJMP RR01RR00: CJNE A,#28,N3MOV DAY,#1LCALL DISPLAYRR01: CJNE A,#29,N3MOV DAY,#1LCALL DISPLAYLJMP RR3RR1: CJNE A,#30,N3MOV DAY,#1LCALL DISPLAYLJMP RR3RR2: CJNE A,#31,N3MOV DAY,#1LCALL DISPLAYLJMP RR3RR3: MOV A,MONCJNE A,#12,N4 ;判断月份是否为11MOV MON,#1 ;若是,则月份清零lcall displayMOV A,YEAR ;年份加一CJNE A,#99,N5MOV YEAR,#0lcall displayLJMP NEXT0N0: INC A ;否则,秒加一lcall displayLCALL DFGLJMP NEXT0N1: INC A ;分钟加一MOV MIN,Alcall displayLCALL DFGLJMP NEXT0N2: INC A ;小时加一MOV HOUR,Alcall displayLCALL DFGLJMP NEXT0N3: INC A ;日期加一MOV DAY,Alcall displayLJMP NEXT0N4: INC A ;月份加一MOV MON,Alcall displayLJMP NEXT0N5: INC ANEXT0: MOV TH0,#4CHMOV TL0,#00HRETI;判断是否到定时时间子程序******************************************************* DFG: MOV A,SEC ;判断是否到第一个定时时间CJNE A,43H,DOWN1MOV A,MINCJNE A,44H,DOWN1MOV A,HOURCJNE A,45H,DOWN1CLR P3.6 ;若到第一个定时时间,则亮灯DOWN1: MOV A,SEC ;判断是否到第二个定时时间CJNE A,46H,DOWN2MOV A,MINCJNE A,47H,DOWN2MOV A,HOURCJNE A,48H,DOWN2CLR P3.6 ;若到第二个定时时间,则亮灯DOWN2: LCALL KEYLCALL DY1MS ;扫描键盘CJNE A,#04H,DO ;若键值为4号键,则灭灯RET;延时1ms ********************************************************************** DY1MS: MOV R5,#0FAHLOOP7: NOPNOPDJNZ R5,LOOP7RET;初始化CHUSHI****************************************************************** CHUSHI: MOV SEC,#0MOV MIN,#0MOV HOUR,#0MOV DAY,#26MOV MON,#1MOV YEAR,#11RET;子程序KSI :判定有无闭合键的************************************************* KSI: MOV A, #00HMOV P1, A ;P2口送00HLCALL DY1MSMOV A,P3CPL ARET;键盘扫描********************************************************************** key: LCALL KSI ;检查是否有键闭合JNZ LK1LJMP END1LK1: LCALL DY1MSLCALL KSI ;再检查是否有键闭合JNZ LK2 ;有键闭合转移到LK2LJMP END1 ;无键闭合,延时12ms后转KEY1LK2: MOV A,#0FEHMOV P1,AMOV R3,AMOV R4,#00HLK4: MOV A,P3JB ACC.0, LONE ;ACC.3=1,第一列无键闭合,转LONEMOV A, #01HlJMP LKPLONE: JB ACC.1, NEXT ;ACC.2=1,第二列无键闭合,转LTWO MOV A, #05HlJMP LKPLKP: ADD A, R4 ;计算键码PUSH ACC ;保护键码lCALL KSI ;检查是否继续闭合,若闭合再延时JNZ LK3POP ACC ;若键起,则键码送ARETNEXT: INC R4MOV A,R3JNB ACC.3,END1RL AMOV R3,AMOV P1,AlJMP LK4 ;进行下一列扫描END1: RET;显示子程序******************************************************************** DISPLAY: push accMOV R3,#03HMOV R2,#0FEHDISLOOP: MOV A,R2MOV P2,AMOV A,R1MOV B,#10DIV ABMOV 36h,AMOV DPTR,#KEYBOARD MOVC A,A+DPTRMOV P0,A ;显示低位LCALL DY1MSMOV A,R2RL AMOV R2,AMOV P2,AMOV A,36hMOV DPTR,#KEYBOARD MOVC A,A+DPTRMOV P0,A ;显示高位LCALL DY1MSMOV A,R2RL AJNB ACC.0,EXITMOV R2,AMOV P2,AMOV A,#10MOV DPTR,#KEYBOARD MOVC A,A+DPTRMOV P0,AMOV A,R2RL AMOV R2,AINC R1DJNZ R3,DISLOOPEXIT: pop accRET;断码值*********************************************************************** KEYBOARD: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFHEND}6 电子密码锁控制器仿真在完成了电子密码锁硬件设计和软件设计以后,便进入系统的调试阶段。