ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:467.34KB ,
资源ID:14066924      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14066924.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(三色可独立调整 led 源程序可执行 pwm概述.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

三色可独立调整 led 源程序可执行 pwm概述.docx

1、三色可独立调整 led 源程序可执行 pwm概述 单片机课程设计报告题目: 简易可调色LED灯 学院: 水利电力学院 专业: 电气工程及其自动化 班级: 电气一班 成员: 蒲恒 马永俊 鸣谢: 刘伟强 二一三年十二月十二日 基于AT89C52单片机的简易简易可调色LED灯摘要:本文主要使用单片机来设计简易可调色LED灯。采用单片机I/O口,加以C语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。基本原理:C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗如此往复,再利用LED的余辉和人眼的暂留效应,实现呼吸灯的效果,同

2、时实现了温度测试功能。关键词: 单片机 PWM LED 可调色 呼吸灯 目 录第1章 概述 - 1-第2章 系统方案设计 - 2 -2.1 系统设计要求 - 2 -2.1.1 基本要求 - 2 -2.1.2 发挥部分 - 2 -2.2 LED可调色呼吸灯系统的组成 - 2 -第3章 系统的硬件设计 - 3 -3.1 系统功能框图 - 3 -3.2 功能模块详细设计 - 3 - 3.2.1 主控核心 - 3 - 3.2.2 复位电路模块 - 4 - 3.2.3 时钟电路 - 5 - 3.2.3 键盘模块 - 5 - 3.2.4 LCD1602显示模块 - 6 - 3.2.5LED显示模块 - 7

3、 -第4章 软件电路设计 - 8 -第5章 测试方法与结果 - 9 -第6章心得与结论 - 10 -参考文献 - 10 -附录 - 11 -1概述 单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 本次设计提出了用AT89C52单片机为核心控制元件,设计一个简易LED可调色呼吸灯,本方案以AT89C52单片机作为主控核心,与LED显示、按键控制、液晶屏显示各色所占比例等部分组成核心模块

4、。C语言编程使单片机输出PWM(脉宽调制),用来驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗如此往复,再利用LED的余辉和人眼的暂留效应,实现呼吸灯的效果。利用液晶屏显示当前各色所占比例,按键控制调色过程,从而实现了简易LED可调色呼吸灯的基本功能,同时实现附加功能温度测试及显示。2系统方案设计 2.1系统设计要求本系统主要实现LED可调色呼吸灯基本功能,基本要求如下: 2.1.1基本要求 ( 1 )红、蓝、绿三色可单独进行亮度的调节,从而实现调色。 ( 2 )显示:三色占有的比例。( 3 )设置好的各色比例值,掉电后保持。 2.1.2发挥部分 (

5、1 )使用亚克力等材料自制灯罩,使调色效果明显。( 2 )各色的调节步进值分细调和粗调2档。( 3 )实现温度显示。( 4 )使用多个LED。2.2LED可调色呼吸灯系统的组成本设计系统主要以AT89C52为主控核心,通过C语言编程来实现单片机输出PWM波(脉宽调制),用来驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗如此往复,再利用LED的余辉和人眼的暂留效应,实现呼吸灯的效果。整个设计系统只要有:单片机AT89C52、LED灯、按键模块、液晶屏显示4部分组成。按键控制LED灯可调色,同时在液晶屏上显示此时各色LED所占的比例,从而达到了本次设计的基

6、本要求。3硬件电路设计 3.1系统功能框图液晶屏显示 当前温度液晶屏显示当前 各色所占比例键盘电路控制 AT89C52 LED可调色显示时钟电路复位电路 (图一) 该系统主要有五部分组成,包括:单片机AT89C51、键盘控制模块、LED显示、液晶屏显示各色所占比例、复位电路、时钟电路组成。3.2功能模块详细设计3.2.1主控核心 本设计采用AT89C52作为主控核心: 89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。89C52内置8位中央处理单元、256字节内部数据存储器R

7、AM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。 3.2.2复位电路模块 当单片机的复位引脚RST出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RET持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。本次设计采用手动复位电路。在单片机启动后,电容C两端的电压持续充电为5V,这是时候

8、10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位 (复位电路)3.2.3时钟电路 时钟电路用于产生单片机工作所需的时钟信号。震荡有两种方式:外部震荡、内部震荡。在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯

9、片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器,如图7所示。电路中的电容一般取30pF左右,而晶体的振荡频率范围通常为1.212MHz。本设计采用12MHz的晶振。 (时钟电路)3.2.4键盘模块键盘是最常用的单片机输入设备,大致可以分为独立连接式键盘和矩阵式。独立连接式键盘是最简单的键盘电路,每个键独立接入一根数据线。这种键盘结构简单,使用方便,但是占用的I/O口线较多。矩阵式键盘由行线和列线组成,按键位于行列的交叉点上,行线通过上拉电阻接到高电平。行列式键盘可节省I/O口,适合按键数较多的场合。所以本例的4X4键盘采用行列式键盘。 (按键模块)3

10、.2.4 LCD1602显示模块 LCD1602显示当前三色等所占的比例,显示电路设计如下: (LCD1602显示)通过单片机编程,输出液晶屏LCD1602,显示当前各色灯显示的所占百分比,根据所占百分比来调色,三色所占百分比不同,三色光组合的颜色则不同;同时单片机编程输出程序,在液晶屏上显示当前的温度。3.2.5 LED显示模块 (LED显示模块) 单片机输出PWM波(脉宽调制),用来驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程。三色所占比例不同,调出不同种颜色的光,同时也可以红、蓝、绿三色可单独进行亮度的调节,从而实现调色。4 软件电路设计 目前普通低档单片机的编程中,一

11、般会用汇编和C。汇编语言 非常接近计算机的硬件,因此,它可以最大限度地发挥计算机硬件的性能。用汇编写的程序执行速度相当快,适用于实时性要求较高的场合。但是用汇编写的程序比较庞大,编写速度也比较慢,而且汇编程序的移植性较差。C语言作为高级语言,运用灵活,可自定义很多东西,更改方便,移植性好,且无需懂得单片机的具体硬件也能编出程序。但C语言写好后是不能直接运行,需要编译,经过编译生成单片机专用的机器码后才能直接运行,效率是要低于直接用汇编写出来的代码的。不过如果谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非汇编语言编程所可比拟的。(主要程序见附录) 5测试方法与结果完成了

12、硬件的设计、制作和软件编程之后,要使系统能够按设计意图正常运行,必须进行系统调试。系统调试包括硬件调试和软件调试两个部分。不过,作为一个单片机系统,其运行是软硬件相结合的,因此,软硬件的调试也是绝对不可能分开的。程序的调式应一个模块一个模块地进行,单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各个子程序连接起来总调。联调需要注意的是,各程序模块间能否正确传递参数特别要注意各子程序的现场保护与恢复。调试的基本步骤如下:将单片机实验相与计算机连接,然后在keil中进行编译程序,运行程序,根据单片机所显示的结果分析程序,修改程序直到程序正常。在调试过程中出

13、现的问题: (1)指示灯显示不正常,经分析原因在与灯的表格列的不对,指示灯输出低电瓶时亮,结果程序中都是以高电平输出,经修改后正常最后打开开关,发现灯全部以每2秒一暗一亮的频率运行正常。 (2)由于呼吸灯的程序在仿真软件Proteus中实现的效果不明显,很难辨别LED是否具有呼吸的效果。所以边用keil调试程序边用STC烧写软件直接写入开发板,从而很明显看出LED是否具有呼吸效果; (3)程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。6心得与总结 在本次设计中,C语言程序在开发板中得以实现应有的功能。在调试过程中,发现很多问题都是

14、由于不细心导致的,因此在以后的设计方案中,要集中精力,莫粗心大意。再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量参考文献1郭天祥 . 新概念51单片机C语言教程 . 电子工业出版社,2009年1月2徐爱钧 . 单片机高级语言C51应用程序设计 . 电子工业出版社,2000年5月3倪云峰.单片机原理及应用M.西安:西安电子科技大学出版社,2009.4 张齐.单片机原理与应用系统设计.北京:电子工业出版社,2010.2附录 : 源程序代码#include #include #define uchar unsigned ch

15、ar#define uint unsigned intsbit LEDB=P10; /-LED蓝灯sbit LEDR=P11; /LED红灯sbit LEDG=P12; /LED绿色sbit LEDC=P13;/白的灯泡bit ledjc=0;/led检测 ,sbit k1=P14; /-按键1sbit k2=P15; /-按键2sbit k3=P16; /-按键3sbit stop=P17; /-按键4sbit DQ1 = P20; /温度显示sbit E=P27; /1602使能引脚sbit RW=P26; /1602读写引脚 sbit RS=P25; /1602数据/命令选择引脚ucha

16、r rcount,bCount,yCount,rZKB,bZKB,yZKB,temp;uchar TempBuffer5,temp_value,play,wendu;uchar ge,shi,bai,num,wendu,play,mode; uint PWM_LOW=0;/定义周期并赋值uint bCYCLE=900,rCYCLE=700,gCYCLE=600;void inti();void keyscan();void display();void display1();void display2();void fuction();void delayms(uint z);void Del

17、ay(unsigned int t); /函数声明void show_temperture();uchar key();void Delay(uint t);/* 名称 : delay()* 功能 : 延时,延时时间大概为5US。* 输入 : 无* 输出 : 无*/void delay() _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); void delayms(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);/* 名称 : bit Busy(void)* 功能 : 这个是一个读状态函数,读出函数是否

18、处在忙状态* 输入 : 输入的命令值* 输出 : 无*/bit Busy(void) bit busy_flag = 0; RS = 0; RW = 1; E = 1; delay(); busy_flag = (bit)(P0 & 0x80); E = 0; return busy_flag;/* 名称 : wcmd(uchar del)* 功能 : 1602命令函数* 输入 : 输入的命令值* 输出 : 无*/void wcmd(uchar del) while(Busy(); RS = 0; RW = 0; E = 0; delay(); P0 = del; delay(); E = 1

19、; delay(); E = 0;/* 名称 : wdata(uchar del)* 功能 : 1602写数据函数* 输入 : 需要写入1602的数据* 输出 : 无*/void wdata(uchar del) while(Busy(); RS = 1; RW = 0; E = 0; delay(); P0 = del; delay(); E = 1; delay(); E = 0;/* 名称 : L1602_init()* 功能 : 1602初始化,请参考1602的资料* 输入 : 无* 输出 : 无*/void L1602_init(void) wcmd(0x38); delay();

20、wcmd(0x38); delay(); wcmd(0x38); delay(); wcmd(0x38); delay(); wcmd(0x0c); wcmd(0x06); delay(); wcmd(0x01);/* 名称 : L1602_char(uchar hang,uchar lie,char sign)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示b ,调用该函数如下 L1602_char(1,5,b)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void L1602_char(uchar hang,uchar lie,uchar sign) uc

21、har a; if(hang = 1) a = 0x80; if(hang = 2) a = 0xc0; a = a + lie - 1; wcmd(a); wdata(0x30+sign);/* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示ab cd ef ,调用该函数如下 L1602_string(1,5,ab cd ef;)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void L1602_string(uchar hang,uchar lie,uch

22、ar *p) uchar a,b=0; if(hang = 1) a = 0x80; if(hang = 2) a = 0xc0; a = a + lie - 1; while(1) wcmd(a+); b+; if(*p = 0)|(b=16) break; wdata(*p); p+; /*/ / 定时器 0中断服务程序. /*/ void timer0() interrupt 1 TH0=(65536-10)/256;/装入初值,定时50ms; TL0=(65536-10)%256; rcount+; bCount+; yCount+; if(rcount599) rcount=0; i

23、f(bCount599) bCount=0; if(yCount599) yCount=0;if (rcount=rZKB) LEDG=1;elseLEDG=0;if (yCount=yZKB) LEDR=1;elseLEDR=0;if (bCount=bZKB) LEDB=1;elseLEDB=0; void w1() rZKB +; if(rZKB=600&rZKB=600) rZKB = 0; /num=0; void w2() bZKB +; if(bZKB=600&bZKB=600) bZKB = 0; /num=0;void w3() delay(); yZKB +; if(yZK

24、B=600&yZKB=600) yZKB = 0; /num=0; /启动输出 void w4() if(rZKB600) ledjc=1; rZKB=600; if(rZKB=0)&(1=ledjc) rZKB-=8; if(rZKB=600&bZKB=600) bZKB = 0; num=0; void w6() /delay(); yZKB +=8; if(yZKB=600&yZKB=600) yZKB = 0; num=0;/*/ / 定时器初始化 /*/ void inti() TMOD=0x1;/T0方式1工作 IE=0x82;/EA=1;允许所有中断,ET0=1;允许T0中断 TH0=(65536-8)/256;/装入初值,定时50ms; TL0=(65536-8)%256; TR0=1;/启动定时器 /*/LCD1602占空比显示程序*/void display() L1602_string(1,1,B); bai=(u

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2