基于单片机的智能调光灯设计_第1页
基于单片机的智能调光灯设计_第2页
基于单片机的智能调光灯设计_第3页
基于单片机的智能调光灯设计_第4页
基于单片机的智能调光灯设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、【有全套cad图】需完整cad+说明书请联系qq1175231241 海量毕业设计 课程设计,承接定制、更多设计请移步:本科毕业设计论文 题 目 基于单片机的智能调光灯设计 专业名称 自动化 学生姓名 屈晓东 指导教师 李雪霞 毕业时间 2014.06 更多设计请移步:咨询 西北工业大学明德学院本科毕业设计论文 设计论文毕业 任务书一、题目:基于单片机的智能调光灯设计二、指导思想和目的要求:通过毕业设计,使学生对所学电子工艺、电路基础知识、模电、数电、等电子基础课程的基本知识加深理解,掌握单片机的基本指令及基本结构,并将其与实际工程应用紧密结合起来,培养创新意识,增强分析问题解决问题能力,为尽

2、快进入社会角色,熟悉相关开发工作流程、项目小组组成、分工、合作方式方法等。增强团队合作意识,提高基本工作技能,为即将踏入社会奠定理论和实践基础。内容:设计一电路,不仅亮度可调,还可以显示时间等功能。具体要求如下:1) 显示当前的时间,24 时制的时、分、秒;2) 可调节时间;3) 可调节led 光亮度;步骤: l、了解所设计系统的工作原理及要求。2、设计单片机工作的基本电路,如:晶振电路、复位电路。3、根据系统设计要求选择发光二极管、按键等模拟部件。 4、设计系统基本电路。5、绘制prtuse电原理图并编写系统控制程序。6、联机进行系统仿真调试。三、进度与要求:1第一周第一周 收集设计系统相关

3、资料。2第二周第三周 用protuse设计硬件原理图并进行器件选型。3第四周第六周 编写系统各功能模块控制程序。4第七周第十周 联机进行系统调试。5. 第十一周第十二周 整理并组织论文。6第十三周第十四周 完成修改稿,定稿,打印,交评阅。7第十五周第十六周 评阅与答辩学生 屈晓东 指导教师 李雪霞 系主任 史仪凯摘 要 在实际的应用中发现,当周边亮度大时,led灯过亮,存在电能浪费;当周边亮度小时,led灯过暗,又不能提供足够和恰当的光度。用来改善我们的生活质量,体验到科学技术带给我们更方便的生活,节省电能。因此,研究实用具有时钟功能的台灯的应用,有着非常现实的意义,具有很大的实用价值。本文介

4、绍了设计的框架结构和组成模块以及各模块的原理,介绍了各部分硬件设计和各部分软件设计以及软件流程图。该设计是以at89c52 单片机为控制核心的集多种功能于一体的智能led台灯。该台灯具有灯光亮度调节功能;具有时间显示功能。硬件设计分为单片机控制模块、按键模块、台灯模块、时钟模块、显示模块等五个部分。单片机控制用at89c52,显示模块用lcd1602 液晶显示时间、日期等内容,按键模块用来调整时间、日期、led的亮度等,时钟用ds1302 时钟芯片,台灯模块用13 颗led灯。软件设计用单片机c /c+编写,通过proteus和keil仿真软件进行程序仿真,实现了全部控制功能。关键词:单片机,

5、智能,显示,led灯,时间abstract in practical applications, we found that the brightness of led lights in the surrounding large power led is still the same, there is a waste of energy; hours in the surrounding brightness led lights do not provide adequate and appropriate luminosity. used to improve our quality

6、 of life, to experience science and technology bring us more convenient life, to save energy.therefore, the study and practical application of electronic bell, has a very real sense, has great practical value. this paper describes the design principles of the framework structure and composition of m

7、odules and each module, introduces the various parts of the various parts of the hardware design and software design and software flow. the design is based on at89c52 microcontroller core set of functions in one smart led lamp. the lamp has a light brightness adjustment function; has a time display

8、function; alarm function. hardware design is divided into five parts.mcu control module, the key modules, lamp modules, clock module, alarm module, display module. mcu control with at89c52, display module displays time, date and other content with lcd1602 , keypad module is used to adjust the time,

9、date, etc. brightness led clock with ds1302 clock chip, lamp module with 13 led. scm software design written in c/c+ language, the realization of all the control functions. key words: microcontroller, smart, display, led lights and time目 录摘 要iabstractii目 录iii第一章 绪 论51.1 选题意义51.2 设计要求61.2.1 功能实现61.2.

10、2 系统所需功能模块61.3 系统基本方案选择和论证71.3.1 单片机芯片的选择方案和论证71.3.2 显示模块选择方案和论证71.3.3 时钟芯片的选择方案和论证8第二章 系统的硬件设计92.1 系统模块框图92.2 系统整体硬件图92.3 各模块电路的设计102.3.1 单片机控制模块102.3.2 晶振/复位模块112.3.3 台灯模块132.3.4 台灯调光按键模块152.3.5 ds1302时钟电路模块152.3.6 1602lcd显示模块172.3.7 调节时钟按键模块19第三章 系统的软件设计203.1 系统软件编程工具c和c+203.1.1 c简介203.1.2 c+213.

11、2 主程序的设计流程图223.3.1 台灯模块流程图223.3.2 台灯模块程序233.4 lcd1602液晶显示253.4.1 时钟设置流程图253.4.2 时钟程序26第四章 仿真结果364.1 仿真软件proteus和keil364.1.1 proteus仿真软件364.1.2 keil仿真软件374.2 proteus仿真图374.2.1 led灯亮度仿真374.2.2 lcd1602时钟仿真394.3 keil仿真404.4 问题及解决414.4.1 存在的问题414.4.2 解决的措施41参考文献42致 谢43小 结44iv第一章 绪 论1.1 选题意义现代人类生活中所用的几乎每件

12、有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。智能灯不是传统灯具,而是智能设备的一种,除了智能灯体,还有一个手持智能控制设备,智能灯控制设备具备计算能力和网络联接能力,通过应用程序,功能可以不断扩展。智能灯的核心功能是控制、灯光效果、创作、分享、光与音乐互动、光提升健康和幸福。开关灯的控制,不但可以通过控制器,手动遥控灯的开关,还可以进行定时开关灯的控制,可以设定不同的时间开灯关灯。其次是对光的控制,光的亮度,光的冷暖,光的色彩都可以连续手动控制或自动控制。白炽灯和金卤灯在调光领域应用得比较广泛,但随着节能减排的不断推广,

13、led可调光在攻克了调光技术障碍后,开始呈现发展趋势,led可调光与led红外智能灯管、led声光控等一起统称为led智能化系列,在led普通灯具价格竞争日趋激烈的今天,led智能化已经成为大型led照明企业的发展方向。电子钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。随着技术的发展,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如日历的显示、闹钟的非接触式止闹跑表功能、重要日期倒计时显示等,以带来更大的方便,而所有这些,又都是以数字化的电子时钟为基础的。因此,研究实用电子钟的应用,

14、有着非常现实的意义,具有很大的实用价值。由于数字集成电路技术的发展和采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。现在市场上已有现成的电子钟集成电路芯片出售,价格便宜,使用也灵活,如可以随意设置时、分、秒的输出,改变显示数字的大小等,并且由于集成电路技术的发展,特别是mos 集成电路技术的发展,使电子钟具有体积小、携带方便的特点,这里介绍的实用电子钟可以满足使用者的一些基本要求,输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。实用电子钟是一个时间控制系统,既能作为一般的时间显示器,也可作为一个定时控制器,驱动负载或显

15、示信息,同时可以根据需要扩展其功能。在此项目的设计研究过程中需综合运用所学的数字电子技术、单片机原理与应用等课程的知识,掌握实用电子钟的设计、组装与调试方法,利用现代的单片机等新电子技术以及现代的设计手段,系统地培养了综合设计、操作调试、故障处理的能力,达到综合素质以及创新能力的提高。1.2 设计要求1.2.1 功能实现(1)led调光灯功能:当按下按键k0、k1、k2分为一级亮度红灯、二级亮度黄灯和三级亮度绿灯来实现。(2)时间、日期显示:系统采用24小时制。正常情况下,系统显示当前日期、时间,由lcd显示。(3)设置功能:用户可以对led灯光的亮度进行调节,对时间、日期、星期进行设置。用户

16、依次进入日期设置、星期设置、时间设置。在进行设置时,光标停留在相应位,按下k4键、k5键对数值进行加、减调整。通过k3键,在各个数位间移动。通过k6键,确定所设置的时间。1.2.2 系统所需功能模块 由功能分析,台灯系统分为灯光模块、键盘模块、显示模块、时钟部分、电源模块和单片机模块,考虑成本时钟模块可由单片机内部计数器模拟实现。(1)灯光模块用d0d12个led灯实现。(2)按键模块分为调光3个按键和调节时间4个按键,分别是k0、k1、k2和k3、k4、k5、k6。(3)显示模块负责显示系统的日期、星期、时间。(4)电源模块采用+5v直流供电。(5)单片机模块内部计数器负责led灯光和时钟,

17、通过程序模拟生成亮度调节和时间走时。同时负责扫描键盘,并将时间送给lcd显示。 1.3 系统基本方案选择和论证1.3.1 单片机芯片的选择方案和论证方案一:采用stc89c52芯片作为硬件核心,采用flash rom,内部具有4kb rom 存储空间,能于3v的超低压工作,而且与mcs-51系列单片机完全兼容,但是运用于电路设计中时由于不具备isp在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用at89c52,片内rom全都采用flash rom;能以3v的超底压工作;同时也与mcs-51系列单片机完

18、全该芯片内部存储器为8kb rom 存储空间,同样具有stc89c52的功能,且具有在线编程可擦除技术,对所下载的程序能够加密,比较安全。当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用at89c52作为主控制系统。1.3.2 显示模块选择方案和论证方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示。方案二:采用led数码管动态扫描,虽然led数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,

19、所以也不用此种作为显示。方案三:采用lcd液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,与普通数码管相比功耗较小,硬件连接简单。所以显示部分采用1602液晶显示。1.3.3 时钟芯片的选择方案和论证方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用ds1302时钟芯片实现时钟,ds1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、周、月、年以及闰年补偿的年进行计数,而且精度高,ram作为数据暂存区,工作电压2.5v5

20、.5v范围内,2.5v时耗电小于300na。第二章 系统的硬件设计2.1 系统模块框图六大模块以at89c52 单片机为控制核心,实现了该智能台灯的各项要求,外接一个5v 的直流电源,为整个系统供电。图2-1 系统结构示意图 2.2 系统整体硬件图 该设计是以at89c52 单片机为控制核心的集多种功能于一体的智能 led 台灯。该台灯具有灯光亮度调节功能;具有时间显示功能。硬件设计分为单片机控制模块、按键模块、台灯模块、时钟模块、闹铃模块、显示模块等五个部分。单片机控制用at89c52,显示模块用lcd1602液晶显示、时间、日期等内容,按键模块用来调整时间、日期、led 的亮度等,时钟用d

21、s1302 时钟芯片,台灯模块用13 颗led,通过按键k0、k1、k2调节灯光的亮度,分为一级亮度、二级亮度和三级亮度。图2-2 系统整体硬件图 2.3 各模块电路的设计 2.3.1 单片机控制模块单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器cpu、随机存储器ram、只读存储器rom、多种i/o口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、a/d转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300m的高速单片机。

22、at89c52单片机为40引脚双列直插芯片,有四个i/o口p0,p1,p2,p3, mcs-51单片机共有4个8位的i/o口(p0、p1、p2、p3),每一条i/o线都能独立地作输出或输入。 图2-3 at89c52单片机控制模块2.3.2 晶振/复位模块晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。晶振是给

23、单片机提供工作信号脉冲的。这个脉冲就是单片机的工作速度。单片机的工作频率是有范围的,不能太大。图中19与18引脚分别为xtal1、xtal2,他们分别接晶振的输入与输出, xtal1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,xtal2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期。本设计选择晶振频率为12mhz,输入芯片震荡周期为1/12s,一个机器周期为1s。 图2-4 晶振电路模块复位电路,就是利用它把电路恢复到起始状态。就像计算器的清零按钮的作用一样,以

24、便回到原始状态,重新进行计算。和计算器清零按钮有所不同的是,复位电路启动的手段有所不同。一是在给电路通电时马上进行复位操作;二是在必要时可以由手动操作;三是根据程序或者电路运行的需要自动地进行。在rst复位输入引脚上接一电容至vcc端,下接一个电阻到地即可。复位电路工作原理如下图所示,vcc上电时,c3充电,在10k电阻上出现电压,使得单片机复位;几个毫秒后,c3充满,10k电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下k7,c3放电,在10k电阻上出现电压,使得单片机复位。k7松手,c3又充电,几个毫秒后,单片机进入工作状态。第9引脚为复位输入端,接上电容,电阻及开关后

25、够上电复位电路。 图2-5 复位电路模块2.3.3 台灯模块台灯模块用13 颗led作为发光系统,每一颗和一个220 的电阻串联,用p1.4p1.6 口控制。电阻起限流作用, 13 个i/o 均采用低电平有效方式,即给相应的i/o 低电平led工作。通过按键k0、k1、k2调节灯光的亮度,亮度分为三个等级:一级亮度控制红色的d0灯亮;二级亮度控制黄色的d1、d2、d3、d4灯亮;三级亮度控制绿色的d5、d6、d7、d8、d9、d10、d11、d12灯亮。图2-6 台灯模块(1)图2-7 台灯模块(2)2.3.4 台灯调光按键模块图2-8 台灯按键模块按键k0、k1、k2用来调节台灯的亮度,通过

26、按下按键k0可以让台灯变亮,按下按键k1可以让台灯变的更亮,按下按键k2可以让台灯灯光达到最亮。3 个i/o 均采用低电平有效方式。2.3.5 ds1302时钟电路模块 下图示出ds1302的引脚排列图,其中vcc1为后备电源,vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302由vcc1或vcc2两者中的较大者供电。当vcc2大于vcc1+0.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。x1和x2是振荡源,外接32.768khz晶振。rst是复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种功

27、能:首先,rst接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电动行时,在vcc大于等于2.5v之前,rst必须保持低电平。中有在sclk 为低电平时,才能将rst置为高电平,i/o为串行数据输入端(双向)。sclk始终是输入端。表1 ds1302引脚功能表引脚号引脚名称功能1vcc2主电源2、3x1、x2振荡源,外接32768hz晶振4gnd地线5rst复位/片选线6i/o串行数据输入/输出

28、端(双向)7sclk串行时钟输入端8vcc1后备电源ds1302在每次进行读、写程序前都必须初始化,先把sclk端置“0”,接着把rst端置“1”,最后才给予sclk脉冲。ds1302的控制字,此控制字的位7必须置1,若为0则不能把对ds1302进行读写数据。对于位6,若对程序进行读/写时ram=1,对时间进行读/写时,ck=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。ds1302的日历、时间寄存器内容:“ch”是时钟暂停标志位,当该位为1时,时钟振荡器停止,ds1302处于低功耗状态;当该位为

29、0时,时钟开始运行。“wp”是写保护位,在任何的对时钟和ram的写操作之前,“wp”必须为0。当“wp”为1时,写保护位防止对任一寄存器的写操作。图2-9 ds1302时钟电路模块2.3.6 1602lcd显示模块字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd,目前常用16*1,16*2,20*2和40*2行等的模块。1602lcd分为背光和不带背光两种,基控制大部分为hd44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,引脚功能说明:表2 1602lcd功能表编号符号引脚说明编号符号引脚说明1vss电源地9d2数据口2vcc电源正极10d3数据口3vo液晶显

30、示对比度调节端11d4数据口4rs数据/命令选择端(h/l)12d5数据口5r/w读写选择端(h/l)13d6数据口6e能使信号14d7数据口7d0数据口15bla背光电源正极8d1数据口16blk背光电源负极 1602lcd采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2所示:第1脚:vss为地电源。第2脚:vdd接5v正电源。第3脚:vee为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄器。第5脚:r/w为读写信

31、号线,高电平时进行读操作,低电平时进行写操作。当rs和r/w共同为低电平时可以写入指令或者显示地址,当rs为低电平r/w高电平时可以读忙信号,当rs为高电平r/w为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。1602lcd的一般初始化(复位)过程延时15ms写指令38h(不检测忙信号)延时5ms写指令38h(不检测忙信号)延时5ms写指令38h(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38h:显示模式设置写指令08h:显示关闭写指令01h:显示清屏写指令06h:显示光标移动设置写指令

32、0ch:显示开及光标设置lcd1602液晶显示,如下图所示:图2-10 1602lcd显示模块2.3.7 调节时钟按键模块因为有年月日,时分秒几个参数要调,所以设置这几个参数的计数。当按下一个键时,单片机进行相应的操作。根据设计要求需要选择四个独立按键分别为选择、加、减、确定,按键用来调整时间和设置闹钟,调光亮度,各键功能在介绍硬件部分已描述。按键模块下图所示:图2-11 调节时钟按键模块第三章 系统的软件设计3.1 系统软件编程工具c和c+3.1.1 c简介c语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应

33、用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到c语言,适于编写系统软件、三维、二维图形和动画,具体应用例如单片机以及嵌入式系统开发。c程序是由一组变量或是函数的外部对象组成的。 函数是一个自我包含的完成一定相关功能的执行代码段。我们可以把函数看成一个“黑盒子”,你只要将数据送进去就能得到结果,而函数内部究竟是如何工作的的,外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。函数提供了编制程序的手段,使之容易读、写、理解、排除错误、修改和维护。c程序中函数的数目实际上是不限的,如果说有什

34、么限制的话,那就是,一个c程序中必须至少有一个函数,而且其中必须有一个并且仅有一个以main为名,这个函数称为主函数,整个程序从这个主函数开始执行。c 语言程序鼓励和提倡人们把一个大问题划分成一个个子问题,对应于解决一个子问题编制一个函数,因此,c 语言程序一般是由大量的小函数而不是由少量大函数构成的,即所谓“小函数构成大程序”。这样的好处是让各部分相互充分独立,并且任务单一。因而这些充分独立的小模块也可以作为一种固定规格的小“构件”, 用来构成新的大程序。3.1.2 c+c+是在c语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查

35、的,支持多重编程的通用程序设计语言。它支持过程化程序设计,数据抽象,面向对象设计,制作图标等多种程序设计风格。在操作系统和系统使用程序以及需要对硬件进行操作的场合,用c语言明显优于其它高级语言,但在编写大型程序时,c语言仍面临着挑战。c语言是c+的基础,c+和c语言在很多方面是兼容的。c语言是一个结构化语言,它的重点在于算法与数据结构。c程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。c+,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。所以c语言和

36、c+的最大区别在于它们解决问题的思想方法不一样。c+语言的主要特点表现在两个方面,一是尽量兼容c,二是支持面向对象的方法。它操持了c的简洁、高效的接近汇编语言等特点,对c的类型系统进行了改革的扩充,因此c+比c更安全,c+的编译系统能检查出更多的类型错误。另外,由于c语言的广泛使用,因而极大的促进了c+的普及和推广。c+由四个“子语言”组成:c子语言,c+支持c语言的几乎全部功能,主要是c89的部分,在语法上与c语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考c+标准文献)。这部分功能对应于传统的面向过程的编程泛型,并提供了面向函数编程泛型的基础。面向对象的c+语言,c+语言原本不具备

37、面向对象的设计功能,然而随着面向对象编程的概念的普及,c+语言也开发出了支持面向对象功能的版本。这部分功能对应于面向对象的编程泛型。泛型编程语言,c+强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率,并且大大提高了c+的表达能力。stl(c+标准模板库,standard template library)是一个基于模板技术的库。随着stl的不断发展,它已经逐渐成为c+程序设计中不可或缺的部分,其效率可能比一般的native代码低些,但是其安全性与规范性使它大受欢迎。模板使c+能够支持泛型编程(generic programming)和生成式编程(generativ

38、e programming)的泛型。在c+0x中引入的lambda,使得程序员可以定义匿名函数,完善了c+对于面向函数的编程泛型的支持。3.2 主程序的设计流程图 图3-1 主程序流程图 一给单片机上电,单片机就初始化。通过接收并处理,有人按下开关就工作。然后检开始led工作显示时间、日期,按键按下,修正时间,设置闹钟系统初始化测按键是否按下,判断工作在那个模式下。液晶还显示当前的时间,日期,最后进入循环。33 台灯模块编程3.3.1 台灯模块流程图该模块只需给led红灯d0的p1.4口、黄灯d1到d4的p1.5口和绿灯d5到d12的p1.6口送低电平即可,再通过按键k0、k1、k2调led灯

39、光亮度。 图3-2 台灯模块流程图3.3.2 台灯模块程序#include sbit k0=p25;/调光灯亮度等级开关i/o口分配sbit k1=p26;sbit k2=p27;sbit d0=p14;/led灯i/o口分配sbit d1=p15;sbit d2=p15;sbit d3=p15;sbit d4=p15;sbit d5=p16;sbit d6=p16;sbit d7=p16;sbit d8=p16;sbit d9=p16;sbit d10=p16;sbit d11=p16;sbit d12=p16;void main()/主程序while(1)if(k0=0)/一级亮度调光开关

40、被按下d0=0; /d3灯亮elsed0=1; /d3灯灭if(k1=0)/二级亮度调光开关被按下 d1=0;/d1,d2,d3,d4灯亮d2=0;d3=0;d4=0;elsed1=1;/d1,d2,d3,d4灯灭d2=1;d3=1;d4=1;if(k2=0)/三级亮度调光开关被按下d5=0; /d5,d6,d7,d8,d9,d10,d11,d12灯亮d6=0;d7=0;d8=0;d9=0;d10=0;d11=0;d12=0;elsed5=1; /d5,d6,d7,d8,d9,d10,d11,d12灯灭d6=1;d7=1;d8=1;d9=1;d10=1;d11=1;d12=1;3.4 lcd1

41、602液晶显示3.4.1 时钟设置流程图调整时间用4个调整按钮,1个作为选择控制用,另外3个分别作为加调整,减调整和确定用。 图3-3 时钟设置流程图3.4.2 时钟程序#include #include #define uchar unsigned char#define uint unsigned intsbit rs=p20; / lcd寄存器选择sbit rw=p21; / lcd读写控制sbit en=p22; / lcd启动/*-延时子程序-*/void delayms(uint k) uchar i; while(k-) for(i=0;i120;i+); /*-读取lcd的状态

42、-*/uchar read_lcd_state() uchar state; rs=0; rw=1; en=1; delayms(2); state=p0; en=0; delayms(2); return state;/*-忙检查-*/void lcd_busy_wait() while(read_lcd_state()&0x80)=0x80);delayms(5);/*-写lcd命令-*/void write_lcd_command(uchar cmd) lcd_busy_wait(); rs=0; rw=0; en=0; p0=cmd; en=1; delayms(2); en=0;/*

43、-向lcd写入数据-*/void write_lcd_data(uchar dat) lcd_busy_wait(); rs=1; rw=0; en=0; p0=dat; en=1; delayms(2); en=0; /*-lcd初始化-*/void initialize_lcd1602() /液晶初始化函数 write_lcd_command(0x38);delayms(2); /功能设置,数据长度为8位,双行显示,57点阵字体 write_lcd_command(0x01);delayms(2);/清屏 write_lcd_command(0x06);delayms(2); /字符进入模

44、式:屏幕不动,字符后移 write_lcd_command(0x0c);delayms(2); / 显示开,关光标/*-设置液晶显示位置-*/void set_lcd_position(uchar pos) write_lcd_command(pos|0x80); /设置7位的ddram地址值/*-在lcd上显示字符串-*/void lcd_display(uchar p,uchar *str) uchar i; set_lcd_position(p); for(i=0;i16;i+) write_lcd_data(stri); delayms(2);/*-main.c源程序-*/*-用ds1

45、302和1602液晶显示的实时时钟-*/#include #include #include #define uchar unsigned char#define uint unsigned intvoid initialize_lcd1602(); /液晶初始化函数void lcd_display(uchar p,uchar *str);sbit sda=p10; /ds1302数据线sbit clk=p11; /ds1302时钟线sbit rst=p12; / ds1302复位线sbit k1=p34; / 选择按键sbit k2=p35; / 加sbit k3=p36; /减sbit k

46、4=p37; /确定uchar tcount=0;uchar monthsdays=0,31,0,31,30,31,30,31,31,30,31,30,31; / 一年中每个月的天数,二月的天数由年份决定uchar *week=sun,mon,tus,wen,thu,fri,sat; /周日,周一到周六/ lcd显示缓冲uchar lcd_dsy_buffer1=date 00-00-00 ;uchar lcd_dsy_buffer2=time 00:00:00 ;uchar datetime7;/所读取的日期时间char adjust_index=-1; /当前调节的时间对象:秒,分,时,日

47、,月,年(0,1,2,3,4,6)uchar change_flag=-mhdm-y;/(分,时,日,月,年)不调节秒和周/函数声明void write_byte_to_ds1302(uchar x); / 向ds1302写入一个字节uchar read_byte_from_ds1302();/从ds1302中读取一个字节uchar read_data_from_ds1302(uchar addr); /从ds1302指定位置读取数据, 读数据void write_data_to_ds1302(uchar addr,uchar dat); / 向ds1302指定位置写入数据, 写数据void set_ds1302(); / 设置时间void gettime(); / 读取当前时间void initialization(); /初始化函数/*-主程序-*/void main() initialization(); while(1) if(adjust_index=-1) gettime();/*-初始化函数-*/void initialization() initialize_lcd1602(); /调用液晶初始化函数 ie=0x83; /允许中断 外部0中断和t0中断 ip=0x01; / 设置中断优先级 it0=0x01; /

温馨提示

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

评论

0/150

提交评论