基于c语言单片机智能电子日历课程设计
- 格式:doc
- 大小:223.00 KB
- 文档页数:21
c语言日历课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中结构体、数组、函数等基本概念及其应用。
2. 学生能运用C语言编写程序,实现日历的显示、日期的计算和查询等功能。
3. 学生了解并掌握C语言中文件操作的基础知识,能够实现日历数据的保存和读取。
技能目标:1. 学生能够运用所学知识,独立设计并实现一个具有基本功能的日历程序。
2. 学生能够运用调试工具对程序进行调试,找出并修正程序中的错误。
3. 学生能够通过编写程序,锻炼逻辑思维能力和解决问题的能力。
情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,树立编程学习的自信心。
2. 学生通过小组合作,培养团队协作精神和沟通能力,增强集体荣誉感。
3. 学生能够认识到编程在生活中的实际应用,提高对计算机科学的认识和尊重。
分析课程性质、学生特点和教学要求:1. 本课程为C语言编程实践课,注重培养学生的实际操作能力和编程思维。
2. 学生为高中生,具备一定的编程基础和逻辑思维能力,但对复杂问题解决能力有待提高。
3. 教学要求以学生为主体,注重启发式教学,引导学生自主探究和合作学习。
1. 熟练掌握C语言基础知识,如结构体、数组、函数等。
2. 独立设计和实现日历程序,具备基本的编程能力。
3. 能够进行程序的调试和优化,提高解决问题的能力。
4. 增强对编程学习的兴趣和自信心,培养良好的团队协作和沟通能力。
二、教学内容1. 结构体和数组的使用:- 结构体定义及使用方法- 结构体数组及其操作- 课本第四章相关内容2. 函数的编写与应用:- 函数定义、声明和调用- 递归函数的理解与应用- 课本第三章相关内容3. 日历算法设计与实现:- 日期计算方法(如闰年判断、每月天数计算)- 日历显示格式设计- 课本第二章相关内容4. 文件操作:- 文件的打开、关闭、读写操作- 日历数据的保存与读取- 课本第五章相关内容5. 程序调试与优化:- 常见错误类型及调试方法- 代码优化技巧- 课本第六章相关内容6. 实践项目:日历程序设计与实现- 学生分组进行项目实践,运用所学知识完成日历程序设计- 包括日历显示、日期查询、添加备忘录等功能- 结合课本各章节内容进行教学安排教学进度安排:1. 结构体和数组(2课时)2. 函数编写与应用(2课时)3. 日历算法设计与实现(3课时)4. 文件操作(2课时)5. 程序调试与优化(1课时)6. 实践项目:日历程序设计与实现(4课时)教学内容安排注重科学性和系统性,结合课本各章节内容,使学生能够逐步掌握C语言编程知识,为完成日历程序设计奠定基础。
基于单片机的电子万年历设计一、概述随着科技的快速发展和人们对生活品质的追求,电子设备在日常生活中扮演着越来越重要的角色。
电子万年历作为一种集日期、时间显示于一体的实用电子产品,已经深入到人们的日常生活和工作中。
传统的机械式日历已经无法满足现代人对时间精确性和功能多样性的需求,基于单片机的电子万年历设计应运而生,成为了当前研究的热点之一。
基于单片机的电子万年历设计,旨在利用单片机(如STC89CAT89C51等)的强大计算和控制能力,结合液晶显示屏(LCD)、按键输入等外设,实现时间的准确显示、日期的自动更新、闹钟提醒、温度显示等多样化功能。
该设计不仅具有高度的集成性和可靠性,而且能够通过编程实现各种定制化的功能,满足不同用户的需求。
本文将对基于单片机的电子万年历设计进行详细的介绍和分析,包括设计思路、硬件组成、软件编程等方面。
通过本文的阅读,读者可以了解电子万年历的基本原理和设计方法,掌握单片机在电子万年历设计中的应用技巧,为实际的开发工作提供有益的参考和借鉴。
1.1 研究背景与意义随着科技的不断进步,人们日常生活和工作中对于时间的精度和便捷性的要求日益提高。
传统的机械式日历和简单的电子时钟已经无法满足现代生活的需求。
电子万年历作为一种集时间显示、日历查询、定时提醒等多功能于一体的电子装置,在日常生活、工作乃至科研领域都具有广泛的应用价值。
基于单片机的电子万年历设计,不仅可以提供准确的时间显示,还能实现复杂的日期计算、农历显示、节假日提示等功能,极大地提高了时间管理的效率和便捷性。
单片机作为一种集成度高、功耗低、价格适中的微型计算机,非常适合用于小型化、智能化的电子产品设计,如电子万年历。
本研究的意义在于,通过对基于单片机的电子万年历的设计研究,可以推动微型计算机技术和电子时钟技术的融合发展,提升电子产品的智能化水平,满足人们日益增长的生活和工作需求。
同时,该研究还可以为相关领域的技术人员提供参考和借鉴,推动电子万年历产品的不断创新和优化。
电子日历 c 课程设计一、课程目标知识目标:1. 学生能理解电子日历的基本概念,掌握其功能与操作方法。
2. 学生能了解电子日历在生活中的应用,认识到电子日历与传统日历的区别。
3. 学生能运用所学知识,分析电子日历的优缺点。
技能目标:1. 学生能独立操作电子日历,进行日期查询、日程安排等基本操作。
2. 学生能利用电子日历进行时间管理,提高学习效率。
3. 学生能通过小组合作,共同完成一个创意电子日历项目,锻炼团队协作能力。
情感态度价值观目标:1. 学生培养对电子产品的兴趣,激发学习信息技术的热情。
2. 学生认识到时间管理的重要性,养成良好的时间观念。
3. 学生在合作过程中,学会尊重他人意见,培养团队协作精神。
课程性质:本课程为信息技术课程,旨在帮助学生掌握电子日历的使用方法,提高时间管理能力。
学生特点:六年级学生已具备一定的信息技术基础,对电子产品有一定了解,好奇心强,善于合作。
教学要求:教师需关注学生的个体差异,提供个性化的指导,鼓励学生积极参与,注重培养实践操作能力和团队协作能力。
通过本课程的学习,使学生将所学知识应用于生活,提高自身素质。
二、教学内容1. 电子日历的认识:介绍电子日历的定义、发展历程及其与传统日历的异同,帮助学生建立电子日历的基本概念。
- 教材章节:第一章 信息技术与日常生活2. 电子日历的功能与操作:讲解电子日历的主要功能,如日期查询、日程安排、闹钟提醒等,并指导学生进行实际操作。
- 教材章节:第二章 电子产品及其应用3. 时间管理:引导学生运用电子日历进行时间管理,提高学习效率,培养学生良好的时间观念。
- 教材章节:第三章 信息技术与时间管理4. 创意电子日历项目:组织学生分组合作,设计并实现一个具有特色的电子日历项目,提高学生团队协作能力和创新能力。
- 教材章节:第四章 信息技术与项目实践5. 电子日历的评价:分析电子日历的优缺点,引导学生正确看待电子产品,培养学生客观评价事物的能力。
c语言课程设计电子日历一、课程目标知识目标:1. 理解C语言中结构体、数组、函数等基本概念及其在程序设计中的应用;2. 学会使用C语言编写具有日期计算功能的程序,掌握闰年和平年的判断方法;3. 掌握模块化编程思想,能将电子日历划分为多个功能模块并进行有效整合。
技能目标:1. 能运用C语言编写、调试简单的电子日历程序;2. 能运用结构体、数组等数据结构存储和管理日期数据;3. 能通过函数调用的方式实现日历的查询、添加、删除等功能。
情感态度价值观目标:1. 培养学生严谨、细心的编程习惯,提高问题分析和解决能力;2. 培养学生的团队合作意识,学会在团队中沟通、协作、共同完成任务;3. 激发学生对计算机编程的兴趣,培养探索精神,认识到编程在生活中的实际应用。
课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握C语言编程技能,培养编程思维。
学生特点:高中生,具备一定的C语言基础,对编程有一定兴趣,但编程实践能力有待提高。
教学要求:注重理论与实践相结合,关注学生个体差异,鼓励学生积极参与,充分调动学生的主观能动性。
将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. C语言基础知识回顾:结构体、数组、函数的定义与使用;2. 日期处理:闰年和平年的判断,日期的增加与减少;3. 电子日历功能模块设计:- 显示当前日期模块;- 查询日期模块;- 添加日程模块;- 删除日程模块;- 修改日程模块;4. 模块化编程:将电子日历划分为多个功能模块,并进行有效整合;5. 程序调试与优化:学会使用调试工具,找出程序中的错误并进行优化。
教学内容与教材关联性:1. C语言基础知识:参考教材第3章“数据类型”和第4章“控制语句”;2. 日期处理:参考教材第7章“数组”和第8章“函数”;3. 电子日历功能模块设计:结合教材第10章“结构体”和第11章“指针”;4. 模块化编程:参考教材第12章“文件操作”和第13章“模块化编程”。
单片机课程设计报告电子万年历单片机课程设计报告:电子万年历一、设计简介在本次单片机课程设计中,我们选择了电子万年历作为设计主题。
电子万年历是一种结合了数字电路、单片机技术和实时时钟(RTC)技术的电子产品,它具有显示年份、月份、星期、日、时、分、秒的功能,还可以根据用户的需求进行定时、闹钟、报时等功能。
二、硬件设计我们采用了基于8051内核的单片机作为主控芯片。
该单片机具有丰富的I/O 端口,适于实现各种复杂的输入输出操作。
此外,它还内置了定时器和中断控制器,可以很方便地实现实时时钟功能。
1.显示模块:为了方便用户查看时间信息,我们选用了LCD显示屏作为显示设备。
LCD屏具有功耗低、体积小、显示内容丰富等优点。
2.实时时钟(RTC)模块:我们采用了常用的DS1302芯片作为实时时钟模块。
该芯片可以提供秒、分、时、日、星期、月、年的信息,而且还有可编程的报警功能。
3.按键模块:为了实现人机交互,我们设计了一组按键。
用户可以通过按键来调整时间、设置闹钟等。
4.电源模块:为了保证系统的稳定工作,我们采用了稳定的5V直流电源。
三、软件设计我们采用了C语言编写程序。
程序主要由以下几个部分组成:1.主程序:主程序主要负责读取RTC模块的时间信息,并控制LCD显示屏显示时间。
同时,主程序还要检测按键输入,根据用户的需求进行相应的操作。
2.RTC驱动程序:为了正确地读取和设置DS1302芯片的时间信息,我们编写了相应的驱动程序。
驱动程序包括初始化和读写寄存器两部分。
3.按键处理程序:按键处理程序用于检测按键输入,并根据按键值执行相应的操作。
比如,用户可以通过按键来增加或减少时间,设置闹钟等。
4.LCD显示程序:LCD显示程序用于控制LCD显示屏的显示内容。
在本设计中,我们使用了点阵字符库,将时间信息以字符的形式显示在LCD屏上。
四、测试与验证为了确保我们的电子万年历设计正确无误,我们进行了以下的测试和验证:1.硬件测试:首先,我们对硬件电路进行了测试,确保每个模块都能正常工作。
单片机简易日历课程设计一、课程目标知识目标:1. 理解单片机的基础知识,掌握其内部结构和功能;2. 学习简易日历的原理,了解日期、时间与单片机编程的关系;3. 掌握C语言编程基础,运用其进行单片机程序设计。
技能目标:1. 能够独立完成单片机的硬件连接,进行基本的程序下载与调试;2. 运用C语言编写简易日历程序,实现日期、时间的显示与修改;3. 培养学生动手实践能力,提高问题分析及解决能力。
情感态度价值观目标:1. 培养学生对单片机编程的兴趣,激发创新意识;2. 培养学生的团队协作精神,提高沟通与交流能力;3. 培养学生严谨、细心的学习态度,养成良好的编程习惯。
分析课程性质、学生特点和教学要求,本课程旨在通过单片机简易日历的设计与实现,让学生掌握单片机基础知识、编程技能,并培养其团队协作和创新能力。
课程目标具体、可衡量,便于教学设计和评估。
通过本课程的学习,学生将能够独立完成单片机程序的编写与调试,为后续相关课程打下坚实基础。
二、教学内容1. 单片机基础知识:介绍单片机的内部结构、工作原理及功能,涉及教材第1章内容;- 单片机硬件结构及引脚功能;- 单片机工作原理及指令系统。
2. C语言编程基础:学习C语言基础知识,掌握基本语法,为单片机编程打下基础,涉及教材第2章内容;- 数据类型、变量与常量;- 运算符、表达式及语句;- 控制结构(顺序、选择、循环)。
3. 简易日历原理:学习日期、时间的计算方法,了解日历程序设计思路,涉及教材第3章内容;- 日期、时间的基本概念;- 日历程序设计思路及算法。
4. 单片机程序设计:结合C语言,学习单片机程序编写与调试,实现简易日历功能,涉及教材第4章内容;- 单片机程序框架及编程规范;- 简易日历程序的编写与调试;- 硬件连接及程序下载。
5. 实践操作:安排学生进行单片机简易日历的实践操作,巩固所学知识,涉及教材第5章内容;- 硬件连接与程序下载;- 程序调试与优化;- 团队合作、沟通交流。
引言日历作为我们日常生活中必不可少的工具之一,是人们记录时间、安排活动以及管理生活的重要工具。
在现代科技的发展下,基于单片机的日历设计方案应运而生。
本文将介绍一种基于单片机的日历设计方案,该方案通过单片机的控制和显示功能,能够提供准确的日期和时间显示,具备一些常见的日历功能,并具备一定的扩展性和灵活性。
设计原理硬件设计单片机选择在本设计方案中,选择常见的8位单片机AT89C52作为核心控制芯片。
该单片机具备足够的IO口,能够方便地控制各个模块的输入和输出。
时钟模块为了确保日历的准确性,需要使用一个精确的时钟模块。
在本设计中,选择DS1302时钟模块用于提供稳定的时钟信号。
该模块具备低功耗、精准度高的特点,能够满足日历的需求。
显示模块为了方便用户查看日期和时间,选择一个适合的显示模块十分重要。
本设计方案中,选择TM1637四位数码管模块用于显示日期和时间。
该模块通过单片机的IO口能够方便地进行控制,并能够显示数字和一些常见的符号。
软件设计时钟控制通过单片机与DS1302时钟模块进行通信,获取当前的日期和时间信息。
通过设置注册器来读取年、月、日、时、分和秒的值,并将其保存在单片机内部的变量中。
显示控制通过单片机与TM1637数码管模块进行通信,将日期和时间的值显示在数码管上。
通过设置数码管的段选择和段数据,可以实现具体的数字和符号的显示。
日历功能在本设计方案中,实现了一些常见的日历功能,例如星期显示、日期调整、闹钟设置等。
通过单片机的按键输入,可以实现各种功能的切换和设置。
实现步骤1.连接硬件模块:将单片机、DS1302时钟模块和TM1637数码管模块按照原理图连接起来,并接上所需的电源。
2.编写主程序:使用C语言编写主程序,包括时钟控制、显示控制和日历功能的实现。
3.编译烧录:使用相应的编译器将主程序编译生成可执行文件,并将其烧录到单片机中。
4.测试调试:将单片机上电,通过按键输入进行各种功能的测试和调试,确保日历的正常工作。
多功能电脑时钟设计报告一、实训目的意义及任务要求1.1目的意义单片机的使用领域已十分广泛,如智能仪器仪表、实时工控、通讯设备、导航系统、家用电器等。
“学好单片机,工作就不成问题了。
”老师说,可见学好单片意义之重大。
单片机作为一门基础学科,既是对前期学习C语言的综合运用,也是理论与实践相结合的一大体现。
电脑时钟有效地检验了对DS1302时钟芯片,STC89C52单片机中断,独立键盘,数码管,蜂鸣器,LED灯的控制,同时提高了学生的工程系统设计能力。
LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。
所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。
通过此次单片机系统综合训练,不仅要让学生认识了解它,而且增强学生学科积极性。
2.2任务要求要求设计的电脑时钟完成以下功能:1.基本功能①实时显示当前时间(4位数码管显示,2位显示小时,2位显示分钟,第2位小数点0.5秒亮,0.5秒灭)。
②能用一按键依次切换显示年及月日。
③能修改当前时钟。
④具有秒表功能,显示秒和百分秒。
2. 扩展功能①单片机与PC机的通讯(可选)②可设定初值的倒计时功能(可选)③闹钟及报时功能(可选)。
④显示星期(可选)。
二、实训方案2.1 系统分析根据系统功能要求,可将系统组成结构分成四大部分:DS1302时钟芯片读数据写数据模块,数码管显示模块,按键设置调节时间模块,秒表功能模块,。
硬件电路接线图如后图,本系统采用DS1302时钟芯片,四位数码管显示年月,日星期,时分,以及秒和百分秒。
其中年月日,时分秒和星期采用DS1302的数据显示,秒表采用单片机定时中断实现。
本系统共用到四个按键,且均为独立对地按键,分别用于显示切换,修改切换,修改加一,修改减一,秒表启动暂停和数据清零。
2.2 器件选择选用STC89C52芯片,频率为11.0592MHz;由于系统要求显示年月日小时和分钟,采用四位LED数码管显示即可;按键是用来设置北京时间或闹钟时间或启动秒表等功能的,设置三个按键:显示切换模式键(key3)、修改数据键(key0)、加一键(key1)、减一键(key2)。
基于单片机的电子日历设计一、设计目的和要求单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。
单片机是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
通过对一个基于单片机的能实现电子日历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。
系统由主控制器AT89C51、时钟电路DS1302、显示电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。
系统设计要求:电子日历能显示,能调整。
基于51系列的单片机进行的电子万年历设计可以显示年月日时分秒及周信息,具有可调整日期和时间功能。
在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。
具体实现功能:显示年月日时分秒及星期信息,具有可调整日期和时间功能,与即时时间同步。
主要使用到的工具和器件:✧Keilc51✧Protues✧DS1302✧AT89S52✧LCD12864二、方案设计每一系统都有几个核心的模块。
它对整个系统的性能有非常大的影响。
比如系统的主控。
2.1 主控芯片选择方案论证方案一:选择51系列的单片机;AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
课程设计报告课程名称:单片机课程设计报告题目:智能电子日历学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12 月25 日课程设计任务书摘要本设计是根据我们所学的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。
单片机技术作为电子专业的基础课程之一,对我们将来的工作以与生活和学习都有很密切的联系;近年来随着电子技术和微机计算机的迅速发展,单片机的性能不断更新和提高,应用领域也不断扩大,已经在工业控制、尖端科技、智能仪器、汽车电子系统、办公自动化系统、通信产品等等领域有广泛的应用,成为现代电子系统中最重要的智能化核心器件。
关键词:单片机,电子技术,智能化目录一、概述 (5)二、方案设计与论证 (5)1.单片机芯片选择 (5)2.时间计算模块 (5)3.显示模块 (6)三、单元电路设计 (6)1.单片机最小系统电路 (7)2.数码管电路 (8)3.按键电路 (9)四、程序设计 (10)1.程序总体思路和分析 (10)2.程序清单 (11)五、结论与心得 (19)六、参考文献 (20)一、概述本系统以STC89C52单片机为控制核心,通过单片机计时器模拟时间输出,并将时间通过数码管实时显示出来,通过相应的按键调整相应的数值和功能。
所以本设计可以分为以下几个模块:显示模块、按键模块、定日输出模块。
下面对各个模块进行逐一分析。
二、方案设计与论证时间计算模块有两种方式,一种利用现成的时间计时芯片实时读取时间,然后显示;第二种是利用STC89C52单片机内部的定时/计数功能,实现时间的计算。
1.单片机芯片选择方案一:采用89C52作为硬件核心采用Flash ROM,内部具有4KB ROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在先编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:采用AT89S52作为硬件核心片内ROM全部采用Flash ROM;能以3V的超低压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成一定的损坏。
所以选择采用AT89S52作为主控制系统。
2.时间计算模块方案一:DS1302芯片DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,才用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月、年,一个月小于31天时可以自动调整,且具有闰年补偿功能。
工作电压宽带2.5~5.5V。
采用双电源供电,可以设置备用电源充电方式,提供了对后备电源进行涓流充电的能力。
利用单片机的控制功能就可以实现实时计时的功能,而且消耗的系统资源少,程序简单。
方案二:单片机内部定时器/计数器STC89C52单片机内部带有定时器/计数功能,此定时功能时通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592MHz的晶振就能实现零误差的计时,因此可以利用此功能实现计时。
从任务要求来看,CPU的系统消耗很少,有足够的内部资源利用定时器实现计时功能和处理其他算法。
任务要求不需要有掉电保护功能,这样可以减少工作量和系统成本。
3.显示模块方案一:使用液晶显示屏显示时间数字液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以与影响稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。
但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。
在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。
方案二:使用传统的LED数码管显示数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精度可靠,操作简单。
数码管采用BCD编码显示数字,程序编译容易,资源占用较少。
根据以上的论述,采用方案二。
我们采用八段四位一体数码管动态显示,由于显示位数较多,故应使用显示驱动,在本设计中采用三极管来作为驱动。
4.按键模块方案一:使用独立式键盘独立式键盘是指直接用I/O口线构成的单个按键电路。
独立式按键电路配置灵活,软件结构简单。
方案二:使用矩阵式键盘矩阵式键盘是由行线和列线组成,按键位于行、列交叉点上,行线、列线分别连接到按键开关的两端。
其特点是简单且不增加成本,这种键盘适合按键数目较多的场合。
根据以上的论述,所以采用方案二。
三、单元电路设计1.单片机系统介绍AT89S52是一种低功耗高性能CHMOS 8位单片机,管脚如图所示。
片内含4Kbytes ISP的可反复擦写1000次Flash只读程序存储器,128bytes 的随机存取数据存储器(RAM)。
其特点如下:-兼容MCS-51指令系统;-最大的工作频率为33MHz;-具有双工UART串行通道;-内部集成看门狗计时器,不需要再外接看门狗计时器单元电路;-双数据指示器;-支持ISP(在线更新程序)功能,其优势在于改写单片机存储器内的程序不需要把芯从工作环境中剥离;-电源关闭标识;-全新的加密算法,使程序的保密性大大加强;-电压范围宽达4-5.5V,而89C52在低于4.8V或高于5.3V则无法工作;-烧写寿命长,其标称为1000次,实际至少是1000-10000次,这样有利于初学者反复烧写,减低学习成本;AT89S52 是一种低功耗、高性能的CMOS 8位单片机。
它带有8K Flash 可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和82C52的指令系统与引脚兼容,片内Flash 集成在一个芯片上,可用与解决复杂的问题,且成本较低。
AT89S52提供了8K字节Flash ,256字节RAM,32线I/O口,3个16位定时器/计数器,6向量两极中断,一个双工串行口,片内根据振荡器和始终电路等标准功能。
此外,AT89S52设有静态逻辑,并支持软件选择的两种节电运行方式、空闲方式使CPU停止工作,而允许RAM、定时器/计数器、串行口和中断系统继续工作。
掉电方式下,片内振荡器停止工作,由于之中被冻结,一切能都停止,只有片内RAM的内容被保存,直到硬件复位才恢复正常工作。
AT89S52结构框图:1.数码管电路介绍由于七段数码显示器在显示字形代码时需要有足够的功率,单片机口线的驱动能力明显不够,所以需在显示器前加显示驱动器,以提高其输出功率,满足显示器的需求。
在本设计中,我采用三极管作为显示电路的8路正向驱动器。
LED显示器俗称数码管,在其内部是由8个发光二极管加限流电阻组成,其连接方式有共阴和共阳两种,在共阴极接法中,因公共端接地,只要给某一段加高电平,该段就会亮。
而在本设计中采用的是共阳极接法,公共端接+5V电源,在某一段上加低电平,该段就会亮。
在本次设计中,为了使硬件电路更简单化,我采用四位一体的LED数码管,显示原理与单个LED的显示原理完全相同。
但在它的内部把四个数码管的段控端对应的连在了一起与单个的数码管相比其外部电路连接更加简单,故它只有8个段控端和4个位控端,4个位控端分别对四个数码管进行控制。
3.按键模块在单片机控制电路中,可把单片机使用的键盘分为独立式和矩阵式两种。
独立式实际上就是一组独立的按键,这些按键可直接与单片机的I/O口连接,即每个按键独占一条口线,这种接法简单。
矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵。
本设计中键盘数目较少,且为安装方便,因此在本设计中采用独立式接法。
如图所示。
控制电路按从一个键到键的功能被执行主要应包括两项工作:一是键的识别,即在键盘中找出被按的是哪个键,另一项是键功能的实现。
第一项工作是使用接口电路实现的,而第二项工作则是通过执行中断服务程序来完成。
四、程序总体思路和分析1.程序总体思路和分析主函数的流程图:2.程序清单#include <reg52.h>#include <intrins.h>unsigned int time=0;unsigned char num=0;unsigned char key=0;unsigned char time_key=0;/*********************************/unsigned int year=1; //年unsigned char yue=1; //月unsigned char day=1; //日unsigned char week=1;/*********************************/unsigned char LED=0;unsigned char flag_led=0;unsigned char strl_led[] = {0,0,0,0,0,0,0,0};unsigned char day_add;unsigned char SURE;/*********************************/unsigned char code str[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff };unsigned char su[] = {10,10,10,10,10,10,10,10};void delay_SMG(unsigned char t){unsigned char d;for(;t>0;t--)for(d=0;d<50;d++);}/*********************************//*************DIS_LED*************/void DIS_play(){unsigned char k;unsigned char dis;dis = 0x01;for(k=0;k<8;k++){P0 = dis;P2 |= 0xc0;P2 &= 0x1f;if(k==2 || k==4 || k==6)P0 = str[su[k]] & 0x7f;else P0 = str[su[k]];P2 |= 0xe0;P2 &= 0x1f;dis = dis << 1;delay_SMG(4);P0 = 0xff;P2 |= 0xe0;P2 &= 0x1f;}}void init_all(){P0 = 0x00;P2 = 0xa0;P2 = 0x00;P0 = 0x00;P2 = 0xa0;P2 = 0x00;P0 = 0xff;P2 = 0x80;P2 = 0x00;P0 = 0x00;P2 = 0xc0;P2 = 0x00;}void DIS_led(){{P0 = 0xfe;P2 = 0x80;P2 = 0x00;}else if(LED == 2){P0 = 0xfd;P2 = 0x80;P2 = 0x00;}else if(LED == 3){P0 = 0xfb;P2 = 0x80;P2 = 0x00;}else if(LED == 4){P0 = 0xf7;P2 = 0x80;P2 = 0x00;}else if(LED == 5){P0 = 0xef;P2 = 0x80;P2 = 0x00;}else if(LED == 0){P0 = 0xff;P2 = 0x80;P2 = 0x00;}}//******************************* //******************************* void IN_key(){unsigned char hang,lei;unsigned char zong;P3 = 0x0f;{time_key++;if(time_key == 50){if(P3 != 0x0f){hang = P3 & 0x0f;P3 = 0xf0;lei = P3 & 0xf0;zong = hang | lei;switch (zong){case 0x7e: key = 1; //模式选择按键flag_led ++;if(flag_led > 6) flag_led = 0;break;case 0xbe: key = 2;if(flag_led == 0) SURE = 3;if(flag_led != 0){SURE++; //确定按键if(SURE > 1)SURE = 0;}break;case 0xde: key = 3;if(flag_led > 0) //按下模式选择键{day_add++;if(yue==1 || yue==3 || yue==5 || yue== 7 || yue==8 || yue== 10 || yue==12){if(day_add > 31)day_add = 31;}if(yue==4 || yue==6 || yue==9 || yue== 11){if(day_add > 30)day_add = 30;}if(yue==2){if((year%4 ==0 && year%100 !=0) || (year%400 ==0) ){if(day_add > 28)day_add = 28;}else{if(day_add > 29)day_add = 29;}}}break;case 0xee: key = 4;if(flag_led > 0) //按下模式选择键{if(day_add > 0)day_add--;}break;}}}else if(time_key > 50)time_key = 100;}else time_key = 0;}void main(){TMOD = 0x01;TH0 = (65536 - 1000) / 256;TL0 = (65536 - 1000) % 256;EA = 1;ET0 = 1;TR0 = 1;init_all();while(1){DIS_play();DIS_led();}}void time_1() interrupt 1{TH0 = (65536 - 1000) / 256;TL0 = (65536 - 1000) % 256;time++;if(time == 2000){time = 0;week++;if(week == 8) week=1;day++;if(yue==1 || yue==3 || yue==5 || yue== 7 || yue==8 || yue== 10 || yue==12) {if(day == 32){day = 1;yue++;}}if(yue == 2){if((year%4 ==0 && year%100 !=0) || (year%400 ==0) ){if(day == 30){day = 1;yue++;}}else{if(day == 29){day = 1;yue++;}}}if(yue==4 || yue==6 || yue==9 || yue== 11){if(day == 31){day = 1;yue++;}}if(yue == 13){yue = 1;day = 1;year++;}}IN_key();if(SURE == 1) //按下确认键确认日期{if(flag_led > 0){strl_led[flag_led] = day_add;flag_led = 0;SURE = 0;day_add = 0;}}if(strl_led[1] == day){if(SURE == 3) LED = 0; //按下关断键else LED = 1;}else if(strl_led[2] == day){if(SURE == 3) LED = 0; //按下关断键else LED = 2;}else if(strl_led[3] == day){if(SURE == 3) LED = 0; //按下关断键else LED = 3;}else if(strl_led[4] == day){if(SURE == 3) LED = 0; //按下关断键else LED = 4;}else if(strl_led[5] == day){if(SURE == 3) LED = 0; //按下关断键else LED = 5;}else if(strl_led[6] == day){if(SURE == 3) LED = 0; //按下关断键else LED = 6;}else{LED = 0;SURE = 0;}if(LED != 6){su[1] = year / 10 % 10;su[2] = year % 10;su[3] = yue / 10;su[4] = yue % 10;su[5] = day / 10;su[6] = day % 10;su[7] = week % 10;}else if(LED == 6) {su[0] = su[1] = su[2] = su[3] = su[4] = su[5] = su[6] = su[7] = 10;} }五、结论与心得随着放假日子的到来,我的课程设计终于完成了,课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。