可编程作息时间控制器设计单片机原理课程设计 推荐.docx
《可编程作息时间控制器设计单片机原理课程设计 推荐.docx》由会员分享,可在线阅读,更多相关《可编程作息时间控制器设计单片机原理课程设计 推荐.docx(51页珍藏版)》请在冰豆网上搜索。
可编程作息时间控制器设计单片机原理课程设计推荐
扬州大学能源与动力工程学院
课程设计报告
题目:
可编程作息时间控制器设计
课程:
单片机原理及应用课程设计
专业:
电气工程及其自动化
第一部分
任
务
书
《单片机原理及应用》课程设计任务书
一、课题名称
详见《单片机课程设计题目
(一)》:
主要是软件仿真,利用Proteus软件进行仿真设计并调试;
《单片机课程设计题目
(二)》:
主要是硬件设计,利用单片机周立功实验箱进行设计并调试。
二、课程设计目的
课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。
单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。
为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
三、课程设计内容
设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
1.系统方案设计:
综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。
2.硬件电路设计:
对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。
3.软件设计:
根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。
4.调试:
在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。
四、课程设计要求
设计一个以单片机为核心的可编程作息时间控制器:
按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示),同时具备日期和时钟显示。
五、进度安排
序号
内容
天数
1
布置任务,熟悉课题要求
0.5
2
总体方案确定,硬件电路设计
1.5
3
软件编程
1.5
4
Proteus仿真,或在周立功实验箱上调试
2
5
总结,撰写课程设计报告
1.5
七、课程设计报告内容:
总结设计过程,写出设计报告,设计报告具体内容要求如下:
1.课程设计的目和设计的内容。
2.课程设计的要求。
3.控制系统总框图及系统工作原理。
4.控制系统的硬件电路连接图,电路的原理。
5.软件设计流程图及其说明。
6.电路设计,软件编程、调试中遇到的问题及分析解决方法。
7.实验结果及其分析。
8.体会。
第二部分
课
程
设
计
报
1课题简介
1.1课题目的
由单片机AT89C51芯片和LCD显示器,辅以必要的的电路,构成一个可编程作息时间控制器。
电子钟采用采用单片机来完成,LCD显示“时”,“分”,LED闪动来做秒计数,定时时间到能发出相应的提示,从而能够实现作息时间控制。
现在是自动化高度发达的时代,特别是电子类产品都是靠内部的控制电路来实现对产品的控制,达到自动运行的目的,这就需要我们这里要做的设计中的电器元件及电路的支持。
1.2课题要求
(1)在keiluVision和proteus上编写软件完成设计。
(2)以AT89C51单片机为核心结合字符型LCD显示器的可编程作息时间控制器。
(3)按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示),同时具备日期和时钟显示。
(4)上机调试程序。
(5)写出设计报告。
2可编程作息时间控制器方案设计
2.1系统总体介绍
可编程作息时间控制器是由简单的一路闹钟的基础上增加至四路可调闹钟,从而实现依次执行作息时间的提醒任务。
系统主要是由时间程序和闹钟程序所构成,由显示模块、时钟模块以及闹钟模块三大部分组成。
其中时钟运算模块要对时、分、秒的数值进行操作,并且秒算到60时,要自己清零并向分进1;分算到60时,要自己清零并向时进1,时算到24时,要清零,这样,才能循环记时。
并在不同状态下使得四个按键有着不同的功能,从而实现系统时间的调整,同时可以在不同状态下可以调整闹钟的时间。
当定时到达时LCD将显示出现在的闹钟是哪一路,响铃一分钟,并可以通过按键提前结束闹钟,恢复到时间显示状态。
2.2系统整体框图
2.3系统工作原理
使用AT89C51单片机结合字符型LCD显示器设计一个简易的可编程作息时间控制器,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。
程序执行后工作指示灯LED闪动,表示程序开始执行,同时显示系统时间。
作息时间控制器是由4路可调闹钟组成,从而实现打铃等功能。
当四路闹钟中的任一路到时,均会点亮灯、打铃。
其中操作键K1~K4的功能分别为:
设置限制的时间/时的调整、显示闹钟设置的时间/分的调整、设置闹钟的时间/设置完成、闹钟更换。
3可编程作息时间控制器硬件电路及芯片介绍
系统主要是由AT89C51单片机、1602LCD液晶显示器以及其他重要元件组成,按键作为系统的控制输入端,可以进行时间、闹钟等内容的设定,并通过液晶显示器显示出时间等内容。
3.1AT89C51单片机
本设计的核心硬件就是8051芯片,这里选择了AT89C51,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3.1AT89C51引脚图
引脚及其功能:
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
P1.0口接K1按键,P1.1口接K2按键,P1.2口接K3按键,P1.3口接K4按键,P2.0口接RS口,P2.1口接RW口,P2.2口接E口,P2.3口接发光二极管D2阳极,P2.4口接发光二极管D1阳极,P2.5口接电阻R3,P3口的8个口依次和LCD的数据口D0~D7.
3.21602LCD液晶显示器
LM016L液晶模块采用HD44780控制器。
HD44780具有简单而功能较强的指令集,可以实现字符移动、闪烁等功能。
LM016L与单片机MCU(MicrocontrollerUnit)通讯可采用8位或者4位并行传输两种方式。
HD44780控制器由两个8位寄存器、指令寄存器(IR)和数据寄存器(DR)、忙标志(BF)、显示数据RAM(DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM(CGRAM)、地址计数器(AC)。
IR用于寄存指令码,只能写入不能读出;DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据。
BF为1时,液晶模块处于内部处理模式,不响应外部操作指令和接受数据。
DDRAM用来存储显示的字符,能存储80个字符码。
CGROM由8位字符码生成5*7点阵字符160种和5*10点阵字符32种,8位字符编码和字符的对应关系,可以查看参考文献[3]中的表4。
CGRAM是为用户编写特殊字符留用的,它的容
量仅64字节。
可以自定义8个5*7点阵字符或者4个5*10点阵字符。
AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或者CGRAM单元。
LM016L液
图3.2LCD1602引脚图
晶模块的引脚功能见表:
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
将respack-8的1口接电源,2~8口顺序和P3口相连接,并和LCD的数据口D1~D7相接,VSS接地,VDD接电源,VEE接滑动变阻器,RS口接P2.0口,RW口接P2.1口,E口接P2.2口。
3.3其他重要元件
图3.3独立式键盘
(1)独立式键盘的接口电路:
在单片机应用系统中,有时只需要几个简单的按键向系统输入信息。
这时,可将每个按键接在一根I/O接口线上,这种方式的连接称为独立式键盘。
每个独立式按键单独占有一根I/O接口线,每根I/O接口线的工作状态不会影响到其他I/O接口线。
这种按键接口电路配置灵活,硬件结构简单,但每个按键必须占用一根I/O接口线,I/O接口线浪费较大。
故只在按键数量不多时采用这种按键电路。
在此电路中,按键输入都采用低电平有效。
上拉电阻保证了按键断开时,I/O接口线有确定的高电平。
当I/O接口内部有上拉电阻时,外电路可以不配置上拉电阻。
(2)蜂鸣器:
将蜂鸣器的一端电源,另一端接至晶闸管集电极,当需要闹钟响时,P2.5将发出有规律的电平使得晶闸管导通,从而使得蜂鸣器发出声响。
(3)respack-8:
上拉电阻
键K1~K4分别与单片机的P1.0~P1.3口相接。
3.4硬件电路设计图
图3.4系统整体电路图
将respack-8的1口接电源,2~8口顺序和P3口相连接,并和LCD的数据口D1~D7相接。
发光二极管D1和P2.4口相连接用以显示秒计时,发光二极管和P2.3口相连接用以显示闹钟时的广播,按键K1~K4分别与单片机的P1.0~P1.3口相接,以实现按键的多功能使用。
4可编程作息时间控制器软件编程设计
可编程作息时间控制器软件编程主要包括系统初始化、系统时间校正、系统时间设定、作息时间设定、响铃处理、逻辑控制以及1602LCD液晶显示,整个程序中响铃的合理处理以及显示部分是核心部分,只有处理好闹钟的及时响应才会使得整个可编程作息时间控制器按照预定的设计进行工作,同时各个模块逻辑上合理分配又将是整个功能实现的基础。
4.1系统初始化
sbitK1=P1^0;
sbitK2=P1^1;
sbitK3=P1^2;
sbitK4=P1^3;
sbitrs=P2^0;
sbitrw=P2^1;
sbitlcden=P2^2;
sbitLED2=P2^3;
sbitled=P2^4;
sbitbeep=P2^5;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
此段程序主要是是定义电路的外部接口,包括K1~K4按键,LCD的rs口、rw口、广播控制端LED2、发光二极管控制端led以及蜂鸣器控制端beep。
将定时器0的工作模式选择为工作方式1,同时给定时器装初值,并且开始计数。
4.2系统时间校正
图4.1系统时间校正流程图
程序:
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{aa=0;
miao++;
if(miao==60)
{miao=0;
fen++;
if(fen==60)
{fen=0;
shi++;
if(shi==24)
{shi=0;}
write_sfm(9,shi);
write_sfm(12,fen);}}
首先初始化时定时器开始工作,当计时时间到时进入中断服务,由于方式1没有自动装初值的功能,因此需再次装入初值,每一次所定的时间为50ms,通过软件计数的方法,当计数达到20次时刚好1秒钟,如果计数不到20次,则再次给定时器装入初值,直到计数达到20次,把计数初值清零,并再次向计数器装初值,重复执行之前操作,同时分加一,并显示,如果分为60时则不显示,先清零然后将时加一,再显示分,如果时不是24时,则直接通过LCD显示出来,如果时刚好为24时,则现需要清零,然后在用LCD显示出来。
4.3系统时间设定
图4.2改变小时流程图图4.3改变分钟流程图
程序:
if(K1==0)
while(!
K1)
TR0=0;
if(K1==0)
shi++;
if(shi==24)shi=0;
if(K2==0)
while(!
K2);
fen++;
if(fen==60)
fen=0;
if(K3==0)
TR0=1;
当K1被按下时,则修改系统的的时间,同时定时器停止工作。
开始时,光标停留在分钟上,当再次按下K1时,光标将会跳到小时并且小时位的时间将会加一,如果时位的数等于24时,则自动清零,从零开始再往上加,如果按下K2键按下则分钟自动加一,如果分钟达到60时则自动清零,从零开始往上加,并通过LCD显示出此时的状态。
当按下K3键时,则退出系统时间的更改,并启动定时器工作,开始
通过LCD在第二行显示出修改后的时间。
此程序主要的作用就是通过人为的方法来设定系统的时间,使得系统时间满足实际需要。
4.4作息时间设定
图4.4改变闹钟定时小时流程图
图4.5改变闹钟定时分钟流程图
程序:
if(K3==0)
while(!
K3);
write_sfm(12,fen1);
write_sfm(9,shi1);
if(K2==0)
{write_sfm(12,fen1);
write_sfm(9,shi1);
while(!
K2);
write_sfm(12,fen);
write_sfm(9,shi);
if(K1==0)
while(!
K1);
shi1++;
if(shi2==24)
shi1=0;
write_sfm(9,shi1);
if(K2==0)
{while(!
K2);
fen1++;
if(fen1==60)
fen1=0;
write_sfm(12,fen1);
if(K3==0)
write_sfm(12,fen);
write_sfm(9,shi);
由于可编程时间控制器是由四路闹钟构成的,所以只要通过逻辑上的先后顺序便可以实现,并且这四路闹钟设定上都是相同的,因此在这里将四路闹钟选择其中的第一路做介绍。
当通过K4键进入闹钟设定电路后,如果处于广播的闹钟时间设定时,此时如果没有按下任何开关键,LCD将显示此时的闹钟标志“GB”并且再其后面显示现在的系统时间,在没有按下K3键之前,如果按下K2键,则LCD将显示此处闹钟时间,并且在其前面有此路标志,如“GB”,松开按键K2时,LCD将显示之前的状态;如果按下首次按下K3键,则开始修改闹钟的时间,此时光标在分钟上闪烁,此时按下K2键则修改闹钟的分钟,如果分等于60时,则自动清零,否则继续往上加;如果按下K1键则修改闹钟的小时,如果小时数等于24,则自动清零,否则继续往上加。
当第二次按下K3键,则完成次闹钟的设定,并显示之前的状态,如果继续按K4键则切换到下一路闹钟,也可以进行上述的操作,或者返回系统时间界面。
4.5响铃处理
图4.6响铃处理流程图
程序:
if((((fen==fen1)&&(shi==shi1))||((fen==fen2)&&(shi==shi2))||((fen==fen3)&&(shi==shi3))||((fen==fen4)&&(shi==shi4)))&&(flag2==1))if((fen==fen1)&&(shi==shi1)&&(flag2==1))
if((((fen==fen1)&&(shi==shi1)&&(flag2==0))||((fen-1==fen1)&&(shi==shi1)))&&(flag4==0))
if((fen==fen2)&&(shi==shi2)&&(flag2==1))
if((((fen==fen2)&&(shi==shi2)&&(flag2==0))||((fen-1==fen2)&&(shi==shi2)))&&(flag4==0))
if((fen==fen3)&&(shi==shi3)&&(flag2==1))
if((((fen==fen3)&&(shi==shi3)&&(flag2==0))||((fen-1==fen3)&&(shi==shi3)))&&(flag4==0))
if((fen==fen4)&&(shi==shi4)&&(flag2==1))
if((((fen==fen4)&&(shi==shi4)&&(flag2==0))||((fen-1==fen4)&&(shi==shi4)))&&(flag4==0))
if(K4==0&&flag3==0)
当四个定时闹钟任意一路到达时,在没有按下响铃终止键K4时,flag2都等于1,此时闹钟响起,同时使得flag3等于0。
在闹钟响闹完一个周期后将继续向下执行,并且根据以后程序的判定是哪一路闹钟在响闹,执行这一路所要求的内容,但是不论哪一路时间到都会响铃并且灯闪,不同的是根据判断选择出时间到的那一路并通过LCD显示出来闹钟时间及某路闹钟;此时若按下K4键,则使得flag2等于0,当进行是否闹钟响闹时将会不在响应,也就是闹钟被手动关闭,从而不需要一定要响铃一分钟后在关闭闹钟,实现手动关断闹钟的功能。
当闹钟关断过后将及时跳出,并且使得LCD显示当前的时间。
使得可编程时间控制器能够在响铃时能够显示当前的闹铃及时间,同时可以手动关断闹铃,并且当闹铃关断过后可以跳出当前显示返回到系统时间。
4.6逻辑控制
图4.7逻辑控制流程图
程序:
while
(1)
{if((K4==0)&&(flag3==1))
{K4num++;
if(K4num==5)
K4num=0;
if(K4num==0)
{time();
flag4=0;}
if(K4num==1)
{guangbo();
flag4=1;}
if(K4num==2)
{shangke();
flag4=1;}
if(K4num==3)
{xiake();
flag4=1;}
if(K4num==4)
{dengkong();
flag4=1;}
clock();}}
只有当没有一路闹钟响闹时才会执行此程序,因为在闹钟响闹时K4键将会作为闹钟的停止的功能键使用,所以只有在没有闹钟响闹时,K4键才会早为闹钟的更换,同时变量K4num将作为K4键所处的闹钟或者系统时间区别出来,以实现逻辑上的合理。
系统刚启动时,按键K4处于系统时间状态,在此状态下可以利用之前所介绍的功能进行所需要的修改,当第一次按下K4键时,就会进入广播定时的控制口,此时可以根据需要修改所要定的时间,并可以显示自己所定的闹钟时间,再次按下K4键时,将会进入上课定时的闹钟,和之前的闹钟一样,可以进行相同的操作,当再次按下K4