1、 . ##大学能源与动力工程学院 题 目: 可编程作息时间控制器设计 课 程: 单片机原理及应用课程设计 专 业: 电气工程及其自动化 班 级: 姓 名: 学 号: 第 一 部 分 任 务 书 《单片机原理及应用》课程设计任务书 一、课题名称 详见《单片机课程设计题目(一)》:主要是软件仿真,利用Proteus软件进行仿
2、真设计并调试; 《单片机课程设计题目(二)》:主要是硬件设计,利用单片机周立功实验箱进行设计并调试。 二、课程设计目的 课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。 《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂
3、上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。 三、课程设计内容 设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。 1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设
4、计。 2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。 3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。 4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。 四、课程设计要求 设计一个以单片机为核心的可编程作息时间控制器:按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示),同时具备日期和时钟显示。 五、进度安排 序号 内容 天数 1 布置任务,熟悉课题要求
5、 0.5 2 总体方案确定,硬件电路设计 1.5 3 软件编程 1.5 4 Proteus仿真,或在周立功实验箱上调试 2 5 总结,撰写课程设计报告 1.5 七、课程设计报告内容: 总结设计过程,写出设计报告,设计报告具体内容要求如下: 1.课程设计的目和设计的内容。 2.课程设计的要求。 3.控制系统总框图及系统工作原理。 4.控制系统的硬件电路连接图,电路的原理。 5.软件设计流程图及其说明。 6.电路设计,软件编程、调试中遇到的问题及分析解决方法。 7.实验结果及其分析。 8.体会。 第 二 部 分
6、 课 程 设 计 报 目 录 1 课题简介1 1.1 课题目的1 1.2 课题要求1 2 可编程作息时间控制器方案设计1 2.1 系统总体介绍1 2.2 系统整体框图1 2.3系统工作原理1 3可编程作息时间控制器硬件电路及芯片介绍2 3.1 AT89C51单片机2 3.2 1602LCD液晶显示器3 3.3 其他重要元件4 3.4 硬件电路设计图5 4 可编程作息时间控制器软件编程设计5 4.1 系统初始化5 4.2 系统时间校正6 4.3 系统时间设定7 4.4 作息时间设定7 4.5 响铃处理9 4.6 逻辑
7、控制10 4.7 1602LCD液晶显示11 5 实验与结果分析11 5.1 实验的调试11 5.2 实验的结果12 5.3 实验的问题14 6 小结与体会15 Word. 1 课题简介 1.1课题目的 由单片机AT89C51芯片和LCD显示器,辅以必要的的电路,构成一个可编程作息时间控制器。电子钟采用采用单片机来完成,LCD显示“时”,“分”,LED闪动来做秒计数,定时时间到能发出相应的提示,从而能够实现作息时间控制。现在是自动化高度发达的时代,特别是电子类产品都是靠内部的控制电路来实现对产品的控制,达到自动运行的目的,这就需要我们这里要做的设计中
8、的电器元件及电路的支持。 1.2 课题要求 (1) 在keil uVision 和proteus上编写软件完成设计。 (2) 以AT89C51单片机为核心结合字符型LCD显示器的可编程作息时间控制器。 (3) 按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示),同时具备日期和时钟显示。 (4) 上机调试程序。 (5) 写出设计报告。 2 可编程作息时间控制器方案设计 2.1 系统总体介绍 可编程作息时间控制器是由简单的一路闹钟的基础上增加至四路可调闹钟,从而实现依次执行作息时间的提醒任务。系统主要是由时间程序和闹钟程序所构成,由显示模块、时钟模块以及闹钟
9、模块三大部分组成。其中时钟运算模块要对时、分、秒的数值进行操作,并且秒算到60时,要自己清零并向分进1;分算到60时,要自己清零并向时进1,时算到24时,要清零,这样,才能循环记时。并在不同状态下使得四个按键有着不同的功能,从而实现系统时间的调整,同时可以在不同状态下可以调整闹钟的时间。当定时到达时LCD将显示出现在的闹钟是哪一路,响铃一分钟,并可以通过按键提前结束闹钟,恢复到时间显示状态。 2.2 系统整体框图 LCD显示 扬声器 和灯闪 广播 单片机AT89C51 按 键 2.3系统工作原理 使用AT89C51单片机结合字符型LCD显示器设
10、计一个简易的可编程作息时间控制器,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。程序执行后工作指示灯LED闪动,表示程序开始执行,同时显示系统时间。作息时间控制器是由4路可调闹钟组成,从而实现打铃等功能。当四路闹钟中的任一路到时,均会点亮灯、打铃。其中操作键K1~K4的功能分别为:设置限制的时间/时的调整、显示闹钟设置的时间/分的调整、设置闹钟的时间/设置完成、闹钟更换。 3可编程作息时间控制器硬件电路及芯片介绍 系统主要是由AT89C51单片机、1602LCD液晶显示器以及其他重要元件组成,按键作为系统的控制输入端,可以进行时间、闹钟等内容的设定,并通过液晶显示器显示出
11、时间等内容。 3.1 AT89C51单片机 本设计的核心硬件就是8051芯片,这里选择了AT89C51,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
12、 图3.1 AT89C51引脚图 引脚及其功能: P0口:P0口为一个8位漏级开路双 向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLAS
13、H编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接
14、收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: P3口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信
15、号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN
16、外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/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按
17、键,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.2 1602LCD液晶显示器 LM016L 液晶模块采用HD44780 控制器。HD44780 具有简单而功能较强的指令集,可以实现字符移动、闪烁等功能。LM016L 与单片机MCU(Microcontroller Unit)通讯可采用8 位或者4 位并行传输两种方式。HD44780 控制器由两个8 位寄存器、指令寄存器(IR)和数据寄存器(DR)、忙标志(BF)、显示数
18、据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 字节
19、可以自定义8 个5*7 点阵字符或者4 个5*10 点阵字符。AC 可以存储DDRAM 和CGRAM的地址,如果地址码随指令写入IR,则IR 自动把地址码装入AC,同时选择DDRAM 或者CGRAM 单元。LM016L 液 图3.2 LCD1602引脚图 晶模块的引脚功能见表: 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写
20、信号线,高电平时进行读操作,低电平时进行写操作。当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)独立式键盘的接口电路
21、在单片机应用系统中,有时只需要几个简单的按键向系统输入信息。这时,可将每个按键接在一根I/O接口线上,这种方式的连接称为独立式键盘。每个独立式按键单独占有一根 I/O接口线,每根I/O接口线的工作状态不 会影响到其他 I/O接口线 。这种按键接口电路配置灵活,硬件结构简单,但每个按键必须占用一根I/O接口线,I/O接口线浪费较大。故只在按键数量不多时采用这种按键电路。在此电路中,按键输入都采用低电平有效。上拉电阻保证了按键断开时,I/O接口线有确定的高电平。当I/O接口内部有上拉电阻时,外电路可以不配置上拉电阻。 (2) 蜂鸣器:将蜂鸣器的一端电源,另一端接至晶闸管集电极,当需要闹钟响时,
22、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 可编程作息时间控制器软件编程设计 可编程作息时间控制器软件编程主要包括系统初始化、系统时间
23、校正、系统时间设定、作息时间设定、响铃处理、逻辑控制以及1602LCD液晶显示,整个程序中响铃的合理处理以及显示部分是核心部分,只有处理好闹钟的及时响应才会使得整个可编程作息时间控制器按照预定的设计进行工作,同时各个模块逻辑上合理分配又将是整个功能实现的基础。 4.1 系统初始化 sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2; sbit K4=P1^3; sbit rs=P2^0; sbit rw=P2^1; sbit lcden=P2^2; sbit LED2=P2^3; sbit led=P2^4; sbit beep=P
24、2^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; m
25、iao++; 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次,把计数初值清零,并再次向计数器装初值,重复执行之前操作,同时分加一,并显
26、示,如果分为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
27、1; 当K1被按下时,则修改系统的的时间,同时定时器停止工作。开始时,光标停留在分钟上,当再次按下K1时,光标将会跳到小时并且小时位的时间将会加一,如果时位的数等于24时,则自动清零,从零开始再往上加,如果按下K2键按下则分钟自动加一 ,如果分钟达到60时则自动清零,从零开始往上加,并通过LCD显示出此时的状态。当按下K3键时,则退出系统时间的更改,并启动定时器工作,开始通过LCD在第二行显示出修改后的时间。此程序主要的作用就是通过人为的方法来设定系统的时间,使得系统时间满足实际需要。 4.4 作息时间设定 图4.4 改变闹钟定时小时流程图
28、 图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_s
29、fm(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”并且再其后面显示现在的系
30、统时间,在没有按下K3键之前,如果按下K2键,则LCD将显示此处闹钟时间,并且在其前面有此路标志,如“GB”,松开按键K2时,LCD将显示之前的状态;如果按下首次按下K3键,则开始修改闹钟的时间,此时光标在分钟上闪烁,此时按下K2键则修改闹钟的分钟,如果分等于60时,则自动清零,否则继续往上加;如果按下K1键则修改闹钟的小时,如果小时数等于24,则自动清零,否则继续往上加。当第二次按下K3键,则完成次闹钟的设定,并显示之前的状态,如果继续按K4键则切换到下一路闹钟 ,也可以进行上述的操作,或者返回系统时间界面。 4.5 响铃处理
31、 图4.6 响铃处理流程图 程序: if((((fen==fen1)&&(shi==shi1))||((fen==fen2)&&(shi==shi2))||((fen==fen3)&&(shi==shi3))||( (fen==fen4)&&(shi==shi4)))&&(flag2==1))
32、 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)&&(
33、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,此时闹钟响起,同时
34、使得flag3等于0。在闹钟响闹完一个周期后将继续向下执行,并且根据以后程序的判定是哪一路闹钟在响闹,执行这一路所要求的内容,但是不论哪一路时间到都会响铃并且灯闪,不同的是根据判断选择出时间到的那一路并通过LCD显示出来闹钟时间及某路闹钟;此时若按下K4键,则使得flag2等于0,当进行是否闹钟响闹时将会不在响应,也就是闹钟被手动关闭,从而不需要一定要响铃一分钟后在关闭闹钟,实现手动关断闹钟的功能。当闹钟关断过后将及时跳出,并且使得LCD显示当前的时间。使得可编程时间控制器能够在响铃时能够显示当前的闹铃及时间,同时可以手动关断闹铃,并且当闹铃关断过后可以跳出当前显示返回到系统时间。 4.6
35、逻辑控制 图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(); f
36、lag4=1; } clock();}} 只有当没有一路闹钟响闹时才会执行此程序,因为在闹钟响闹时K4键将会作为闹钟的停止的功能键使用,所以只有在没有闹钟响闹时,K4键才会早为闹钟的更换,同时变量K4num将作为K4键所处的闹钟或者系统时间区别出来,以实现逻辑上的合理。系统刚启动时,按键K4处于系统时间状态,在此状态下可以利用之前所介绍的功能进行所需要的修改,当第一次按下K4键时,就会进入广播定时的控制口,此时可以根据需要修改所要定的时间,并可以显示自己所定的闹钟时间,再次按下K4键时,将会进入上课定时的闹钟,和之前的闹钟一样,可以进行相同的操作,当再次按下K4键时将进入下课闹铃状态,
37、然后将要进入的的是灯光控制定时,此时Knum4为4,当再次按下K4键时,将经过判断清零,重新开始,以此来实现按键K4可以更换闹钟的功能,同时更改闹钟时间的功能。 4.7 1602LCD液晶显示 VSS引脚接地,VDD提供电源,VEE接滑动变阻器来控制液晶屏的对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
38、 程序: void write_(uchar ) {rs=0; rw=0; lcden=0; P3=; lcden=1; lcden=0; } 液晶写命令函数 void write_date(uchar date) {rs=1; rw=0; lcden=0; P3=date; lcden=1; lcden=0; } 液晶写数据函数 当需要将内容显示到LCD显示器上之前,首先要向液晶显示器输入写命令函数,有上硬件分析可以得到LCD液晶显示上一排地址从80H~8FH,一共16位,下面一排地
39、址从C0H~CFH,同样是16位,所以在进行液晶显示之前首先确定要将结果在哪一位上显示,然后在调用液晶写数据函数,只有两者结合使用才会得到想要的结果。 5 实验与结果分析 5.1 实验的调试 设计要求:一个以单片机为核心的可编程作息时间控制器,能够按照给定的时间模拟控制,实现广播、上下课打铃、灯光控制(屏幕显示),同时具备日期和时钟显示。 首先运用Keil软件编辑程序,按上图要生成目标代码文件,不断地调试程序。 联调:加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-17.hex”;在“Clock Frequ
40、ency”栏中输入晶振频率为11.0592MHz。每一小块程序编写过后都进行联调,这样可以及时观察到自己所编的程序是否符合自己的目的,当出现问题时及时处理,可以避免当有大量问题后无法找出错误的地方,可以提高编程的效率,也有利于最终将程序编写出来。 5.2实验的结果 图5.3 广播定时响闹时 图5.4 上课定时响闹 图5.5 下课定时响闹 图5.6 灯控定时响闹 图5.7 上课定时设定 5.3实验的问题 实验中出现问题最多的就是LCD显示,又是显示出乱码,又是是不断闪烁的输入标题,有的则是光标的来来回回闪烁而不是固定在某一位,这些问题基本上都是由于LCD刷新的
41、问题上,有时候由于逻辑上的先后顺序没有做好,有的完全是由于缺少必要的逻辑区分,使得显示在程序执行的过程中LCD不单单刷新了我所需要的内容,也将我此时不需要的内容也刷新出来,所以屏幕上的内容是闪烁的,因此我加了4个基本变量进行控制,以此来实现所需要的刷新。同时整个延时又是非常重要的,在进行按键设定时这个问题就出现了,有时候按一下会会进行几个需要的操作,使得结果不符合我的要求,所以应用刚开始编写程序时不断适当增加延时使得程序渐渐符合要求。 6 小结与体会 通过此次的单片机课程设计让我学到了许多新的知识,让我受益匪浅,其中对1602LCD液晶显示器有了非常深刻的认识。 刚开始分到课题时,我
42、便开始研究这个课题,由于我们的课题是在题目4的基础上改过来的,因此我先研究了一下题目4的要求以及原理,再结合我们的课题让我对这个课题有了一些了解,下午时我们和大多数同学一样先将电路图画了出来,但是当我做完这个课题过后,我很同意老师的意见,不应当立即画电路图,因为我们对整个课题还不是很了解,对于Proteus软件也不懂,结果就是我们用了一下午只画了一X图,而且对于整个课程设计课题的理解毫无帮助。由于我们对课题的理解有困难,不能够将课题所要求的内容完全弄明白,因此我们向李老师寻求帮助,帮我们把我们的课题分析了一下,听过之后我们基本已经理解了这个课题,但是对于具体实施还是没有头路,当我在实验室纠结1
43、602LCD液晶显示器到底是如何工作时,夏老师告诉我Proteus软件中就有相关的例子,于是我便通过自己所找到的资料以及这个例子自学了LCD显示器,由于例子是用c语言写的,所以最终我也选择使用c语言来编写程序,但是在以后我所遇到的困难远远不止这些。首先我要自学相关的c语言,同时我在网上找到了一些相关的资料学习了一下,并结合李老师对课题的分析,让我对这个课题有了自己的思路。首先,我就把我的思路认真的整理下来,然后规划好每一块所要完成的任务,然后再用Keil软件编写出来,在进行联调,每一小步的调试都必须做到没有问题,只有这样在总的联调时不会因为问题太多而做不出来。 在以后的几天里我都在学习和使用
44、c语言,让我对LCD显示器有了更多的认识,但是在整个程序编写过程中问题基本都处在LCD显示上,一遍遍的尝试后总会出现一些问题,曾经我也因为最后的一点点问题想向老师请教,最后自己没有解决的时候甚至想放弃,但是最终我还是坚持下来,并最终完成了程序的基本要求,并且通过了李老师的第一次检查,并对李老师提出的一些不满足的地方进行了修改,但是这些修改在进过之前所设计中遇到的问题来说也挺难得,但是我很快就解决掉了,因为我对自己的程序以及LCD显示器有了好好地认识,从而最后实现了比较好的结果,当李老师验收过后感到非常的高兴,在此我非常感谢李老师对我设计过程中提供的帮助,以及最后对我设计成果的认可。 虽然在这
45、一周半的课程设计中每时每刻都让我在思考我的课题,同时由于相关网络资源的不足曾经使我在用汇编语言还是应用c语言徘徊过,但是当我选择其中一个时我就坚持了下来,并通过不断地努力在不断地更改程序,可以说整个课程设计是非常的痛苦的,因为我曾经想放弃过,但是我最终还是坚持了下来,并通过自己坚持不懈的努力完成此次课题任务。虽然整个课程设计的过程有点痛苦,但是当我看到自己的最终成果时还是很开心,因为我这几天的努力没有白白浪费,培养了我独立思考的能力,提高我的自学以及应用能力,这将是我以后学习生活的非常宝贵的经历。在编写程序的过程中每一块的认真编写才为以后整个程序的完成奠定基础,正如我们在平时的生活中一样,只有
46、不断地积累,才会为以后更大的收获打下坚实的基础,而此次的课程设计就可以当做我的一次小小的积累,可以说这是我大学以来最让我纠结的一次课程设计,也是第一个让我有放弃的念头的课程设计,当我最终调出程序的那一刻让我明白,有时候在那自暴自弃还不如竭尽自己的权力去解决这个问题,在这过程中的确会有许多麻烦,有时会把本来没有的问题弄出来,有时经过一次次的调试还是达不到自己的要求,但是只要我们坚持住,不放弃还是会解决的。 回首这一周多的单片机课程设计,发现自己的程序按模块划分还不是很难,和当初刚刚拿到题目时的各种不明白、各种不懂发现自己真的收获了很多,并且在看看相关类似的课题时能够基本找出基本的设计思路,对于
47、用到602LCD液晶显示器相关的内容能够做出相关 的反应,这个显示器曾经让我绞尽脑汁依旧不懂,曾经让我的程序漏洞百出,但是最终我征服了它,这是我的一大收获。同时在李老师和夏老师的督促下能够按时到达实验室,从而合理的分配和合理使用了课程设计的时间。 最后,我要非常感谢李老师和夏老师在课程设计中提供的帮助,以及李老师最后对我课程设计结果的肯定。 参 考 文 献 [1] X毅刚主编,单片机原理及应用,:高等教育,2004 [2] 陈涛编著,单片机应用及C51程序设计,:机械工业,2008 [3] 周润景主编,PROTEUS入门实用教程,:机械工业
48、2007
[4] 皮大能主编,单片机课程设计指导书,:理工大学,2010
[5] 楼然苗主编, 单片机实验与课程设计(Proteus仿真版),##:##大学, 2010
附录 设计程序
#include
49、flag2,flag3,flag4,flag5,aa,K1num,K2num,K3num,K4num,N;//K1num-K1按键被按下的标记变量,K2num-K2按键被按下的标记变量,K3num=0-K3按键被按下的标记变量 uchar code table[]=" H.I.T CHINA ";//定义初始上电时液晶默认显示状态 uchar code table2[]=" TIME "; uchar code Alarm_0[]=" GBDS "; uchar code Alarm_1[]=" SKDS "; uchar code Alarm_2[]=" X
50、KDS "; uchar code Alarm_3[]=" DKDS "; uchar code Alarm_00[]=" GB "; uchar code Alarm_11[]=" SK "; uchar code Alarm_22[]=" XK "; uchar code Alarm_33[]=" DK "; uchar code deng[]=" LIGHTING "; sbit K1=P1^0;//四个按键 sbit K2=P1^1; sbit K3=P1^2; sbit K4=P1^3; sbit






