可编程作息时间控制器设计单片机_第1页
可编程作息时间控制器设计单片机_第2页
可编程作息时间控制器设计单片机_第3页
可编程作息时间控制器设计单片机_第4页
可编程作息时间控制器设计单片机_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023~2023学年第2学期《单片机原理与应用》课程设计报告学校:北华航天工业学院题目:可编程作息时间控制器设计专业:惺惺惜惺惺班级:Bxxxxx姓名:xxxxx学号:惺惺惜惺惺信息学、、指导教师:xx电子工程系2023《可编程作息时间控制器设计》任务书课题名称可编程作息时间控制器设计指导教师xx执行时间2023~2023学年第一学期第16周学生姓名学号承担任务ZzzZxxxx设计目的1、掌握汇编语言的基本结构及应用;2、掌握各个部分功能的设计及应用;3、学会使用protues软件进行电路仿真。设计规定按照给定的时间模拟控制实现上下课打铃、灯光控制(屏幕显示);具有各日期和时钟显示。摘要本课题是应用AT89C52为核心控制器件的作息时间控制钟,由键盘、声音输出模块、电源转换模块和存储模块四部分组成。它运用AT89C52的定期/计数器来计算时间,并用存储器记录数据,保证了系统的可靠性。AT89C52单片机是整个设计的核心控制器件,根据从键盘接受的数据控制整个设计的工作流程。整体性好,人性化强,可靠性高,实现了对时间控制的智能化,摆脱了传统由人来控制时间的长短的不便,可对一些以24小时为周期的开关量进行自动控制。如上下课打铃及扩音设备的开与关。采用AT89C52单片机来实现对上述开关量的控制,设有8位数码管、可以实时显示时间、系统还设有输入键盘,用以修改实时实时时钟,体现了系统简朴、工作稳定可靠、价廉、控制时间精确及系统体积小等特点。一方面设计各个模块的屏幕显示,另一方面是各个模块需要调用的小程序,有PC机的日期和时钟,响铃声音,按键,屏幕显示以及延时的调用等等,最后是将各个功能模块与其中需要的小程序通过对的的汇编语言组建起来。这样便完毕了源文献的建立。再通过.ASM源文献生成的.EXE可执行文献进行仿真。该仿真可以模拟实现:与PC机日期时钟保持一致的显示功能,仿照已设定的响铃时间进行打铃功能,根据已设定的早晚作息时间灯光控制的功能,键盘输入修正响铃时间,随时手动按键实现响铃的功能。目录TOC\o"1-4"\h\z\u摘要 -2-目录 -4-第一章绪论 -5-1.1课题研究的目的与意义 -5-1.2研究内容及采用方法 -5-1.2.1重要研究内容 -5-1.2.2重要采用方法 -5-1.3课题的研究原理 -6-第2章可编程作息时间控制器的方案设计 -7-2.1总体方案组成框图及设计流程图 -7-2.2具体环节实行 -9-2.2.1日期和时钟显示功能的设计 -9-2.2.2上下课打铃功能的设计 -11-2.2.3灯光显示功能的设计 -14-2.2.4修改响铃时间功能的设计 -14-2.2.5模拟手动控制功能的设计 -15-第3章可编程作息时间控制器的protues仿真 -17-3.1仿真结果 -17-3.2性能及误差分析 -19-附录 -20-参考文献 -27-第一章绪论1.1课题研究的目的与意义20世纪末,电子技术得到了飞速的发展。在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化限度,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对于人来说总是那么珍贵,工作的忙碌性和繁杂让人容易忘掉当前时间。然而碰到重大事情的时候,一旦忘掉时间,就会给自己或别人导致更大的麻烦。对于学校来说作息时间尤为重要。如今,在电子计算机基础上发展而来的可编程作息时间控制器,它可以运用电子计算机的内部时间,通过程序判断解决,完毕对作息时间的精确控制,并且由于是程序控制,所以可通过改变程序而进而灵活改变作息时间,同时可以实时显示时间,并实现打铃功能。可编程时间控制器可实现对时间控制的智能化,摆脱由人控制时间的长短不同的不便,并且可以在必要时人工切入控制,,完美的满足作息时间控制。1.2研究内容及采用方法1.2.1重要研究内容用C语言编写作息时间控制程序,按照给定的时间模拟控制,上下课打铃、灯光控制(屏幕显示),并且具有日期和时钟显示。给定的时间可修改,可模拟手动控制,用扬声器模拟打铃。1.2.2重要采用方法通过汇编语言编程,先在数据段中开几段缓冲区,以存放需要显示的提醒信息以及存储PC机内部时钟日期等等,调用子程序的清屏部分来显示已经设定好的屏幕部分,再调用DOS的日期及时钟调用功能,读取PC机内部日期和时钟,并将数据存入显示缓冲区,然后调用时间和日期显示功能,把程序设计成用刷新的方式来不断获取系统时间,这样就有了一秒一秒走动的日期时钟显示,在此过程需要用到延时程序,所以把延时程序单独做成一个子程序,然后在需要的时候调用它,使得时间显示程序更加精炼,此时日期和时钟显示功能已经完毕;而后设计灯光控制(屏幕显示),采用比较跳转的方式即可,当到达设定的时间区域时通过比较来判断是亮灯还是灭灯;随后是上下课打铃的模拟,需要调用DOS显示功能,将设定好的时间在屏幕上显示出来,然后调用PC机内部时钟,判断时钟与给定期间是否相同,进而判断是否响铃,若响铃则调用设定好的响铃程序,并实现屏幕模拟显示;给定期间修改是调用键盘I/O中断功能号,获取键值的方法来进入,先拟定应当修改哪个响铃,再将新的响铃时间数据存入要修改时钟的缓冲区,并将其覆盖来实现;模拟手动控制、用扬声器模拟打铃,同样采用调用键盘I/O中断功能号,获取键值的方法,判断是否与设定的手动按键相同,若相同则进入手动控制,进入后调用响铃程序,而后自动退出响铃,开始其他响应功能。1.3课题的研究原理将定期闹钟改造为4路可调闹钟,从而实现打铃等功能。当四路闹钟中的任一路届时,均会点亮灯、打铃。如有需求,可对程序进行调整,增长闹钟的路数,及届时后的解决方式第2章可编程作息时间控制器的方案设计2.1总体方案组成框图及设计流程图时间作息控制的主体电路应涉及秒信号发生器、时间显示电路按键电路、供电电源以及闹铃指示电路等几部分。时间作息控制的系统组成框图如图2-1-1所示:复位、时钟等电路复位、时钟等电路电源供电电路声光指示电路LED显示电路按钮电路AT89C52图2-1-图2-1-开始开始系统日期时间并且转二进制为ACSII码将日期时间存入显示器缓冲区结束灯光控制显示显示日期、时间和界面响铃设定和修正时间调用清屏程序按下Esc?手动控制 否是 图2-1-2.2具体环节实行2.2.1日期和时钟显示功能的设计 2.2.1.1日期和时钟显示流程图 数据段存储显示时间提醒开辟存储日期时间缓冲区代码段中调用日期二进制转换为ASCII码数据段存储显示时间提醒开辟存储日期时间缓冲区代码段中调用日期二进制转换为ASCII码存储缓冲区调用时间二进制转换为ASCII码存储缓冲区调用界面和日期时钟显示 图2-2-1日期和时钟显示流程图2.2.1.2日期和时钟设计环节分析该模块设计中,先在数据段开了两段缓冲区,以存储显示日期和时间的提醒Timeis以及从PC机读到的日期和时间。而后是调用DOS的日期功能,其功能号是2ah,日期分别存于cx,dx中,在该设计中调用出来的日期时间均是二进制数,假如要在界面中显示必须要转换成ASCII码。每一次数制转换后均要将转换后的数据存储于数据段开辟的存储缓冲区tbuf内,接下来便可调用DOS的的9号显示功能,只需将提醒信息、日期及时间的存储缓冲区的偏移地址赋予dx,再使用DOS功能,调用9号的显示功能即可。这样,日期和时间的第一次显示时间完毕,由于PC机的日期时间一直在变化,所以需要不断调用PC机的显示时间并显示,因此需要再回转至最初的调用日期程序,这样,显示日期时间的功能才真正完毕。下面是针对数制转换和日期时间的显示做的更为细致的解读。 数制转换通常在计算机当中,从键盘输入的十进制数的每一位数码或者是向CRT输出的十进制的每一位数,均是以它的ASCII码表达的。而在机器中的一个十进制数,是以相应的二进制数存放或者是以BCD码的形式存放。因此,假如我们想将PC机中读取的日期时间显示到.EXE的界面中,必须将从中读取的二进制数转换为ASCII码。本设计是先将二进制数转换为十进制数,再将十进制数转换为ASCII码的,使其在屏幕上显示出来。由于调用该小程序段的显示数值都是十位数或个位数,所以该段小程序的设计思绪是使用减法,记录需要转换的数值中有多少10、1,即为十进制数中的十、个位上的数,然后将十进制数转换为ASCII码输出。一方面,在数据段中已经设计好了被减数,即const内的数据,用需要数据转换的数据已经在之前的数据中赋值给了ax,使用subax,[si]语句实现上述的减法,若不够减,则需要反复减,并累计次数,直至不够减为止,累计的次数即为该数据十位数的数值,此时 依旧通过ordI,30h语句转换为ASCII码,并将转换后的数据都存储于bx中。(2)日期时钟显示功能 9号DOS功能调用可实现日期时钟显示功能,由于需要在.EXE界面显示提醒信息mess1中的相关内容,因此调用BIOS功能,置光标于0行0列,将ah赋值2即可置光标,dh的赋值表达行,dI的赋值表达列,使用Ieadx,messI语句,将messI的偏移地址赋予dx,使用movah,9和int21h语句完毕DOS的9号功能调用,这样.EXE界面就出现了mess1中的相关内容;再使用BIOS功能调用,将光标置于17行21列显示日期时间的提醒信息timeis,方法与上述介绍的相同,最后即可将光标置于17行37列,显示PC机的日期和时间。2.2.2上下课打铃功能的设计2.2.2.1上下课打铃设计流程图如图是上下课打铃设计的大体思绪,先于数据段设存储缓冲区,存储设定的响铃时间,将响铃时间由二进制换成ASCII代码,调用DOS的显示功能,显示响铃时间,再调PC机时间与设定的响铃时间比较,相同时响铃,不同时跳转。数据段设存储缓冲区数据段设存储缓冲区响铃时间数值转换界面显示响铃时间设PC机时间与响铃比较时间相等?响铃否 是图2-2-22.2.2.2上下课打铃设计环节分析本部分设计中,先在数据段开辟了四段缓冲区,分别是bel响铃提醒信息,tbufl响铃时间存储区,timeh设定好的响铃时间中小时的存储区,timem设定好的响铃时间中的分钟存储区,进入代码段后,便开始将timeh和timem中设定好的响铃时间由二进制数转换成ASCII代码,并将转换后的信息存于tbufl,对于数制转换的内容上文中已有介绍,这里便不再反复了。这是tbufl中已经包含我最初设定的二十个响铃时间,使用DOS功能调用中的9号显示功能即可将上述二十个响铃时间显示在界面上。随后需要调用PC机的时间与我设定的时间进行比较,若相等则响铃,响铃后返回,若时间不等同样也返回,去反复上述的显示、调用以及比较的过程。接下来我会针对PC机时间与我设定的时间比较的程序和响铃程序做较为细致的分析,以使该设计更加清楚明了。(1)PC机时间与设定响铃时间比较一方面我将存储响铃时间的timeh和timem的偏移地址分别赋给了si和di,随后使用DOS功能调用语句中的movah,2ch以及int21h来完毕PC机时间的读取,对于PC机时间的读取,系统自动将小时、分钟分别存于ch、cl中。接下来便开始比较,先假设设定的响铃均已比较完,缓冲区后区时间为空,则应当先将PC机时间与设定好的响铃时间比较,若相同则跳转响铃程序,若不相等则继续进行比较直至将设定好的响铃时间均比较完毕,然后进行后续工作。(2)响铃功能设计分析IBMPC机系列计算机的发声系统重要由定期器/计数器8253/8254芯片来提高音频信号,最后通过并行接口芯片8255的PB端口控制驱动电路使系统的扬声器发声。8253/8254芯片共有3个独立的计数通道,其中2号通道分派给系统的扬声器频率控制,它的I/.O端口地址为42H,8253/8254的工作方式与音屡屡率均由8253/8254的控制寄存器(I/O端口地址42H)控制。并且8253/8254有6种工作方式,对于扬声器发声总是选用方式3,因此为了让发生器工作,需要通过moval,0b6h和out43h,al来完毕音屡屡率的设立,通过moval,03h及out61h,al来开扬声器,实现响铃。2.2.3灯光显示功能的设计2.2.4修改响铃时间功能的设计2.2.4.1修改响铃时间设计流程图图2-数据段设有存储时间缓冲区调用键盘输入功能数据段设有存储时间缓冲区调用键盘输入功能计算修改几个响铃键盘输入时间代替原时间计算从第几个开始修改图2-2-32.2.4.2修改响铃时间设计环节分析在本模块设计中,一方面需要在数据段中开辟出修正提醒信息和存储时间的缓冲区,当接受到手控修正响铃时间的信号时,调用键盘输入功能,该功能将扫描到的键盘信息均存储于缓冲区内,第一位为缓冲区位数,第二位为字符个数,将字符个数除以6即可得到修正响铃的时间个数。由于键盘输入的前两位数字的意义是冲第几个响铃初开始修正,因此需要将前两位数由ASCII码转换成十进制数,将转换得到的数据存储,对于键盘输入时间替代原响铃时间功能的实现,需要根据前面得到的数据,先跳转至修正响铃时间的地址处,然后将键盘输入的响铃时间覆盖原时间,直至完毕上述得到修正响铃的个数为止。在模块的设计中计算修改几个响铃和应从第几个开始修改这两个小部分较为关键,下面是其更为具体的介绍。(1)计算修改几个响铃调用键盘输入功能,字符串存入缓冲区,第一位为缓冲区位数,第二位为字符个数,自第三位开始存储输入字符串,取缓冲区内第二个数值将其存于ax中,由于键盘输入的数据均为00,00这种形式,所以每两个响铃时间均隔五个字符,因此movcx,06h和divcx两语句即可得到修改响铃时间的个数。(2)计算从第几个开始修改调出键盘输入的前两位数字即可但由于键盘扫描的数字是以ASCII码形式表达,而计算机中以二进制数形成存储,因此需要通过subdh,30h这种类似的语句进行数字转换,并通过地址循环递加的方式,找到需要修正响铃时间的地址。2.2.5模拟手动控制功能的设计2.2.5.1模拟手动控制设计流程图图2-2-4介绍了本模块设计的大体思绪,调用键盘I/O中断功能号1,进行键盘扫描,判断当扫描到Esc时,退出界面显示,为S或s实现响铃功能,即手动控制响铃。为C或c时,跳转至修改响铃时间的程序段。开始开始扫描键值修改响铃时间响铃退出为Esc为C或c为S或s 是否 是 否 否是 图2-2-42.2.5.2模拟手动控制设计环节分析模拟手动控制重要实现的功能是只要按下键盘的S或s键,便开始响铃,因此在设计时先要调用键盘I/O中断功能号1,获取键值到AL,然后将键值AL与lbh作比较,通过cmpal,lbh和jzquit判断是否按下Esc键,若是,则跳出.EXE的界面,若不是,则将键值AL与S、s分别作比较,通过cmpal,S以及cmpal,s和jzshou判断是否按下S或s键,若是跳转至响铃位置,即实现手动控制响铃的功能,若不是再通过cmpal,C以及cmpal,c和jzcorrect判断是否按下C或c键,若是则跳转至修改响铃时间的位置。第3章可编程作息时间控制器的protues仿真3.1仿真结果当K1被按下一次后,“小时”显示的数码管就闪烁,其他位就没有变化,闪烁就说明可以对该位上进行“小时”上调整;当K1被按下两次后,“分钟”显示的数码闪烁并可以调整;当K1被按下三次后,“秒”显示的数码闪烁并可以调整。K2,K3分别作为调整时间时前进和后退操作。P2最后接的引脚到LED发光二极管上,当按键被按下时,该发光二级管就会被点亮。P3上接了一个喇叭和开关,当一定期间到了时,喇叭就会发声,开关可以控制喇叭发声。3.2性能及误差分析该作息时间控制器有四个按键:K1,K2,K3。初始加电时数码管显示时钟计数初值并运营。按K1键进行校时,可以分别按K2和K3键进行对时及分进行单独校时,使其校正到标准时间。时钟正常显示运营状态时,按K2键显示闪烁并进行定期时间设立,按K1键和K3进行分和时的定期时间设定。该电路显示的误差重要由晶振自身的误差所导致,晶振的误差约为0.0001~0.000001。在软件的编程过程中所产生的误差比较小,此外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累计误差很小,可以忽略。综合以上分析,本次设计时钟误差较小,能得到比较抱负结果,性能稳定。课程设计体会在整个设计过程中,充足发挥人的主观能动性,自主学习,学到了许多没学到的知识。这次课程设计的制作过程是我的一次再学习,再提高的过程。在课程设计中我充足地运用了大学期间所学到的知识。我从资料的收集中,掌握了很多单片机、LED数码管的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机、LED的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在此后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提高,也会对我未来的学习和工作有很大的帮助。在本次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我的耐心,做什么事都在有耐心。本次课程设计中学了很多很多东西,这是最重要的。参考文献:[1]胡辉编著.单片机原理与应用华北水利水电出版社,2023.源程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharucharnum=0; //记录按键KEY1的次数的变量uchartemp=0; //记录定期器0中断次数的变量ucharcount=0; //记录定期器1中断次数的变量ucharaa,i,j;ucharhour,min,sec;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit_led=P2^7;sbitkey1=P2^0;sbitkey2=P2^1;sbitkey3=P2^2;sbitSPK=P3^0;sbitK1=P3^7;voiddelay(uintz); //延时函数voiddisplay(uchara,ucharb,ucharc,uchard,uchare,ucharf,ucharaa); //显示函数voidread_key(); //读按键函数voidled(); //voidAlarm(uchart);/******************主函数*******************/voidmain(){ P2=0xff; hour=6; min=29; sec=50; TMOD=0x11; //同时控制定期器T1和T0采用模式1工作(16位计数器) TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; TR0=1; //运营控制位 TR1=1; SPK=0;while(1){ if((hour==6)&(min==30)&(sec==0)||(hour==8)&(min==00)&(sec==0)||(hour==9)&(min==50)&(sec==0)||(hour==10)&(min==00)&(sec==0)||(hour==11)&(min==50)&(sec==0)||(hour==14)&(min==00)&(sec==0)||(hour==15)&(min==50)&(sec==0)||(hour==16)&(min==00)&(sec==0)||(hour==17)&(min==50)&(sec==0)||(hour==23)&(min==00)&(sec==0)) {if(K1==1){Alarm(90); Alarm(120);Alarm(90); Alarm(120);} } read_key(); if(temp>=20) { temp=0; sec++; if(sec>=60) { sec=0; min++; if(min>=60) { min=0; hour++; if(hour>=24) { hour=0; } } } } if(count<=15) display(table[hour/10],table[hour%10],table[min/10], table[min%10],table[sec/10],table[sec%10],0xff); if(count>15) display(table[hour/10],table[hour%10],table[min/10], table[min%10],table[sec/10],table[sec%10],0x00); }}/******************显示函数*******************/voiddisplay(uchara,ucharb,ucharc,uchard,uchare,ucharf,ucharaa){if(num==0) { P1=0x24&aa; P0=0xbf; delay(2); } else { P1=0x24; P0=0xbf; delay(2); }if(num==1) { P1=0x01&aa; P0=a; delay(2); } else { P1=0x01; P0=a; delay(2); }//hourif(num==1) { P1=0x02&aa; P0=b; delay(2); } else { P1=0x02; P0=b; delay(2); }//hourif(num==2) { P1=0x08&aa; P0=c; delay(2); } else { P1=0x08; P0=c; delay(2); }//minif(num==2) { P1=0x10&aa; P0=d; delay(2); } else { P1=0x10; P0=d; delay(2); }//minif(num==3) { P1=0x40&aa; P0=e; delay(2); } else { P1=0x40; P0=e; delay(2); }//secif(num==3) { P1=0x80&aa; P0=f; delay(2); } else { P1=0x80; P0=f; delay(2); }//sec }/**************定期器0中断函数***************/voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; temp++; }/**************定期器1中断函数***************/voidtimer1()interrupt3{ TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++; if(count>=20) count=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论