单片机课程设计多功能定时器Word

合集下载

基于51单片机设计的多功能数字时钟word格式

基于51单片机设计的多功能数字时钟word格式

天津职业技术师范大学Tianjin University of Technology and Education课程设计专业班级:应电0811学生姓名:指导教师:系别:电子工程学院目录题目 (1)多功能数字钟 (1)1系统设计 (1)1.1设计要求 (1)1.1.1主要性能指标 (1)1.1.2创意部分 (1)1.2总体设计方案 (1)1.2.1概述及设计思路 (1)1.2.2方案论证 (2)2系统组成与工作原理 (3)2.1系统框图及工作原理 (3)2.2单元电路设计 (4)2.2.1MC-51单片机 (4)2.2.2复位电路 (5)2.2.3时钟电路 (6)2.2.4显示电路 (6)2.2.5按键电路 (8)2.2.6温度采集部分 (9)3软件设计 (10)3.1程序流程图 (10)3.2系统程序 (10)4实验与调试 (16)4.1硬件测试 (16)4.2软件测试 (17)4.3实物调试 (18)5附录A 元件清单 (20)6附录B 参考文献 (20)7附录C 电路原理图 (21)题目多功能数字钟1系统设计1.1设计要求设计制作一个24小时制多功能数字钟。

1.1.1主要性能指标1、数字显示年、月、周、日、时、分、秒。

2、温度显示,精确到小数点后1位。

3、时钟误差<5S/24H。

温度误差不超5。

1.1.2创意部分要求准确的进行年、月、周、日、时、分、秒的转换,切换两种显示模式。

1.2总体设计方案1.2.1概述及设计思路该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天),温度调节模块进行了重点设计实现SB0、SB1、SB2、SB3、SB4五个键实现时钟正常显示,调时。

本系统设计大部分功能有软件来实现,使电路简单明了,系统稳定性也得大大提高。

1.2.2方案论证(1)时钟模块【方案一】采用单片机内置定时/计数器。

基于单片机设计的多功能定时器

基于单片机设计的多功能定时器

参考文献(3条) 1.李群芳.黄建 单片微型计算机与接口技术 2001 2.张培仁 基于C语言编程MCS-51单片机原理与应用 2002 3.赵秀珍.单永磊 单片微型计算机原理及其应用 2001
相似文献(10条) 1.学位论文 宋公明 基于高速单片机的加工中心数控系统的硬件研制 2007
数控系统是计算机技术在机械制造领域的一种典型应用,它集计算机、机械加工、微电子和自动控制多项技术于一体,是近年来应用领域中发展 十分迅速的一项高新技术。当今世界各国制造业都已广泛采用控制技术,以提高制造能力和水平;并且世界各工业发达国家将数控技术及数控装备列 为国家战略物资,不仅采取重大措施发展自己的数控技术及其产业? 精尖”的数控关键技术及装备进行封锁。因此在数控技术方面,我们要努力创新 ,研究开发具有自己知识产权的技术和产品。加工中心是一种功能齐全和性能强且性能价格比高,应用广泛的数控机床。随着数控技术的日益进步和 加工中心的广泛应用,加工中心已经成为世界数控机床市场中竞争的主流产品,也是我国众多的机械加工行业技术改造的首选产品之一。其应用量大 面广,市场需求日益旺盛。 如今,随着微电子技术和计算机技术的不断发展,数控系统性能也日臻完善;同时,数控系统的应用领域也日益扩 大。数控技术的关键因素是数控装置,即数控系统信息处理部分的功能、速度和可靠性,控制系统的好坏将直接关系到数控机床的整体性能。同时为 了满足社会经济发展和科技发展的需要,各种档次的数控系统都在朝着高精度、高速度和高可靠性等方向发展。为适应这一发展趋势,本文研制的是 一种基于8位高速SoC单片机的加工中心数控系统,该系统采用的是主、从双MCU进行前后台控制的框架结构。采用这一设计方案,主要是为了保证和满 足加工中心数控系统的实时性和高速、高可靠性的要求。 在论文中,以系统的硬件研制为主线,以高速单片机的相关电路、人机交互和双口 RAM实现双机通讯等有关电路设计和底层驱动软件实现为主要内容,全面、系统地介绍了控制系统研制的一般技术知识和要点。 本论文共有7章 ,按照技术内容主要有以下五个部分。各部分的具体内容和技术要点,以及所包含的章节如下: 第一部分简单地介绍了控制系统的总体结构 ,及其系统板的电路设计。这一部分位于论文的第2章,主要概括地说明了控制系统的设计思想,并对高速单片机这一控制核心作了简单的介绍。 第二部分,为论文的第3章。较详细的介绍和分析了控制系统设计中的各单元电路的要点。其中有高速单片机的电路设计、输入输出接口的电路设计 、液晶显示电路设计以及双口RAM的电路设计等(包括人机交互接口、串行通讯接口、在线编程接口以及I/O扩展接口等)。 第三部分,为论文的 第4章。重点介绍系统单元电路的相关底层驱动软件的设计:高速单片机外部存储器接口配置和低端口交叉开关译码器配置的方法及其程序实现、液晶 显示的有关程序设计、双口RAM实现数据共享的程序设计、I/O接口的程序设计及电机驱动程序设计。第四部分介绍的是一般数控系统的抗干扰技术。 分别说明了相关的硬件抗干扰技术和软件设计的抗干扰措施。位于论文的第5章。 最后这一部分介绍了系统电路的部分调试工作。其中有,人机 交互电路的调试,通讯及数据保持芯片的接口电路的调试,以及交流伺服电机的运于单片机设计的多功能定时器

单片机多功能数字电子时钟设计设计Word

单片机多功能数字电子时钟设计设计Word

单片机多功能数字电子时钟设计绪论概述时间对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。

因此自从时钟发明的那刻起,就成为人类的好朋友。

随着时间的流逝,科学技术的不断发展和提高人们对时间计量的精度要求越来越高,应用越来越广。

怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发。

出新型的时钟。

高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高稳定性好、使用方便、不需要经常调校。

数字式电子钟用集成电路计时时译码代替机械式传动,用LCD显示器代替指针进而显示时间、减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

时钟电路在计算机系统中起着非常重要的作用是保证系统正常工作的基础。

在单片机的应用系统中,时钟有两个方面的含义。

一是指为保障系统正常工作的基准振荡定时信号、主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢二是指系统的标准定时时钟即定时时间。

它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时器/计数器来实现,二是用专门的时钟芯实现。

2研究目的通过利用STC89C52单片机和DS1302芯片和DS18B20以及外围的按键和LCD显示器等部件显示完整的日历和温度,设计一个基于单片机的电子时钟。

通过设计可以很好的学习单片机的基础知识。

具有日历、时间、温度显示功能。

设计的电子时钟通过液晶显示器显示并能通过按键对时间进行设置。

第一章设计要求与方案论证1.1设计要求1具有年、月、日、星期、时、分、秒显示功能,2具有年、月、日、星期、时、分、秒校正功能,3具有12/24小时切换显示功能,4具有显示温度功能。

1.2系统基本方案选择和论证1.2.1 单片机芯片的选择方案和论证方案一:采用STC89C52芯片作为硬件核心。

STC89C52内部具有8KB ROM 存储空间,512字节数据存储空间、带有2K字节的EEPROM存储空间与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。

基于51单片机的多功能定时器

基于51单片机的多功能定时器
2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
摘要
本设计要求以单片机为核心主体,完成最小系统板的设计与制作(通过Protel软件,对电路进行设计,调试。生成PCB板,再对元器件进行排布,焊接。)之后要进行初调试,证实电路板无误后才能进行下面的内容。电路板完成后,在总程序基础上通过编程设计家用多路定时控制器。本课程设计目标:具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。但重要的是要有一定的创新,因为此系统还有很多值得开发的功能,单纯的三路定时只是设计内容的基本要求。
图1-1MCS—51单片机片内总体结构框图
单片机的生存周期相对于普通CPU而言非常之长,如MCS8051已超过15年。以某类单片机(如8051/52)为核心,集成不同I/O功能模块的新单片机系列层出不穷;而某些单片机更是突出了以功能分类的特点(如Microchip公司的PIC单片机)。8位、16位、32位单片机共同发展也是当前单片机技术发展的另一特点。
1.1.2单片机在电子技术中的应用
单片机的应用领域
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

多功能定时器课程设计讲解

多功能定时器课程设计讲解

摘要在日常生活照,555定时器的应用非常广泛,我们常常用到定时控制。

在早期运用的是模拟电路设计的,它的准确性和精度都不是很理想。

然而现在基本上都是运用数字技术。

定时器可以控制一些常用电器,也可以构成复杂的工业过程控制系统。

它的功能强大,体积小且灵活,配以适当的芯片可以实现许多功能。

随着电子技术的飞速发展,家用电器逐渐增多,不同的设备需要实现不同的功能,需要自己的控制器,设计十分不便。

根据这种情况,本设计设计了一个多功能定时器,可以对许多电器进行定时。

这种具有智能化的产品有效的减轻了人们的劳动,带人们走进智能化的时代,为家庭数字化的实现提供了可能。

关键词:555定时器;多功能;电器目录1方案论证 (1)1.1方案的比较环节 (1)1.2实验方案 (1)2原理及技术指标 (2)2.1实验原理 (2)2.2实验技术指标 (2)3单元电路设计及参数计算 (3)3.1单元电路设计 (3)3.1.1控制电路 (3)3.1.2可控脉冲发生电路 (3)3.1.3延时控制电路 (5)3.1.4电源电路 (6)3.2实验的连接与处理 (7)3.2.1各部件实现功能 (7)3.2.2实验处理 (8)4电路图 (9)4.1电路图 (9)5设计小结 (10)5.1个人感悟 (10)5.2遇到问题及解决途径 (10)参考文献 (11)附录 (12)1方案论证1.1 方案的比较环节方案一:通过51单片机进行编程设计一个电路系统方案二:采用555定时器组成的多谐振荡器产生时钟脉冲。

方案三:采用晶振产生时钟脉冲。

晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定、精确的单频振荡。

比较分析:三种方案相比较,方案一需要进行编程,而我们无法在短时间内编写好完整的程序,可实现性不强。

方案二:555定时器芯片是一种广泛应用的中规模集成电路,只要外围配以几个适当的阻容元件,就可以构成无稳态触发器、单稳态触发器以及双稳态触发器等应用电路,以此为基础可设计各种实用的电路形式。

单片机定时器实验报告doc

单片机定时器实验报告doc

单片机定时器实验报告篇一:单片机实验报告——定时器实验四定时器实验自动化121班 36 张礼一.实验目的掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。

二.实验仪器单片机开发板一套,计算机一台。

三.实验任务编写程序,使用单片机开发板上8位共阴极数码管的其中一位来显示0~9这九个字符,先从“0”开始显示,数字依次递增,当显示完“9”这个字符后,又从“0”开始显示,循环往复,每1秒钟变换一个字符,1秒钟的定时时间必须由定时器T0(或T1)提供。

开发板上的8位共阴极数码管与单片机的输入输出端口P1的硬件接线如图4-1所示,单片机P1口的8条数据线通过J3端子同时连接到 2片74HC573D锁存器的输入端,数码管的各个同名端分别连接后再与锁存器U2的8个输出端相连,每一位数码管的位选端分别与锁存器U3的8个输出端相连。

两片锁存器的输出使能端OE都恒接地,使得锁存器的内部数据保持器输出端与锁存器的输出端保持接通。

而U2的锁存使能端LE由P2.1控制,所以P2.1是段锁存;U3的锁存使能端LE由P2.0控制,所以P2.0是位锁存。

当锁存使能端为“1”时,则锁存器输入端的数据传送到输出端;当锁存使能端为“0”时,锁存器输入端的数据则不能传送到输出端;因此段码和位码通过锁存器分时输出。

汇编语言程序流程如图4-2:四.实验步骤:1.数码管的0~9的字型码表如下:2.参考图4-2所给的程序流程图编写实验程序。

(注:以下程序为两位60秒计数程序)#include sbit wei=P2^0; sbit duan=P2^1;char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};int i,j,k,num,shi,ge; void delay(int a) {for(i=0;i void display(int shi,int ge){wei=1;P1=0xfe;wei=0;duan=1;P1=table[shi];duan=0;wei=1; delay(5);P1=0xfd;wei=0; duan=1;P1=table[ge];duan=0; }void main() {TMOD=0x01;TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; num=0; while(1) {delay(5);display(shi,ge); } }void T0_time() interrupt 1 {TH0=(65536-45872)/256; TL0=(65536-45872)%256; k++; if(k==20) { k=0; num++;if(num==60)num=0; shi=num/10; ge=num%10; } }3.实验接线,如图4-1。

(完整word版)基于51单片机多功能电子时钟报告

(完整word版)基于51单片机多功能电子时钟报告

单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目—-—-———--—--—-—--------—-——---—- 3二电路设计--------——-——---—--——---——--————-——--—- 4三程序总体设计思路概述——-------———-——--——5四各模块程序设计及流程图——--—---------——6五程序及程序说明见附录-—-——————-—-—---—-- **六课程设计心得及体会-----————-————--——--—- 11七参考资料—-—-—---—--———-———--————-—-----—----—-—12一题目及要求本次单片机课程设计在Proteus软件仿真平台下实现,完成电路设计连接,编程、调试,仿真出实验结果。

具体要如下:用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能: (1)走时(能实现时分秒,年月日的计时)(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)(3)校时(能用按键修改和校准时钟)(4)定时报警(能定点报时)本次课程设计要求每个学生使用Proteus仿真软件独立设计制作出电路图、完成程序设计和系统仿真调试,验收时能操作演示.最后验收检查结果,评定成绩分为:(1)完成“走时+显示+秒闪”功能—-——及格(2)完成“校时修改”功能---—中等(3)完成“校时修改位闪"---—良好(4)完成“定点报警”功能,且使用资源少----优秀二电路设计(电路设计图见附件电路图)(1)采用89C51型号单片机(2)采用8位共阴数码管(3)因为单片机输出高电平时输出的电流不足以驱动数码管,所以在P0口与8位数码管之间加74LS373来驱动数码管(4)P2口与数码管选择位直接加74LS138译码器(5)蜂鸣器接P3。

7口。

(完整版)基于单片机的多功能定时器毕业设计论文

(完整版)基于单片机的多功能定时器毕业设计论文

目录1 引言 ........................................................................................................................2 概述 ........................................................................................................................2.1 定时开关电源插座系统概述...........................................................................2.2 本设计方案思路...............................................................................................2.3 研发方向和技术关键.......................................................................................2.4 主要技术指标...................................................................................................3 总体设计 ....................................................................................................................3.1 可控开关设计的选择.......................................................................................3.2 时钟信号的实现...............................................................................................3.3 译码方案的选取...............................................................................................4 硬件设计 (1)4.1 可控开关电路 (1)4.2 电平转换电路 (1)4.3 单片机系统电路 (1)4.4 显示电路 (1)5 软件设计 (1)5.1 总体方案 (1)5.2 主程序流图 (1)5.3 中断模块说明 (1)6 制作与调试 (1)6.1 硬件电路的布线与焊接 (1)6.2 调试 (2)6.3 改进与扩展 (2)7 结论 (2)致谢 (2)参考文献 (2)附录 (2)1.引言随着电子技术和电源技术的发展,开关电源以体积小、重量轻、功率密度大、集成度高、输出组合便利等优点而成为电子电路电源的首选。

(整理)单片机家用多功能定时器设计与制作

(整理)单片机家用多功能定时器设计与制作
单片机被广泛地应用在各种领域。例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。
}
/****************************红绿灯*******************************/
void hlhd(void)
{if(second1==50&&STATE==10)
{STATE=11;second1=45;}
if(second1==50&&STATE==11)
2.2.3
本课程设计要用数码管显示数字钟、定时时间。这就需要键盘来设定,键盘可以分为独立连接式和矩阵式。本实验用的是矩阵式。为了减少所以的I/O口,利用三——八译码器来实现12个键盘的连接。
对于这种矩阵式的键盘连接,扫描时依次将行线置为低电平,即在置某根行线为低电平时,其它都线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。注意在按键时一定要调延时子程序来消除抖动。
sbit LED3=P1^3;
sbit LED4=P1^4;

单片机课程设计多功能定时器

单片机课程设计多功能定时器

单片机课程设计多功能定时器一、设计目的:1、在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用;2、能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,在软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高;3、使学生增进对单片机的感性认识,加深对单片机理论方面的理解。

使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通信等;4、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

二、设计功能说明数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。

数字钟已成为人们日常生活中的必需品,本设计可实现如下功能:1、使用实时时钟芯片写入及读取时间2、用LCD显示,可显示年、月、日、时、分、秒、星期、农历日期、节日3、选择蜂鸣器电路,实现两个闹钟设置和事件提示功能4、实现时钟校正功能,12小时/24小时切换功能5、显示当前时间为上午时间或下午时间6、整点报时功能按键功能如下:1、对显示时间的设置按键0:进入设置模式,实现秒(S)、分(M)、时(H)、年(Y)、月(m)、日(D)、星期(W)设置的切换,并在LCD右下角显示所设置的项目,当各项目设置完毕后,再按下按键0则返回主界面正常显示时间;按键1:每按一次按键1,对所设置的时间加1,当设置的时间超过它的最大值时,该项自动为0,例如:当设置秒为59时,秒自动清零;按键2:每按一次按键:2,对所设置的时间减1,当设置的时间小于0时,该项自动为它的最大值;按键3:设置完成后的确认键并可按此键中途退出设置,时间按用户设置值正常计时;按键7:实现时钟校正功能,12小时/24小时切换功能。

(完整word版)单片机课设电子闹钟设计

(完整word版)单片机课设电子闹钟设计

一概述1.1 课程设计的目的和意义本文是利用AT89C51单片机结合七段显示器设计一个简易的定时闹铃时钟,可以放在计算机教室或是实验室中使用,由于用七段显示器显示数据,在夜晚或黑暗的场合中也可以使用。

可以设置现在的时间及显示闹铃设置时间,若时间到则发出一分钟闹铃响。

本课程设计主要用到AT89C51单片机定时器时间计时处理、按键扫描及七段显示器扫描的设计方法等等。

闹钟与我们的日常生活密不可分,通过闹钟的设计可以使我们进一步熟悉和掌握单片机的内部结构和工作原理,掌握单片机仿真软件Proteus的使用方法。

1.2 课程设计所需元件AT89C51×1,8255A×1 ,7SEG-MPX6-CC×1,AVX0402NPO33P×2,CRYSTAL×1,3WATT10K ×3,BUTTON×3,10WATT1K×8,74LS00×1,SOUNDER×1,MINRES300R×1,SW-SPDT×1。

1.3 设计任务在熟练掌握单片机及其仿真系统的使用方法的基础上,综合应用单片机原理,微机原理,微机接口技术等专业知识,设计采用一个AT89C51单片机控制的定时闹钟。

二系统总体方案及硬件设计2.1总体设计框图该数字定时闹钟是由AT89C51单片机控制的,采用24小时制计时。

基于单片机的数字定时闹钟在设计时需要解决三个方面的主要问题:一是LED显示模块的驱动和编程,二是有关单片机中定时器的使用,三是如何利用单片机的外中断实现时钟功能和运行模式的转化。

数字定时闹钟系统框图如图一所示,包括主电路和显示电路两大部分。

2.2 主电路主电路图如图三所示。

该电路使用P3端口的P3.0端口线实现整点报时功能;同样使用P3端口的P3.0端口实现闹钟功能。

整点报时信号用SOUNDER来模拟。

当整点时,P3.0端口所接的SOUNDER闹一分钟。

单片机课程设计word

单片机课程设计word

单片机课程设计word一、课程目标知识目标:1. 让学生掌握单片机的基本原理和结构,理解其工作流程和编程方法。

2. 使学生了解单片机在现实生活中的应用,如智能家居、自动化控制等领域。

3. 帮助学生掌握与单片机相关的电子元器件的原理和使用方法。

技能目标:1. 培养学生运用C语言进行单片机编程的能力,能够独立完成简单的程序设计。

2. 提高学生动手实践能力,学会使用面包板、编程器等工具进行单片机系统的搭建和调试。

3. 培养学生团队协作和问题解决能力,能够共同完成具有一定难度的单片机项目。

情感态度价值观目标:1. 激发学生对单片机及电子技术的兴趣,培养其主动探索、勤于思考的学习习惯。

2. 培养学生的创新意识,鼓励他们勇于尝试,将所学知识应用于实际项目中。

3. 引导学生认识到单片机技术在我国科技发展中的重要性,增强国家认同感和自豪感。

课程性质:本课程为实践性较强的学科,注重理论联系实际,强调动手能力和创新能力的培养。

学生特点:学生具备一定的电子基础和编程能力,对单片机有一定了解,但实践经验和系统设计能力不足。

教学要求:结合学生特点和课程性质,采用案例教学、任务驱动、小组合作等方法,注重理论与实践相结合,提高学生的综合运用能力。

通过本课程的学习,使学生能够达到上述课程目标,为后续相关课程和未来职业发展打下坚实基础。

二、教学内容本课程教学内容主要包括以下几部分:1. 单片机基础知识:介绍单片机的原理、结构和功能,使学生了解单片机的基本概念,对应教材第一章。

- 单片机的组成与工作原理- 单片机的性能指标和分类2. 单片机编程语言:学习C语言编程,掌握单片机程序设计方法,对应教材第二章。

- C语言基础知识- 单片机编程语法和技巧3. 单片机I/O接口技术:学习并实践单片机与外部设备的通信和控制,对应教材第三章。

- I/O接口的工作原理- 常用I/O接口编程及应用4. 单片机中断与定时器:介绍中断系统、定时器的工作原理和应用,对应教材第四章。

(完整word版)单片机定时闹钟课程设计

(完整word版)单片机定时闹钟课程设计

目录一、设计目的…………………………………………………………二、设计要求…………………………………………………………三、设计的总体结构…………………………………………………3.1电路的总体原理框图……………………………………………3.2 工作原理………………………………………………………3.3 元器件名称……………………………………………………四、各部分电路设计…………………………………………………4.1 主电路……………………………………………………………………4.2 显示电路…………………………………………………………………4.3 内部时钟方式的电路……………………………………………………4.4 按键及蜂鸣器电路………………………………………………………五、整体电路图………………………………………………………六、设计总结…………………………………………………………6.1 设计过程中遇到的问题及解决方法………………………………………6.2 设计体会……………………………………………………………………6.3 对设计的建议………………………………………………………………七、C语言程序………………………………………………………八、附图…………………………………………………………………一、设计目的此次设计的目的是培养同学们系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力,以及一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;通过完成所选题目的分析与设计,达到技术性能要求。

二、设计要求1、能显示时时-分分-秒秒。

2、能够设定定时时间、修改定时时间。

3、定时时间到能发出报警声或者启动继电器,从而控制电器的启停。

三、设计的总体结构3.1 电路的总体原理框图图3.1 电路原理框图3.2 工作原理当给电路足够的电源时,电路开始正常初始化,此时显示“00 :00 :00”,若不进行时间调整和定时,时钟将正常计时下去。

(完整word版)单片机课程设计以作息时间控制为主的多功能任务设计

(完整word版)单片机课程设计以作息时间控制为主的多功能任务设计

目录一.课程设计目的 (1)二.设计要求 (2)2。

1总体要求 (2)2.2具体要求 (2)三.设计内容及方法 (3)3。

1设计准备 (3)3。

2功能设计及系统总体设计 (3)四.硬件电路总体设计 (3)4。

1硬件总框图 (3)4。

1.1主控电路 (4)4.1。

2按键控制扫描模块 (5)4。

1。

3D S1302实时时钟模块 (6)4。

1.4数码管显示模块 (8)4.1.5L E D显示模块 (9)4。

1。

6扬声器模块 (10)4。

2硬件原理图 (12)五.软件流程框图及源程序 (12)5。

1流程框图 (12)5。

1.1主程序流程图 (12)5.1。

2蜂鸣器流程图 (14)5。

1。

3流水灯程序流程图 (15)5。

1。

4时钟显示流程图 (16)5.1。

5作息时间控制流程图 (17)5.2源程序代码及注释 (18)六.调试情况及小结 (33)七.课程设计体会 (34)八.参考文献 (35)一、课程设计目的《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。

在课程设计过程中,在教师指导下,运用工程的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。

通过课程设计,应能加强学生如下能力的培训:(1)独立工作能力和创造力;(2)查阅图书资料,产品手册和各种工具书的能力;(3)工程绘图的能力;(4)编写技术报告和编制技术资料的能力(5)综合运用专业及基础知识,解决实际工程技术问题的能力;二、设计要求2。

1总体要求(1)独立完成设计任务(2)绘制系统硬件总框图(3) 绘制系统原理电路图(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释;(5)制定编写调试方案,编写用户操作使用说明书(6) 写出设计工作小结。

对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后研修方向。

单片机课程设计(家用多功能定时器设计与制作)

单片机课程设计(家用多功能定时器设计与制作)

《单片机技术》课程设计报告项目名称:家用多功能定时器设计与制作第一章绪论1.1设计任务及目标本次课程设计的任务如下:1,完成单片机最小系统板设计与制作。

2,编程设计家用多路定时控制器目标:1,具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置2,自主创新的功能。

第二章系统电路设计2.1 系统总体设计框架结构2.2 系统硬件单元电路设计2.2.1 时钟电路设计该电路为时钟电路,主要功能为:与单片机内部振荡器构成振荡电路,为单片机工作提供时序。

晶体是12MHz,电容选用33pf,时钟周期为1/12us,机器周期为1/12*12=1us2.2.2 复位电路设计电阻为10k,电容为0.1uf,由于电容的阻抗对直流而言比较大,当复位开关未按下时,通过电容和电阻分压使得RESET端为低电平,当按下复位键时,通过两个电阻分压在RESET为高电平,从而实现复位.电阻的作用不是限制电流的大小,而是控制复位时间.电容充电时间与R C的值成正比.2.2.3 按键电路设计按键电路为2行6列式矩阵键盘,例如,Shift键将Y0与Line1连接起来,当Y0口为低电平时,如果此时检测到Line1为低电平,则唯一说明Shift键按下,此时记录当前按键键值为1.2.3 系统硬件总电路系统总体电路图第三章 系统软件设计3.1 系统软件流程图主程序流程图主程序在初始化参数后进入while 循环,不断调用子程序进行刷新缓冲区,刷新显示LED ,定时时间检测,按键处理等操作。

定时器0中断计时子程序流程图:定时器0中断主要用于计时,首先设定一次中断所需的时间,这里为50MS,故初始值为TH0=0x3C; TL0=0xB0;检测50ms计数单元是否加满10次,若是,则LED取反闪烁,若不是则跳过。

检测50ms计数单元是否加满20次,若是,则秒计数单元+1,若不是则结束。

检测秒计数单元是否加满60次,若是,则分计数单元+1,若不是则结束。

多功能定时器课程设计

多功能定时器课程设计

多功能定时器课程设计一、课程目标知识目标:1. 学生能够理解多功能定时器的基本概念和原理;2. 学生能够掌握多功能定时器的各个组成部分及其功能;3. 学生能够了解多功能定时器在日常生活和科技领域中的应用。

技能目标:1. 学生能够运用所学知识,正确组装和操作多功能定时器;2. 学生能够通过编程,实现多功能定时器的定时、延时等功能;3. 学生能够运用多功能定时器解决实际问题,提高创新实践能力。

情感态度价值观目标:1. 学生能够培养对多功能定时器及相关电子技术的兴趣和热情;2. 学生能够认识到多功能定时器在生活中的重要性,增强科技改变生活的意识;3. 学生能够在团队合作中,培养沟通、协作和解决问题的能力。

课程性质:本课程为实践性较强的电子技术课程,结合学生特点和教学要求,注重理论与实践相结合,提高学生的动手能力和创新能力。

学生特点:五年级学生具有一定的电子技术基础和动手能力,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:结合课程内容和五年级学生的特点,采用启发式教学,引导学生主动探究,注重培养学生的实际操作能力和创新思维。

通过本课程的学习,使学生能够将所学知识应用于实际生活中,提高综合素养。

二、教学内容本课程教学内容围绕多功能定时器的原理、组装、编程和应用展开,分为以下四个部分:1. 多功能定时器原理:- 介绍定时器的基本工作原理;- 讲解时钟电路、计数器、触发器等核心部件的作用;- 分析定时器精度、稳定性等性能指标。

2. 多功能定时器组装:- 选用合适的集成芯片和元器件;- 指导学生进行电路搭建和调试;- 讲解组装过程中的注意事项,确保安全可靠。

3. 多功能定时器编程:- 介绍编程软件和编程语言;- 指导学生编写简单的定时、延时程序;- 分析编程过程中的常见问题及解决方法。

4. 多功能定时器应用:- 展示定时器在日常生活、工业生产、科技领域等方面的应用案例;- 引导学生思考定时器的创新应用;- 组织学生进行实际操作,将所学知识应用于解决实际问题。

(完整word版)基于单片机的多功能电子钟

(完整word版)基于单片机的多功能电子钟

山东建筑大学课程设计说明书题目:基于单片机的多功能电子钟课程: 单片机原理及应用B课程设计院(部):信息与电气工程学院专业:电子信息工程班级:电信111学生姓名:姜庆飞学号: 2011081197指导教师: 高焕兵完成日期:2015年1月摘要............................................................................................................ I I1 设计目的 (1)2 设计要求 (2)3 设计内容 (3)3.1电子时钟的工作原理 (3)3。

2 系统硬件电路设计及元件 (4)3。

2。

1 AT89C51芯片 (4)3.2。

2 DS1302芯片 (8)3.2。

3 LCD1602液晶显示 (12)3。

3系统软件电路设计 (15)3。

3。

1 系统流程图及源代码设计 (15)总结与致谢 (18)参考文献 (19)附录一 (20)单片机, 是集CPU ,RAM ,ROM , 定时器,计数器和多种接口于一体的微控制器.自20 世纪70 年代问世以来,以其极高的性能价格比,受到人们的重视和关注。

它体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上.本系统为基于DS1302的多功能电子钟,以AT89C51单片机作为主控芯,采用实时时钟芯片DS1302,使用1602液晶作为显示输出。

该系统走时精确,具有闹钟设置,时间模式切换,秒表以及可同时显示时间、日期等多种功能。

本文将详细介绍AT89C51单片机和DS1302 时钟芯片的基本原理,从软件和硬件电路的实现两大方面进行分析。

关键词:AT89C51;单片机;液晶屏;时钟芯片;蜂鸣器基于51单片机设计一个能够支持年、月、日、星期、时、分、秒的电子时钟。

并且支持闹钟功能,及整点报时功能。

在设计过程中,学习利用DXP软件进行硬件电路设计或者利用仿真软件进行仿真,进行单片机的软件编程。

单片机系统课程设计定时器

单片机系统课程设计定时器

大连民族大学《单片机系统课程设计》课程报告2020-2021第一学期学院:机电工程学院专业:自动化班级:学生姓名任课教师:日期:2021年1月1日目录1 任务分析及性能指标 (5)1.1任务分析 (5)1.2性能指标 (5)2 总体方案设计 (6)2.1硬件方案 (6)2.2软件方案 (6)3 电路原理图 (7)4 程序清单 (8)5 调试及性能分析 (10)6 总结 (11)7 参考文献 (11)1任务分析及性能指标1.1 任务分析了解并学会Keil和Proteus软件使用方法,利用Keil设计程序,用Proteus 软件进行仿真。

利用单片机的两个计时器和两个个四位数码管实现两路最长99分钟的定时。

4位数码管的低两位显示秒钟,高2位显示分钟。

通过按键设定定时时间,当定时完成时,利用蜂鸣器进行提醒。

如果继续采用前次定时时间,使之再次启用时不需重新输入数据。

1.2 性能指标使定时器有最长99分钟的定时,通过按键设定定时时,当定时完成时,蜂鸣器会进行提醒。

如果继续采用前次定时时间,再次启用时不需重新输入数据。

2总体方案设计2.1 硬件方案通过对任务分析,其硬件主要有AT89C51单片机、芯片74LS245、蜂鸣器、七段共阴极数码管、按键等。

AT89C51单片机系统通常情况下,P0口分时复用作为地址、数据总线,P2口提供A15-A8即高8位地址,P3口用作第二功能,只有P1口通常用作I/0O口。

8051的P1口作为基本I/O口使用,P1口是8位准双向口,它的每一位都可独立地定义为输入或输出,因此,既可作为8位的并行I/O口,也可作为8为的输入输出端。

74LS245是用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。

共阴极数码管是一类数字形式的显示屏,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计目的:1、在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用;2、能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,在软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高;3、使学生增进对单片机的感性认识,加深对单片机理论方面的理解。

使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通信等;4、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

二、设计功能说明数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。

数字钟已成为人们日常生活中的必需品,本设计可实现如下功能:1、使用实时时钟芯片写入及读取时间2、用LCD显示,可显示年、月、日、时、分、秒、星期、农历日期、节日3、选择蜂鸣器电路,实现两个闹钟设置和事件提示功能4、实现时钟校正功能,12小时/24小时切换功能5、显示当前时间为上午时间或下午时间6、整点报时功能按键功能如下:1、对显示时间的设置按键0:进入设置模式,实现秒(S)、分(M)、时(H)、年(Y)、月(m)、日(D)、星期(W)设置的切换,并在LCD右下角显示所设置的项目,当各项目设置完毕后,再按下按键0则返回主界面正常显示时间;按键1:每按一次按键1,对所设置的时间加1,当设置的时间超过它的最大值时,该项自动为0,例如:当设置秒为59时,秒自动清零;按键2:每按一次按键:2,对所设置的时间减1,当设置的时间小于0时,该项自动为它的最大值;按键3:设置完成后的确认键并可按此键中途退出设置,时间按用户设置值正常计时;按键7:实现时钟校正功能,12小时/24小时切换功能。

2、对闹钟的设置按键4:进入闹钟1的设置,并在LCD右上方显示“CLOCK1”并通过按键0、1、2设置用户所需闹钟时间,完成闹钟1的设置后,通过按键0进入闹钟2的设置,并在LCD右上方显示“CLOCK2”,若无需设置闹钟2,则通过按键3退出闹钟设置,返回主界面正常显示时间;按键5:设置闹钟是否开启,例如:当设置闹钟1为开启状态时,在LCD右上方显示“*CLOCK1”当闹钟,并在返回主界面后显示“C1”表示闹钟1开启;三、整体设计思路这部分主要介绍工作安排和整体设计的思想。

工作过程规划如下:四、主程序流程图五、电气原理图(见附图)六、实验程序1、键盘程序(Keyprocess)键盘与848相连接,采用矩阵键盘的方式P2用于列扫描,P1用于行扫描,经过消抖及等待键释放的程序,将最终正确的结果置于getkey();程序实现如下:#include"aduc848.h"void KeyDelay(unsigned int KeyJsTime); //键盘扫描延时函数声明unsigned char GetKey(); //扫描后获取键值unsigned char GetKey(){static unsigned char KeyHaveFree=1;static unsigned int KeyJs=0;unsigned char temp,KeyTemp=0xff;P1&=0xf0;P2&=0xf0; // 将低四位置零做I/O口temp=P1&0x0f;if(KeyHaveFree){if(temp!=0x0f){KeyDelay(1000); //延时消除抖动if(temp==(P1&0x0f)) //延时后确认是否有键按下,并获取具体键值{P2|=0x0e;switch(P1&0x0f){case 0x0e:KeyTemp=3;break;case 0x0d:KeyTemp=7;break;case 0x0b:KeyTemp=11;break;case 0x07:KeyTemp=15;break;case 0x0f:break;default:KeyTemp= 0x80;break;}P2&=0xf0;P2|=0x0d;switch(P1&0x0f){case 0x0e:KeyTemp= 2;break;case 0x0d:KeyTemp= 6;break;case 0x0b:KeyTemp= 10;break;case 0x07:KeyTemp= 14;break;case 0x0f:break;default:KeyTemp= 0x81;break;}P2&=0xf0;P2|=0x0b;switch(P1&0x0f){case 0x0e:KeyTemp= 1;break;case 0x0d:KeyTemp= 5;break;case 0x0b:KeyTemp= 9;break;case 0x07:KeyTemp= 13;break;case 0x0f:break;default:KeyTemp= 0x82;break;}P2&=0xf0;P2|=0x07;switch(P1&0x0f){case 0x0e:KeyTemp= 0;break;case 0x0d:KeyTemp= 4;break;case 0x0b:KeyTemp= 8;break;case 0x07:KeyTemp= 12;break;case 0x0f:break;default:KeyTemp= 0x83;break;}KeyHaveFree=0; //LCDPrintNumber(6,11,5,KeyTemp);}}}else{KeyJs++;if(KeyJs>70){KeyHaveFree=1;KeyJs=66;}if(temp==0x0f){KeyHaveFree=1;KeyJs=0;}KeyTemp=0xf0;}return KeyTemp;}void KeyDelay(unsigned int KeyJsTime){unsigned char temp;unsigned int JsKeyDelay;for(JsKeyDelay=0;JsKeyDelay<KeyJsTime;JsKeyDelay++)temp++; }2、Lcd程序(1602)#include "aduc848.h"sbit RS=P3^6;sbit RW=P3^5;//位定义sbit EN=P3^3;void delay(unsigned int z);延时函数声明void write_com(unsigned char com);LCD显示位置函数声明void write_data(unsigned char date);写数据函数声明void init();{RS=0;RW=0;EN=0;write_com(0x38);write_com(0x0f);write_com(0x06);}void delay(unsigned int z) //延时函数延时时间=Z*110{unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(unsigned char com) //{RS=0;RW=0;P0=com;delay(5);EN=1;delay(5);EN=0;}void write_data(unsigned char date) {RS=1;RW=0;P0=date;delay(5);EN=1;delay(5);EN=0;}3、iic程序(RTC)//实时时钟#include"aduc848.h"void iic_start(void);void iic_stop(void);void iic_ack(void);bit read_ack(void);void iic_nack();unsigned char get_byte(void);void out_byte(unsigned char dd);void IIC_Delay_us(unsigned int times); void ReadTime(unsigned char TIME[7]); void SetTime(unsigned char TIME[7]); void SwitchRTC(unsigned char SWITCH);void ReadTime(unsigned char TIME[7]) {bit EATemp;unsigned char temp;EATemp=EA;iic_start();out_byte(0xd0);read_ack();out_byte(0x00);read_ack();iic_stop();IIC_Delay_us(1);iic_start();out_byte(0xd1);read_ack();TIME[0]=get_byte();iic_ack();TIME[1]=get_byte();iic_ack();TIME[2]=get_byte();iic_ack();TIME[3]=get_byte();iic_ack();TIME[4]=get_byte();iic_ack();TIME[5]=get_byte();iic_ack();TIME[6]=get_byte();iic_nack();iic_stop();IIC_Delay_us(1);TIME[0]=((TIME[0]&0x7f)>>4)*10+(TIME[0]&0x0f); //secondTIME[1]=((TIME[1]&0x7f)>>4)*10+(TIME[1]&0x0f); //minuteif(TIME[2]&0x40){if(TIME[2]&0x20)temp=0x80;else temp=0x40;TIME[2]=((TIME[2]&0x1f)>>4)*10+(TIME[2]&0x0f); //hour TIME[2]|=temp;}else{TIME[2]=((TIME[2]&0x3f)>>4)*10+(TIME[2]&0x0f);}TIME[3]=TIME[3]&0x07; //weekTIME[4]=((TIME[4]&0x3f)>>4)*10+(TIME[4]&0x0f); //dateTIME[5]=((TIME[5]&0x1f)>>4)*10+(TIME[5]&0x0f); //monthTIME[6]=(TIME[6]>>4)*10+(TIME[6]&0x0f); //yearEA=EATemp;}void SetTime(unsigned char TIME[7]){bit EATemp;unsigned char temp=0;unsigned char TimeTemp[7];EATemp=EA;for(temp=0;temp<7;temp++)TimeTemp[temp]=TIME[temp];temp=0;TimeTemp[6]=((TimeTemp[6]/10)<<4)+(TimeTemp[6]%10); //Year TimeTemp[5]=((TimeTemp[5]/10)<<4)+(TimeTemp[5]%10); //Month TimeTemp[4]=((TimeTemp[4]/10)<<4)+(TimeTemp[4]%10); //DayTimeTemp[3]=((TimeTemp[3]/10)<<4)+(TimeTemp[3]%10); //Weekif((TimeTemp[2]&0xc0)==0x00) //Hour {TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10);}else{if((TimeTemp[2]&0xc0)==0x01)temp=0x40;else temp=0x60;TimeTemp[2]&=0x3f;TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10);TimeTemp[2]|=temp;}TimeTemp[1]=((TimeTemp[1]/10)<<4)+(TimeTemp[1]%10); //Minute TimeTemp[0]=((TimeTemp[0]/10)<<4)+(TimeTemp[0]%10); //Second TimeTemp[0]&=0x7f;iic_start();out_byte(0xd0);read_ack();out_byte(0x00);read_ack();out_byte(TimeTemp[0]);read_ack();out_byte(TimeTemp[1]);read_ack();out_byte(TimeTemp[2]);read_ack();out_byte(TimeTemp[3]);read_ack();out_byte(TimeTemp[4]);read_ack();out_byte(TimeTemp[5]);read_ack();out_byte(TimeTemp[6]);read_ack();iic_stop();IIC_Delay_us(1);EA=EATemp;}void SwitchRTC(unsigned char SWITCH) {unsigned char temp;bit EATemp;EATemp=EA;iic_start();out_byte(0xd0);read_ack();out_byte(0x00);read_ack();iic_stop();//IIC_Delay_us(1);iic_start();out_byte(0xd1);read_ack();temp=get_byte();iic_nack();iic_stop();//IIC_Delay_us(1);if(SWITCH)temp&=0x7f;else temp|=0x80;iic_start();out_byte(0xd0);read_ack();out_byte(0x00);read_ack();out_byte(temp);read_ack();iic_stop();//IIC_Delay_us(1);EA=EATemp;}void iic_start(void) {MDE=1;MDO=1;//IIC_Delay_us(2);MCO=1;//IIC_Delay_us(2);MDO=0;//IIC_Delay_us(2);}void iic_stop(void) {MDE=1;MDO=0;//IIC_Delay_us(2);MCO=1;//IIC_Delay_us(2);MDO=1;}void iic_ack(void) {MDE=1;MCO = 0;MDO = 0;//IIC_Delay_us(2);MCO = 1;//IIC_Delay_us(2);MCO = 0;//IIC_Delay_us(1);MDO = 1;}bit read_ack(void) {bit flag;MCO = 0;//IIC_Delay_us(2);MDE=1;MDO = 1;MCO = 1;//IIC_Delay_us(2);MDE=0;flag = MDI;MCO = 0;return flag;}void iic_nack(){MDE=1;MDO = 1;//IIC_Delay_us(2);MCO = 1;//IIC_Delay_us(2);MCO = 0;}/************************************************************************** ********** 函数名: get_byte;* 描述: 从IIC总线获取一个字节;* 输入: none;* 返回值: 一字节数据;* 注释: none;*************************************************************************** *********/unsigned char get_byte(void) //输入一个字节{unsigned char dd;int i;dd=0;MDE=1;MDO = 1;MDE=0;for (i=0;i<8;i++){MCO = 0;IIC_Delay_us(1);MCO = 1;//IIC_Delay_us(1);dd<<=1;if (MDI)dd|=0x01;}MCO = 0;return(dd);}/************************************************************************** ********** 函数名: out_byte;* 描述: 向IIC总线输出一个字节;* 输入: 一字节数据* 返回值: none;* 注释: none;*************************************************************************** *********/void out_byte(unsigned char dd) //输出一个字节{unsigned char i;MDE=1;for(i=0;i<8;i++){MCO = 0;//IIC_Delay_us(0);MDO = (dd & 0x80)>>7;IIC_Delay_us(1);MCO = 1;//IIC_Delay_us(3);dd <<= 1;}MCO = 0;}/************************************************************************** ********** 函数名: IIC_Delay_us;* 描述: IIC总线延时函数;* 输入: 延时参数* 返回值: none;* 注释: none;************************************************************************************/void IIC_Delay_us(unsigned int times){unsigned int i;unsigned char DelayJs;for (i=0; i<times; i++)DelayJs++;}4、主程序(Prj6)#include"aduc848.h"#include"KeyProcess.h"#include"rtc.h"#include"LCD1602.h"unsigned char CurrentTime[7]={55,59,21,6,23,04,11};unsigned char ClockSetSave1[3]={10,00,22},ClockSetSave2[3]={20,00,22};unsigned char code table[7]={0x53,0x4d,0x48,0x59,0x6d,0x44,0x57};unsigned char code table1[4]={0x20,0x53,0x4d,0x48};unsigned char KeyValue,ClockKeyValue,shijianzhi=0;unsigned char SetMode=0;unsigned char ShowMode=0;unsigned char Clock=1,ClockSet=0,FinishClockSet1=0,FinishClockSet2=0,ClockEn1=0,ClockEn2=0; unsigned int i=0;void KeyProcess();void stop(){P1&=0xf0;P2|=0x0f;P2&=0xfe;if((P1&0x08)==0){P2&=0xfe;}}void main(){PLLCON&=0xf8;//设置频率为12.58MHzCFG848|=0x01;//使用片内xraminit();I2CCON=0xE8;//配置IIC为软件主发送模式SetTime(CurrentTime);SwitchRTC(1);write_com(0x82); //写冒号 write_data(0x3A);write_com(0x85); //写冒号 write_data(0x3A);write_com(0xc2); //写短横线 write_data(0x2D);write_com(0xc5); //写短横线 write_data(0x2D);write_com(0xc8); //写短横线 write_data(0x2D); while(1) {stop();if(SetMode==0)ReadTime(CurrentTime);write_com(0x80);write_data(CurrentTime[2]/10+48); //Hourwrite_data(CurrentTime[2]%10+48);write_com(0x83);write_data(CurrentTime[1]/10+48); //Minute write_data(CurrentTime[1]%10+48); write_com(0x86);write_data(CurrentTime[0]/10+48); //Second write_data(CurrentTime[0]%10+48); write_com(0xc0);write_data(CurrentTime[6]/10+48); //Year write_data(CurrentTime[6]%10+48); write_com(0xc3);write_data(CurrentTime[5]/10%10+48); //Month write_data(CurrentTime[5]%10+48); write_com(0xc6); write_data(CurrentTime[4]/10%10+48); //Day write_data(CurrentTime[4]%10+48);switch(CurrentTime[3]) //Week {case1:{write_com(0xc9);write_data(0x4D);write_data(0x6f);write_data(0x6e);break;}//显示Moncase2:{write_com(0xc9);write_data(0x54);write_data(0x75);write_data(0x65);break;}//显示Tuecase3:{write_com(0xc9);write_data(0x57);write_data(0x65);write_data(0x64);break;}//显示Wencase4:{write_com(0xc9);write_data(0x54);write_data(0x68);write_data(0x75);break;}//显示Thucase5:{write_com(0xc9);write_data(0x46);write_data(0x72);write_data(0x69);break;}//显示Fricase6:{write_com(0xc9);write_data(0x53);write_data(0x61);write_data(0x74);break;}//显示Satcase7:{write_com(0xc9);write_data(0x53);write_data(0x75);write_data(0x6e);break;}//显示Sundefault: break;}KeyProcess();if((CurrentTime[0]==ClockSetSave1[0]&&CurrentTime[1]==ClockSetSave1[1]&&Cur rentTime[2]==ClockSetSave1[2])&&ClockEn1==1 || (CurrentTime[0]==ClockSetSave2[0]&&CurrentTime[1]==ClockSetSave2[1]&&CurrentTim e[2]==ClockSetSave2[2])&&ClockEn2==1) //与闹铃时间相同则闹铃响{PWM1H=62;PWM1L=100;PWMCON=0x31;KeyDelay(333);PWM1H=0;PWM1L=0;PWMCON=0x00;KeyDelay(333);}if(CurrentTime[0]==0&&CurrentTime[1]==0) //整点报时{PWM1H=62;PWM1L=100;PWMCON=0x21; //对闹铃响铃时长和音调等的设定KeyDelay(333);PWM1H=0;PWM1L=0;PWMCON=0x00;KeyDelay(333);}if(ClockEn1==1) //如果闹铃1被设置则显示C1 {write_com(0x8c);write_data(0x43);write_data(0x31);}else //否则清显{write_com(0x8c);write_data(0x20);write_data(0x20);}if(ClockEn2==1) //如果闹铃2被设置则显示C1 {write_com(0x8e);write_data(0x43);write_data(0x32);}else //否则清显{write_com(0x8e);write_data(0x20);write_data(0x20);}}}void KeyProcess() //按键处理,启动按键扫描{KeyValue=GetKey();switch(KeyValue){case 0: //按键0进入设置模式{write_com(0xcf);write_data(table[SetMode]); //显示被设置项if(SetMode==0)SwitchRTC(0); //进入设置,则停止计时SetMode++;if(SetMode>7) //如果设置完了,则开始计时{SetMode=0;SetTime(CurrentTime);if(SetMode==0)SwitchRTC(1);write_com(0xcf);write_data(0x20);}}break;case 1: //按键1:加{switch(SetMode) //执行按键1是在进入设置的模式下{case1:write_com(0xcf);write_data(0x53);CurrentTime[0]++;if(CurrentTime[0]>59)Curren tTime[0]=0;break;//miaocase2:write_com(0xcf);write_data(0x4d);CurrentTime[1]++;if(CurrentTime[1]>59)Curren tTime[1]=0;break;//fencase3:write_com(0xcf);write_data(0x48);CurrentTime[2]++;if(CurrentTime[2]>23)Curren tTime[2]=0;break;//shicase4:write_com(0xcf);write_data(0x59);CurrentTime[6]++;if(CurrentTime[6]>99)Curren tTime[6]=0;break;//yearcase5:write_com(0xcf);write_data(0x6d);CurrentTime[5]++;if(CurrentTime[5]>12)Curren tTime[5]=1;break;//monthcase 6://day{write_com(0xcf);write_data(0x44);CurrentTime[4]++;switch(CurrentTime[5]){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(CurrentTime[4]>31)CurrentTime[4]=1;break;case 4:case 6:case 9:case 11:if(CurrentTime[4]>30)CurrentTime[4]=1;break;case 2: if(CurrentTime[6]%4)if(CurrentTime[4]>28)CurrentTime[4]=1;else if(CurrentTime[4]>29)CurrentTime[4]=1;break;default:break;}}break;7:write_com(0xcf);write_data(0x57);CurrentTime[3]++;if(CurrentTime[3]>7)Current Time[3]=1;break; //weekdefault:break;}}break;case 2: //按键2:减{switch(SetMode){case1:CurrentTime[0]--;if(CurrentTime[0]>254)CurrentTime[0]=59;break;//miaocase2:CurrentTime[1]--;if(CurrentTime[1]>254)CurrentTime[1]=59;break;//fencase3:CurrentTime[2]--;if(CurrentTime[2]>254)CurrentTime[2]=23;break;//shicase4:CurrentTime[6]--;if(CurrentTime[6]>254)CurrentTime[6]=99;break;//yearcase5:CurrentTime[5]--;if(CurrentTime[5]>254)CurrentTime[5]=12;break;//monthcase 6://day{CurrentTime[4]--;switch(CurrentTime[5]){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(CurrentTime[4]>254)CurrentTime[4]=31;break; case 4:case 6:case 9:case 11:if(CurrentTime[4]>254)CurrentTime[4]=30;break; case 2: if(CurrentTime[6]%4)if(CurrentTime[4]>254)CurrentTime[4]=28;else if(CurrentTime[4]>254)CurrentTime[4]=29;break;default:break;}case7:CurrentTime[3]--;if(CurrentTime[3]>7)CurrentTime[3]=1;break; //week default:break;}}break;case 3: //按键3中途退出设置模式{if(SetMode!=0) //在设置模式中中途退出{SetTime(CurrentTime);SetMode=0;SwitchRTC(1); //开计时write_com(0xcf);write_data(0x20);}}break;case 4: //按键4设置闹铃{write_com(0xcf);write_data(0x20);while(Clock!=0) //用Clock来进行判断闹铃设置完否{switch(Clock){case 1: { //****************闹铃1while(FinishClockSet1!=1){write_com(0x80);write_data(ClockSetSave1[2]/10+48); //Hourwrite_data(ClockSetSave1[2]%10+48);write_com(0x83);write_data(ClockSetSave1[1]/10+48); //Minutewrite_data(ClockSetSave1[1]%10+48);write_com(0x86);write_data(ClockSetSave1[0]/10+48); //Secondwrite_data(ClockSetSave1[0]%10+48);write_com(0x8a); //闹铃设置序号显示write_data(0x43);write_data(0x4c);write_data(0x4f);write_data(0x43);write_data(0x4b);write_data(0x31);if(ClockEn1==0){write_com(0x89);write_data(0x20);}else{write_com(0x89);write_data(0x2a);}ClockKeyValue=GetKey();switch(ClockKeyValue){case 0: //按键0设置闹钟{ClockSet++;write_com(0xcf);write_data(table1[ClockSet]);if(ClockSet>3) //设置键按完三次自动进入下一个闹铃设置{ClockSet=0;FinishClockSet1=1;Clock++;write_com(0xcf);write_data(0x20);}}break;case 1: //闹铃设置+{switch(ClockSet){case1:write_com(0xcf);write_data(0x53);ClockSetSave1[0]++;if(ClockSetSave1[0]>59)Cl ockSetSave1[0]=0;break;//miaocase2:write_com(0xcf);write_data(0x4d);ClockSetSave1[1]++;if(ClockSetSave1[1]>59)Cl ockSetSave1[1]=0;break;//fencase3:write_com(0xcf);write_data(0x48);ClockSetSave1[2]++;if(ClockSetSave1[2]>23)ClockSetSave1[2]=0;break;//shidefault:break;}}break;case 2: //闹铃设置2{switch(ClockSet){case1:write_com(0xcf);write_data(0x53);ClockSetSave1[0]--;if(ClockSetSave1[0]>254)C lockSetSave1[0]=59;break;//miaocase2:write_com(0xcf);write_data(0x4d);ClockSetSave1[1]--;if(ClockSetSave1[1]>254)C lockSetSave1[1]=59;break;//fencase3:write_com(0xcf);write_data(0x48);ClockSetSave1[2]--;if(ClockSetSave1[2]>254)C lockSetSave1[2]=23;break;//shidefault:break;}}break;case 3: //中途退出闹铃设置{FinishClockSet1=1;Clock=0;write_com(0x89); //闹铃设置序号清除显示write_data(20);write_data(20);write_data(20);write_com(0x8e);write_data(20);write_data(20);write_com(0xcf);write_data(0x20);}break;case 5: { //是否开启闹钟,并予以显示if(ClockEn1==0){ClockEn1=1;write_com(0x89);write_data(0x2a);}else{ClockEn1=0;write_com(0x89);write_data(0x20);}}break;default:break;} //case4->case1 end}}break;case 2 :{ //****************闹铃2while(FinishClockSet2!=1){write_com(0x80);write_data(ClockSetSave2[2]/10+48); //Hourwrite_data(ClockSetSave2[2]%10+48);write_com(0x83);write_data(ClockSetSave2[1]/10+48); //Minutewrite_data(ClockSetSave2[1]%10+48);write_com(0x86);write_data(ClockSetSave2[0]/10+48); //Secondwrite_data(ClockSetSave2[0]%10+48);write_com(0x8a); //闹铃设置序号显示write_data(0x43);write_data(0x4c);write_data(0x4f);write_data(0x43);write_data(0x4b);write_data(0x32);if(ClockEn2==0){write_com(0x89);write_data(0x20);}else{write_com(0x89);write_data(0x2a);}ClockKeyValue=GetKey();switch(ClockKeyValue){case 0:{ClockSet++;write_com(0xcf);write_data(table1[ClockSet]);if(ClockSet>3){ClockSet=0;FinishClockSet2=1;Clock=0;write_com(0x89); //闹铃设置序号清除显示write_data(20);write_data(20);write_data(20);write_com(0x8e);write_data(20);write_data(20);write_com(0xcf);write_data(0x20);}}break;case 1:{switch(ClockSet){case1:write_com(0xcf);write_data(0x53);ClockSetSave2[0]++;if(ClockSetSave2[0]>59)Cl ockSetSave2[0]=0;break;//miaocase2:write_com(0xcf);write_data(0x4d);ClockSetSave2[1]++;if(ClockSetSave2[1]>59)Cl ockSetSave2[1]=0;break;//fencase3:write_com(0xcf);write_data(0x48);ClockSetSave2[2]++;if(ClockSetSave2[2]>23)Cl ockSetSave2[2]=0;break;//shidefault:break;}}break;case 2:{switch(ClockSet){case1:write_com(0xcf);write_data(0x53);ClockSetSave2[0]--;if(ClockSetSave2[0]>254)C lockSetSave2[0]=59;break;//miaocase2:write_com(0xcf);write_data(0x4d);ClockSetSave2[1]--;if(ClockSetSave2[1]>254)C lockSetSave2[1]=59;break;//fencase3:write_com(0xcf);write_data(0x48);ClockSetSave2[2]--;if(ClockSetSave2[2]>254)C lockSetSave2[2]=23;break;//shidefault:break;}}break;case 3:{FinishClockSet2=1;Clock=0;write_com(0x89); //闹铃设置序号清除显示write_data(20);write_data(20);write_data(20);write_com(0x8e);write_data(20);write_data(20);write_com(0xcf);write_data(0x20);}break;case 5: {if(ClockEn2==0){ClockEn2=1;write_com(0x89);write_data(0x2a);}else{ClockEn2=0;write_com(0x89);write_data(0x20);}}break;default:break;} //case4->case2 end}}break;default:break;}}}break;case 7: { //12小时与24小时进制进行转换if((CurrentTime[2]>12)){CurrentTime[2]=CurrentTime[2]-12;SetTime(CurrentTime);}else{CurrentTime[2]=CurrentTime[2]+12;SetTime(CurrentTime);}}break;default:break;}}七、心得体会经过两周的的课程设计,过程曲折可谓一语难尽。

相关文档
最新文档