课程设计(论文)基于51单片机的背光灯系统.doc

上传人:仙人指路1688 文档编号:3993387 上传时间:2023-03-30 格式:DOC 页数:17 大小:404KB
返回 下载 相关 举报
课程设计(论文)基于51单片机的背光灯系统.doc_第1页
第1页 / 共17页
课程设计(论文)基于51单片机的背光灯系统.doc_第2页
第2页 / 共17页
课程设计(论文)基于51单片机的背光灯系统.doc_第3页
第3页 / 共17页
课程设计(论文)基于51单片机的背光灯系统.doc_第4页
第4页 / 共17页
课程设计(论文)基于51单片机的背光灯系统.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《课程设计(论文)基于51单片机的背光灯系统.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于51单片机的背光灯系统.doc(17页珍藏版)》请在三一办公上搜索。

1、西安邮电学院专业课程设计报告书院系名称:电子工程学院学生姓名:专业名称:班 级:实习时间:11年5 月 9日 至 11年1 月 20日 1课程设计题目背光灯系统2任务和要求 通过STC89C52、MAX232、NCP5623连接好硬件电路,设计一个简单的背光灯系统,了解协议和5623的功能表以及相关的知识。编写程序控制红、绿、蓝3个LED进行有规律的亮灭。所设计的背光灯系统应该完成以下功能:1、可以实现背光灯系统亮度的调节;2、可以利用三原色实现背光灯系统颜色的调节;3、整个系统的变化过程清晰可辨。3总体方案的选择实验要求设计一个背光灯系统,并实现亮度和颜色的调节。亮度方面,考虑到LED的亮度

2、和通过它的电流成正比,因此可以通过控制电流来实现亮度的调节,注意要加一个限流电阻。颜色方面,考虑到利用红黄蓝三原色可以获得多种颜色,因此通过三原色各自亮度的调节达到颜色的调节。实验流程图:阅读相关资料熟悉实验目的以及要求设计实验进程电路设计程序编写电路的检测程序的调试导入程序观察实验现象实验结束满意不满意4单元电路的设计STC89C52单元电路MAX232单元电路NCP5623单元电路五、总体电路图六、软件部分,I2C协议及LED控制部分。(1)、I2C协议#include#include #include#define NOP() _nop_() /* 定义空指令 */#define _No

3、p() _nop_() /*定义空指令*/sbit SCL=P20; /I2C 时钟 sbit SDA=P21; /I2C 数据 bit ack; /*应答标志位*/* 起动总线函数 函数原型: void Start_I2c(); 功能: 启动I2C总线,即发送I2C起始条件. */void Start_I2c() SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1; _Nop(); /*起始条件建立时间大于4.7us,延时*/ _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; /*发送起始信号*/ _Nop(); /* 起始条件锁定时间大于4

4、s*/ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop(); _Nop();/* 结束总线函数 函数原型: void Stop_I2c(); 功能: 结束I2C总线,即发送I2C结束条件. */void Stop_I2c() SDA=0; /*发送结束条件的数据信号*/ _Nop(); /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /*发送I2C总线结束信号*/ _Nop(); _N

5、op(); _Nop(); _Nop();/* 字节数据发送函数 函数原型: void SendByte(UCHAR c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作。(不应答或非应答都使ack=0)发送数据正常,ack=1; ack=0表示被控器无应答或损坏。*/void SendByte(unsigned char c) unsigned char BitCnt; for(BitCnt=0;BitCnt8;BitCnt+) /*要传送的数据长度为8位*/ if(cBitCnt)&0x80)SDA=1; /*判断发送位*/ else SDA=0;

6、 _Nop(); SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ _Nop(); _Nop(); /*保证时钟高电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); SDA=1; /*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /*判断是否接收到应答信号*/ SCL=0; _Nop(); _Nop();/* 字节数据接收函数 函数原型: UCHAR RcvByte();功

7、能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数应答从机。 */ unsigned char RcvByte() unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; /*置数据线为输入方式*/ for(BitCnt=0;BitCnt8;BitCnt+) _Nop(); SCL=0; /*置时钟线为低,准备接收数据位*/ _Nop(); _Nop(); /*时钟低电平周期大于4.7s*/ _Nop(); _Nop(); _Nop(); SCL=1; /*置时钟线为高使数据线上数据有效*/ _Nop(

8、); _Nop(); retc=retc1; if(SDA=1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */ _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc);/* 应答子函数函数原型: void Ack_I2c(bit a);功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)*/void Ack_I2c(bit a) if(a=0)SDA=0; /*在此发出应答或非应答信号 */ else SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop()

9、; /*时钟低电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/ _Nop(); _Nop(); (2)、LED控制部分#includesbit SCL=P20;sbit SDA=P21;/*红灯变化状态数组*/unsigned char code Red_string32=0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C ,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x

10、58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F;/*绿灯变化数组状态*/unsigned char code Green_string32=0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C ,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F;/*蓝灯变化状态数组*/unsigned char code Blue_string32=0x80,0x81,

11、0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C ,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F;/*延时*/void Delay_IIC(void) ; ;/*void Delay_1(void) int i,j; for(i=0;i1000;i+ ) /for(j=0;j100;j+) ; */void Delay(void)int i;for(i=0;i6;i+) ;/*传输函数*/vo

12、id Trans(unsigned char Data) int i; for(i=0;i8;i+) if(Data&0x80) SDA=1 else SDA=0 Delay_IIC(); SCL=1; Delay_IIC(); SCL=0; Data=Data1; /*启动IIC*/void start_IIC(void) SDA=1; Delay(); SCL=1; Delay(); SDA=0; Delay(); SCL=0;/*停止IIC*/void stop_IIC(void) SDA=0;Delay();SCL=1;Delay();SDA=1;Delay();/*应答信号*/int

13、 Ack(void) int i; SDA=1; Delay_IIC(); SCL=1; Delay_IIC(); i=SDA; SCL=0; return i;/*传输地址*/void address_Data_trans(void) int i,j,k; while(1) start_IIC(); Trans(0x70); Ack(); for(i=0;i32;i+) Trans(Red_stringj); Ack(); Delay_1(); for(j=0;j32;j+) Trans(Green_stringj); Ack(); Delay_1(); for(k=0;k32;k+) Tr

14、ans(Blue_stringj); Ack(); Delay_1();stop_IIC();Delay_IIC();SDA=1;SCL=1;/* 主函数*/void main(void) address_Data_trans();七、设计过程中发生的问题及解决的方法1.在进行电路设计之前要仔细查找相关资料,并且要认真仔细阅读老师发给的资料,否则,做起来会很迷茫。2、实验中用到的5623芯片比较小,焊接时容易滑动。因此我先用胶带将它固定在底座上再焊接,这样会容易很多。3.按照电路连接器件的时候要细心,我都是在每连完一个器件后用万用表测试电路的各相连管脚是否连通,如果不连通就要检查是否是器件问题

15、或者面包板的问题,及时解决问题,保证电路无误在进行下步连接。4.在试验之前对于IC总线协议有了比较深入的学习,因为这一部分在编程中要求比较高。在I2C总线上每传输一位数据,都有一个时钟脉冲相对应,其逻辑“0”和“1”的信号电平取决于该点的正端电源VDD的电压。I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平变化。5.这次实习中最大的问题就是下载程序,由于器件和软件的原因,总是提醒请上电,无法下载程序,最后只能通过单片机开发板才将程序下载。这部分我们下去后会好好研究,找出问题所在,将它弄好。

16、八、分析和总结1.过此次课程设计我对单片机STC89C52芯片、MAX232以及5623芯片有了一定的了解,对于硬件和如见的结合也有了一定的了解,知道了如何用软件对硬件进行控制。 2.深刻了解了协议(1)二线传输。I2C总线上有所有的结点,如主器件(单片机、微处理器)、外围器件、接口模块等都连在同名端SDA、SCL上。(2)系统中有多个主器件时,这些器件可以做总线的主控制器(无中心主机),(3)I2C总线传输时,采用状态码管理方法。(4)延时函数:是通过架构空循环,然后根据计算机主频以及机器周期以及指令周期计算出延时的长短。起动总线函数:SDA置为1,SCL置为1,然后SDA置为0,产生下降沿触发总线启动 (5)结束总线函数:SDA置为0, SCL置为1,SDA置为1从而触发总线停止。 (6)字节数据发送函数:发送过来的数据与上0x80H,得到传送过来的一位数据,之后数据左移一位再与上0x80H,得到第二位数据,如此循环八次即可接受一个字节的数据。在这次课程设计中,我们运用到了以前所学的专业课知识,如:C语言、汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,这次能够将多门知识来一个大连接,相会融合,相会运用对于自己是一个挑战,也是一个锻炼。9参考文献:例说51单片机(C语言版) 人民邮电出版社 张义和等编著

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号