三色背光灯系统设计理论方案.docx
《三色背光灯系统设计理论方案.docx》由会员分享,可在线阅读,更多相关《三色背光灯系统设计理论方案.docx(22页珍藏版)》请在冰点文库上搜索。
三色背光灯系统设计理论方案
西安邮电大学
专业课程设计报告书
院系名称
:
电子与信息工程学院
学生姓名
:
曹蕾蕾
学号
05103031
专业名称
:
光电子技术系
班级
:
光信息1001班
实习时间
:
2012-10-22到2012-11-2
1.课程设计题目
利用单片机控制GRB三原色背光系统
2.任务和要求
(1)收集资料和熟悉相关内容——包括单片机最小系统设计,I2C总线协议,
用grb三原色led实现背光的概念,单片机c语言编程和开发环境。
(2)连接调试stc89c52单片机最小系统,可以运行简单的程序。
焊接和连接
ncp5623,并将其最小系统一起连接。
(3)进一步熟悉开发环境,编写程序,调试整个系统,实现资料上所列的几个
功能,也就是使三种颜色的灯组合成不同的颜色来变化,同时形成不同的花色。
(4)撰写课程设计报告要遵守一定的规范和要求,即课程设计报告书写工整、
语句通顺、数据准确、图表清晰。
3.总体方案的选择
总体方案的选择:
图1总体设计选择
(1)硬件部分:
根据设计的电路图,焊接好好电路,得到完整的电路系
统。
(2)软件部分:
在软件KeiluVision2环境下调试程序,最终实现I2C协议及LED控制部分,用STC_ISP_V486采取串口的方式下载到相应的设计电路板中。
(3)模块化分3部分:
MAX232EJE电路、STC89C52电路以及NCP5623电路。
总的设计系统如下:
图2总的设计系统
4.单元电路的设计
根据总体方案原理框图,确定对各单元电路的设计要求,这时应全面检查确定无误后,才可以设计具体的单元电路。
每个单元电路应该画出具体的电路图,需要计算出元件参数。
设计单元电路时,要注意元器件的选择。
(1)MAX232EJE电路:
经过设计与计算得到所需要的器件如下:
6个100pf电容、MAX232EJE一个、数据传输端口、USB端口
图3MAX232EJE电路:
(2)STC89C52电路:
经过设计与计算得到所需要的器件如下:
晶振一个、2个30pf电容、8.2?
k电阻一个、STC89C52一个、10uf电容
图4STC89C52电路
(3)NCP5623电路:
经过设计与计算得到所需要的器件如下:
2个1uf/6.3V电容、红绿蓝三个灯62?
k电阻一个、NCP5623一个
图5NCP5623电路
5.画总体电路图。
根据各部分之间的关系得到总的电路图如下:
图6各部分与整体电路图
6.软件部分,I2C协议及LED控制部分。
(1)I2C协议的总程序程序图如下:
图7I2C协议的总程序程序图
起动总线函数与结束总线函数:
在I2C总线上每传输一位数据,都有一个时钟脉冲相对应,其逻辑“0”和“1”的信号电平取决于该点的正端电源VDD的电压。
I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据0。
只有在时钟线为低电平时,才允许数据线上的电平变化。
I2C总线数据传送时有两种时序状态被分别定义为起始信号和终止信号。
起始信号:
在时钟线保持高电平期间,数据线在由高电平到低电平变化时启中动I2C总线,为I2C总线的起始信号。
终止信号:
在时钟线保持高电平期间,数据线在由低电平到高电平变化时将停止I2C总线的数据传送,为I2C总线的终止信号。
起始信号和终止信号都是由主控制器产生。
总线上带有I2C总线接口的器件很容易检测到这些信号。
但是对于不具备这些硬件接口的单片机来说,为了能准确地检测到这些信号,必须保证在总线的一个时钟周期内对数据线至少进行两次采样。
voidStart_I2c()
{
SDA=1;/*发送起始条件的数据信号*/
delay();
SCL=1;
delay();/*起始条件建立时间大于4.7us,延时*/
SDA=0;/*发送起始信号*/
delay();
}
写控制字
起动总线函数结束总线函数
字节数据发送函数I2C协议
voidStop_I2c()
{
SDA=0;/*发送结束条件的数据信号*/
delay();
SCL=1;/*结束条件建立时间大于4μs*/
delay();
SDA=1;/*发送I2C总线结束信号*/
delay();
}
字节数据发送函数
字节数据发送函数字节数据发送函数字节数据发送函数,在没有时钟信号时,数据传送将停止进行,接口的线与特征将使SCL在低电平时钳住总线。
这种情况可以用于当接收器接收到一个字节数据后要进行一些其他工作而无法立即接收下一个数据时,迫使总线进入等待状态,直到接收器准备好接收新数据时再释放时钟线使数据传送得以继续正常进行。
例如,当接收器接收完主控制器的一个字节数据后,产生中断信号并进行中断处理,中断处理完毕后才能接收下一个字节数据,这时接收器在中断处理时钳住SCL为低电平直到中断处理完毕才释放SCL。
voidSendByte(uchardat){uchari;SCL=0;for(i=0;i<8;i++){
if(dat&0x80)
{
SDA=1;
}
else
{
SDA=0;
}
dat=dat<<1;
delay();
SCL=1;
delay();
SCL=0;
delay();
}
SDA=1;
delay();
}
voidack(void){uchari;
SCL=1;
delay();
while((SDA==1)&&(i<200))i++;
SCL=0;
delay();
}
voidinit(void)
{
SCL=1;
SDA=1;
}
写控制字
主控器发送起始信号后,立即发送寻址字节,这时,总线上的所有器件都将寻址字节中的7位地址与自己器件地址相比较,如两者相同,则该器件认为被主
控器寻址,并根据读写位确定是被控发送器或被控接收器。
voidwrite_byteNCP(uchardat)
{
init();
Start_I2c();
SendByte(0x70);//芯片地址
ack();
SendByte(dat);
ack();
Stop_I2c();
}
voidmie()
{
write_byteNCP(0x00);
delay_50ms(20);
}
(2)LED控制部分:
NCP5623中每个灯的控制地址如下表:
图8NCP5623中每个灯的控制地址表
总流程图如下:
图9总流程图如下
程序如下(部分灯程序):
Voidmain(void)
{
unsignedchari;
while
(1)
{
for(i=0x20;i<0x3f;i++)//三个灯逐渐变亮
{
write_byte(i);
delay1(100);
}
for(i=0x3f;i>0x20;i--)//三个灯逐渐变暗
{
write_byte(i);
delay1(100);
}
write_byte(0x3f);//三个灯亮
write_byte(0x40);//红灯亮
write_byte(0x60);//绿灯亮
write_byte(0x80);//蓝灯亮
write_byte(0x00);//三个灯灭
for(i=0x40;i<0x5f;i++)
{
write_byte(i);//红灯逐渐变亮
delay1(50);
}
for(i=0x5f;i>0x40;i--)//红灯逐渐变暗
{
write_byte(i);
delay1(50);
}
for(i=0x60;i<0x7f;i++)//绿灯逐渐变亮
{
write_byte(i);
delay1(50);
}
for(i=0x7f;i>0x60;i--)//绿灯逐渐变暗
{
write_byte(i);
delay1(50);
}
for(i=0x80;i<0x9f;i++)//蓝灯逐渐变亮
{
write_byte(i);
delay1(50);
}
for(i=0x9f;i>0x80;i--)//蓝灯逐渐变暗
{
write_byte(i);
delay1(50);
}
write_byte(0x20);
for(i=0xa2;i<0xbe;i++)
{
write_byte(i);
write_byte(0xe1);
delay1(100);
}
write_byte(0x3f);
for(i=0xc0;i<0xde;i++)
{
write_byte(i);
write_byte(0xe1);
delay1(100);
}
for(i=0xa0;i<0xbf;i++)//逐渐变亮
{
write_byte(i);
delay1(50);
write_byte(0xe1);
delay1(50);
}
for(i=0xc0;i>0xdf;i--)//逐渐变暗
{
write_byte(i);
delay1(50);
write_byte(0xe1);
delay1(50);
}
}
7.过程考核表和成绩鉴定
/*基于AT89c52控制的LED背光设计*/
/*P2.1控制SCL*/
/*P2.0控制SDA*/
#include"reg52.h"//头文件
#include
#define_NOP()//空指令
sbitSCL=P2^1;
sbitSDA=P2^0;
/*红灯亮*/
unsignedcharR_on[]={0x40,0x42,0x44,0x48,0x4e,0x50,0x52,0x54,0x58,0x5f};
/*绿灯亮*/
unsignedcharG_on[]={0x60,0x62,0x64,0x68,0x6e,0x70,0x72,0x74,0x78,0x7f};
/*蓝灯亮*/
unsignedcharB_on[]={0x80,0x82,0x84,0x88,0x8e,0x90,0x92,0x94,0x98,0x9f};
voiddelay1(unsignedintt)
{
unsignedchari;
for(;t>0;t--)
{
for(i=6425;i>0;i--);
}
}
voiddelay(void)//定义延时函数
{
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
voidI2C_Start(void)//定义I2C起始函数
{
SDA=1;//SCL为高电平时,SDA由高电平变为低电平时为开始
delay();
SCL=1;
delay();
SDA=0;
delay();
SCL=0;
delay();
}
voidI2C_STOP(void)//定义I2C终止函数
{
SDA=0;
delay();//SCL为高电平时,SDA有高电平变为低电平时为终止
SCL=1;
delay();
SDA=1;
delay();
}
voidack(void)//响应函数
{
unsignedchari;
SCL=1;
delay();
while((SDA==1)&&(i<200))i++;
SCL=0;
delay();
}
/*
voidnonack(void)//非响应函数
{
SDA=1;
delay();
SCL=1;
delay();
SCL=0;
delay();
}
*/
voidSend_byte(unsignedcharzdata)
{
unsignedcharj;
SCL=0;
for(j=0;j<8;j++)//在SCL=0时,发送8位数据
{
if(zdata&0x80)//判断第一位是否为高
{
SDA=1;//第一位为高,SDA=1
}
else
{
SDA=0;//第一位为低,SDA=0
}
zdata=zdata<<1;//发送第二位数据
delay();
SCL=1;
delay();
SCL=0;//数据只有在SCL由1变为0时才改变
delay();
}
SDA=1;
delay();
}
voidinit(void)//
{
SDA=1;
SCL=1;
}
voidwrite_byte(unsignedchardat)
{
init();
I2C_Start();
Send_byte(0x70);
ack();
Send_byte(dat);
ack();
I2C_STOP();
}
voidmain(void)
{
unsignedchari;
while
(1)
{
for(i=0x20;i<0x3f;i++)//三个灯逐渐变亮
{
write_byte(i);
delay1(100);
}
for(i=0x3f;i>0x20;i--)//三个灯逐渐变暗
{
write_byte(i);
delay1(100);
}
write_byte(0x3f);//三个灯亮
write_byte(0x40);//红灯亮
write_byte(0x60);//绿灯亮
write_byte(0x80);//蓝灯亮
write_byte(0x00);//三个灯灭
for(i=0x40;i<0x5f;i++)
{
write_byte(i);//红灯逐渐变亮
delay1(50);
}
for(i=0x5f;i>0x40;i--)//红灯逐渐变暗
{
write_byte(i);
delay1(50);
}
for(i=0x60;i<0x7f;i++)//绿灯逐渐变亮
{
write_byte(i);
delay1(50);
}
for(i=0x7f;i>0x60;i--)//绿灯逐渐变暗
{
write_byte(i);
delay1(50);
}
for(i=0x80;i<0x9f;i++)//蓝灯逐渐变亮
{
write_byte(i);
delay1(50);
}
for(i=0x9f;i>0x80;i--)//蓝灯逐渐变暗
{
write_byte(i);
delay1(50);
}
write_byte(0x20);
for(i=0xa2;i<0xbe;i++)
{
write_byte(i);
write_byte(0xe1);
delay1(100);
}
write_byte(0x3f);
for(i=0xc0;i<0xde;i++)
{
write_byte(i);
write_byte(0xe1);
delay1(100);
}
for(i=0xa0;i<0xbf;i++)//逐渐变亮
{
write_byte(i);
delay1(50);
write_byte(0xe1);
delay1(50);
}
for(i=0xc0;i>0xdf;i--)//逐渐变暗
{
write_byte(i);
delay1(50);
write_byte(0xe1);
delay1(50);
}
}
}
8.设计过程中发生的问题及解决的方法。
(1)电路连接问题
电路连接问题电路连接问题电路连接问题首先是设计好电路总图,这是连接好电路的基本保障。
同时把面包版的正负极连接好,从而使整个板子正极相同、负极相通,并用万用表检测。
其次是对每一个模块的连接。
每一个模块连接好后就要检测,以保证电路的可行性。
最后是总体连接好后检测,基本也没有什么问题,就可以找个小程序先导入板子里面测试一下,看是否能导通。
在这个过程中,出现了比较多的问题,特别是数据线把电脑和电路连接好后,一直不能载入程序,我们以为是.外在硬件导致,在老师的指导下,最后发现是电容太小,导致下载一直出现问题,将0.1uf电容换为1uf,换了好的之后就可以了下载了。
(2)程序问题程序问题程序问题程序问题程序可以说是本次实验的关键。
由于以前有一定的单片基础,所以对两种要用的软件方面不存在问题。
本次的中心器件是NCP5623,因此得看它的有关资料,在这个过程中了解的东西相对难些,而且资料基本都是外文资料,更需要我们细心的去研究,有很多不懂的必须问老师,也是在老师的讲解下慢慢了解了它的功能以及怎么用它来实现所需要的功能。
在有了基本概念之后剩下的就是慢慢编程了,编程部分首先是I2C协议,这是整个电路的核心连接部分。
当然在这个过程中遇到的问题也比较多,主要就是控制LED灯部分,由于对文献理解的出入,导致在写程序时出现了不少的错误。
我们开始也就是先实现一个简单的功能,让3个灯都亮,可最后编好之后就是有问题,不能一起亮,我们求助老师之后,发现是在每次写进去之后,都用了延迟、接受,这与NCP5623的功能有些出入,我们再研究了它的功能之后,修改之后就可以了。
依照上面的思路,其他功能也实现的比较快。
最后一个问题就是虽然实现了各个功能,但由于计算机本身运算快,导致我们看到的现象不明显,这就要调节延迟函数,在经过不断的调试之后,总体现象还是比较好的。
9.分析和总结。
此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。
通过这次课程设计,加强了我们动手、思考和解决问题的能力。
在整个设计过程中,我们通过这个方案包括设计了一套电路原理连接图。
在设计过程中,经常会遇到这样那样的情况,就是心里想着这样的接法可以行得通,但实际接上电路,总是实现不了,因此耗费在这上面的时间用去很多。
我沉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。
平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。
而且还可以记住很多东西。
比如一些芯片的功能,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个元件印象更加深刻。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
最后这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,在老师的辛勤指导下,终于游逆而解。
同时,在老师的身上我们学也到很多实用的知识,最后老师采取座谈会的形式让大家积极发言,总结两周以来自己对于实习的见解和心得,大胆说出自己的想法,同时也给我们讲述了老师自己的一些想法以及对于事态道理的分析,让我们受益匪浅,在次我们表示感谢!
。
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
10.参考文献。
[1]宏晶科技(深圳).STC89C52RC/RD+系列单片机中文指南.2005-2-16.
[2]MichaelBairanzade.利用多个LED控制器实现自动渐进调光.今日电子.2008年6月:
49-51.
[3]NCP5623TripleOutputI2CControlledRGBLEDDriver.October.2008.
[4]安森美半导体.适合于低压便携设备背光或闪光应用的LED驱动器方案.电
源世界.2010年11月:
47-50.
11.过程考核表和成绩鉴定
西安邮电学院电子与信息工程学院专业课程设计过程考核表
学生姓名
刘芳
班级/学号
光信0904/05093129
承担任务实验室(单位)
光信息科学与技术
所在部门
光电子技术系
实施时间
2012年5月21日—2012年6月1日
具体内容
第一周
集中讲解设计的目的及要求;介绍系统设计的一般方法和步骤;介绍部分器件及其应用;布置课程设计题目;分析设计中可能出现的问题。
学生选题,查阅资料,设计电路;教师准备器材、工具等,同时为学生检查电路设计、辅导答疑。
学生完成原理图设计及接线图设计。
教师审阅,开始发放元器件及工具。
学生进行电路安装、调试;教师继续答疑并补发元器件。
第二周
学生继续安装调试;验收调试成功的学生。
验收通过的学生整理、上交工具,写出设计报告;召开课程设计总结交流会,总结交流学生在课程设计中具有特色的设计思想和先进的调试方法。
指导教师(师傅)姓名
王翀
职务或职称
讲师
指导教师(师傅)
对学生的评价
学习态度
□认真□一般□不认真
学习纪律
□全勤□偶尔缺勤□经常缺勤
实践能力
□很强□一般□较差
指导教师(师傅)对学生专业知识或社会实践能力等情况的意见
指导教师(师傅)签字
年月日
西安邮电学院电子与信息工程学院专业课程设计成绩鉴定表
学生姓名
刘芳
班级/学号
光信0904/05093129
进行时间
2012年5月21日—2012年6月1日
成绩鉴定
学习内容(20分)
与教学任务计划结合程度(10分)
与专业培养结合程度(6分)
其它(4分)
接受单位评价
(20分)
实践能力(10分)
学习态度(6分)
学习纪律(4分)
报告鉴定
(60分)
报告内容与实践过程紧密结合(15分)
报告内容与教学计划内容紧密结合(15分)
报告质量(主题、结构、观点、逻辑、资料、字数30分)
评阅教师姓名
王翀
职称
讲师
成绩
评语
评阅教师签字
年月日