I2C总线流水灯
- 格式:doc
- 大小:53.50 KB
- 文档页数:5
i2c led 驱动控制专用电路下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!I2C LED 驱动控制专用电路简介在现代电子设备中,LED 光源广泛应用于显示屏、照明和指示灯等方面。
北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。
2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。
三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。
所有这些I/O口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。
这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。
实验二IO口实现LED灯闪烁一、实验目的:1.正确安装keil软件2.正确安装调试驱动,熟悉实验板的用法3.学习IO口的使用方法。
二、实验设备:单片机开发板、学生自带笔记本电脑三、实验内容:利用单片机IO口做输出,接发光二极管,编写程序,使发光二极管按照要求点亮。
四、实验原理:1.LPC1114一共有42个GPIO,分为4个端口,P0、P1、P2口都是12位的宽度,引脚从Px.0~Px.11,P3口是6位的宽度,引脚从P3.0~P3.5。
引脚的内部构造如图所示。
其中Rpu为上拉电阻、Rpd为下拉电阻。
2.为了节省芯片的空间和引脚的数目,LPC1100系列微处理器的大多数引脚都采用功能复用方式,用户在使用某个外设的时候,要先设置引脚。
控制引脚设置的寄存器称之为IO配置寄存器,每个端口管脚PIOn_m都分配一个了一个IO配置寄存器IOCON_PIOn_m,以控制管脚功能和电气特性。
3.IOCON_PIOn_m寄存器其位域定义如表所列。
4.各引脚IOCON寄存器的位[2:0]配置不同的值所相应功能。
5.GPIO寄存器GPIO数据寄存器用于读取输入管脚的状态数据,或配置输出管脚的输出状态,表5-5对GPIOnDATA寄存器位进行描述。
GPIO的数据方向的设置是通过对GPIOnDIR寄存器的位进行与或操作实现的,LPC1100微处理器和8051单片机的GPIO不同,在使用前一定要先设置数据方向才能使用,6.发光二级管的工作电压和工作电流如何?___________________________________________________________________________ ___________________________________________________________________________ _________________________________________________________________________。
I2C总线原理及应用实例I2C总线是一种串行通信总线,全称为Inter-Integrated Circuit,是Philips(飞利浦)公司在1982年推出的一种通信协议。
它可以用于连接各种集成电路(Integrated Circuits,ICs),如处理器、传感器、存储器等。
I2C总线的原理是基于主从架构。
主设备(Master)负责生成时钟信号,并发送和接收数据,从设备(Slave)通过地址识别和响应主设备的命令。
I2C总线使用两根线来传输数据,一根是时钟线(SCL),用于主设备生成的时钟信号;另一根是数据线(SDA),用于双向传输数据。
1. 主设备发送起始位(Start)信号,将SDA线从高电平拉低;然后通过SCL线发送时钟信号,用于同步通信。
2.主设备发送从设备的地址,从设备通过地址识别确定是否响应。
3.主设备发送要传输的数据到从设备,从设备响应确认信号。
4. 主设备可以继续发送数据,或者发送停止位(Stop)信号结束通信。
停止位是将SDA线从低电平拉高。
1.温度监测器:I2C总线可以连接到温度传感器上,通过读取传感器的输出数据,进行温度的监测和控制。
主设备可以设置警报阈值,当温度超过阈值时,可以触发相应的措施。
2.显示屏:很多智能设备上的显示屏都采用了I2C总线,如液晶显示屏(LCD)或有机发光二极管(OLED)等。
主设备通过I2C总线发送要显示的信息,并控制显示效果,如亮度、对比度、清晰度等参数。
3.扩展存储器:I2C总线可以用于连接外部存储器,如电子存储器(EEPROM)。
通过I2C总线,可以读取和写入存储器中的数据,实现数据的存储和传输。
4.触摸屏控制器:许多触摸屏控制器也使用了I2C总线,主要用于将触摸信号传输给主设备,并接收主设备的命令。
通过I2C总线,可以实现对触摸屏的操作,如单击、滑动、缩放等。
5.电源管理器:一些电源管理器也采用了I2C总线,用于控制和监测电池电量、充电状态、电压、电流等参数。
I2C总线接口电路设计I2C(Inter-Integrated Circuit)是一种用于在集成电路之间进行通信的串行总线接口。
它是一种广泛应用于电子系统中的通信协议,可以用于连接各种外部设备,例如传感器、存储器、显示屏等。
在进行I2C总线接口电路的设计时,主要需要考虑以下几个方面:1.电源电压:I2C总线接口电路通常使用3.3V或5V作为电源电压。
选择电源电压需要根据所连接的外部设备的工作电压要求来确定。
2.电路连接:I2C总线一般使用两根线进行通信,即SCL线和SDA线,其中SCL线用于时钟信号,SDA线用于数据信号。
在电路连接方面,需保持SCL和SDA线的长度较短,以减小信号干扰的可能性。
3.电路保护:由于I2C总线通常连接的是外部设备,因此电路中需要加入适当的保护措施,以防止过电压、过电流等情况对电路和设备造成损害。
常用的保护元件包括稳压二极管、保险丝和放电二极管等。
4.信号线驱动:为了保证I2C总线的正常通信,需要对SCL和SDA线进行适当的驱动,以提供足够的信号电平和电流。
常用的信号线驱动器包括晶体管和放大器等。
5.电路滤波:I2C总线通常工作在较高的频率上,因此需要对信号进行滤波处理,以避免高频噪声对通信造成干扰。
常见的滤波元件包括电容和电感等。
6.电路调试:在I2C总线接口电路设计完毕后,需要进行调试和测试。
常见的调试方法包括使用示波器观察信号波形、检查电压和电流等。
总之,I2C总线接口电路设计需要考虑电源电压、电路连接、电路保护、信号线驱动、电路滤波和电路调试等方面的因素。
通过合理设计和调试,可以实现可靠和稳定的I2C总线通信,并连接各种外部设备,提高电子系统的功能和性能。
LED流水灯实验一、实验内容将LED灯逐个点亮,然后全亮,全灭。
二、实验原理8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,用一个八位二进制的左移和右移来确定灯的亮灭,并用定时器延时。
三、描述该实验中运用的理论知识1、LED的点亮:8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P0来进行操作。
2、流水效果:C语言的8位二进制数代表了8个IO口,左移,最低位填0,然后按位取反,就可以将灯逐个点亮3、延时:特殊功能寄存器TMOD,如图T1和T0分别代表单片机两个计数器。
GATE:该位被置位时为门控位。
仅当TR1被置位并且INT1脚为高,定时器开始计数。
当该位被清零时,只要TR1被置位,定时器1马上开始计数。
C/T:该位为0的时候,用作定时器,该位为1的时候,用做计数器。
0.5秒的延时12 * (65536- x)/11059200 = 0.001四、实验步骤1、流程图2、结果程序:#include <reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;sbit ENLED = P1^4;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;main(){uint8 counter;uint16 i,j;ENLED = 0;ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;TMOD = 0x01;TH0 = 0xB8;TL0 = 0x00;TR0 = 1;while(1){if(1 == TF0){TF0 = 0;TH0 = 0xB8;TL0 = 0x00;counter++;}if(25 == counter){counter = 0;if(8 == j){P0 = 0X00;for(i=0;i<=38000;i++);P0 = 0XFF;for(i=0;i<=38000;i++);j = 0;}P0 = ~(1 << j++);}}}。
【摘要】:若干个灯泡有规律依次点亮或者依次熄灭叫流水灯,它用在夜间建筑物装饰方面。
例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。
一般情况下单片机的流水灯由若干个LED发光二极管组成,在单片机系统运行时,可以在不同的状态下让流水灯显示不同的组合,作为单片机运行正常的指示,当单片机系统出现故障时,可以利用流水灯显示当前的故障码,对故障做出诊断。
本设计采用一块单片机(AT89C52。
BUS)作为流水灯系统的控制核心,通过编程来实现单片机I/O口对LED的控制,使流水灯显示上下流动、停止流动、闪灯等功能,并由按键控制流水灯的不同亮法,LED的工作方式通过键盘的扫描实现。
其中的LED采取共阴极接法,通过依次向连接的LED的I/O口送出低电平来实现LED的点亮.【关键词】:流水灯按键控制单片机数码管显示1、引言1。
1初始条件:1. 单片机型号为AT89C52,晶振频率为12MHz,控制16个红色发光二极管;2。
16个红色发光二极管共有6种亮灯模式,每个灯亮200ms;3. 通过若干按键选择,用查询方式实现红色发光二级管的不同亮灯模式;4。
要求灯与灯之间的亮、灭交替速度可调;5。
用LED数码管显示每种亮灯模式;6。
系统处于不同亮灯模式时,伴有不同的声音,至少有3种不同的声音.1.2要求完成的主要任务:1。
查阅参考文献,自学相关元器件的内部结构、工作方式或初始化编程过程;2. 按初始条件完成相关电路的设计,绘制单片机控制系统硬件接线原理图;3。
自行创新设计,完成程序结构与控制功能设计,进行系统调试,实现控制要求;4. 撰写设计说明书,说明书字数不少于5000字,参考文献不少于8篇;2 、系统总体方案设计2.1 系统的方案设计:根据题目的要求,控制模块需要选择单片机作为核心控件,选择的单片机AT89C52还有各自的总线型号的,而对于按键,可以选择BUTTON,当然用SWITCH 来代替也是可以实现的;显示模块的LED发光二极管选择红色.考虑到题目的要求与电路图布线的问题,经过仔细的分析和论证,最终的方案如下:单片机:AT89C52按键:BUTTON 发光二极管:LED-RED和蜂鸣器等。
单片机原理流水灯实验单片机原理流水灯实验是一种十分基础的单片机实验,在学习单片机的初级阶段非常重要。
流水灯可以通过多个灯依次亮起,再逐个熄灭,形成灯光流动的效果。
下面将详细介绍单片机原理流水灯实验的步骤和实现原理。
首先,我们需要准备的材料和工具有:1. 单片机主板:例如STC89C52RC型号。
2. LED灯:我们需要7个LED灯,可以选择不同颜色和尺寸的。
3. 面包板:用于连接电路。
4. 连接线:用于连接单片机主板和面包板以及连接LED灯。
接下来,我们开始进行单片机原理流水灯实验的步骤:第一步:连接电路1. 将7个LED灯连接到面包板上,按照流水灯的顺序连接,可以使用杜邦线连接。
2. 在面包板上连接7个电流限制电阻,以保护LED灯,限制电流的大小根据具体LED灯的要求确定。
3. 将面包板的VCC和GND引线分别连接到单片机主板的VCC和GND引脚上。
第二步:编写程序1. 打开Keil C51编译器,新建一个项目。
2. 编写C语言程序,实现流水灯的效果,代码如下:c#include <reg52.h>声明I/O口函数void delay(unsigned int t);void ledFlow(void);程序入口void main(void){主循环while (1){LED流水灯效果ledFlow();}}延时函数void delay(unsigned int t)unsigned int i, j;for (i = 0; i < t; i++)for (j = 0; j < 120; j++);}LED流水灯效果函数void ledFlow(void){unsigned int i;unsigned char flowData = 0x01;for (i = 0; i < 8; i++){P0 = flowData; 将数据输出到P0口delay(500); 延时500msflowData <<= 1; 左移一位}delay(500); 延时500msflowData = 0x80; 数据复位for (i = 0; i < 8; i++){P0 = flowData; 将数据输出到P0口delay(500); 延时500msflowData >>= 1; 右移一位}delay(500); 延时500ms}第三步:烧录程序1. 将单片机主板连接到电脑上,并打开STC-ISP烧录软件。
基于51单片机的I2C总线流水灯
1.实验任务
利用单片机AT89C51与24C02C芯片、LED设计一串流水灯,八个流水灯。
2. 电路原理图
3.硬件的连接
1)sck管脚与单片机的P3.6相连;
2)sda管脚与单片机的P3.7相连;
3)24C02C其他管脚都接地;
4)P1口接八个led灯;
4.c语言程序设计
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P3^7; //定义数据线
sbit scl=P3^6; //定义时钟线
uchar code table[]={0xfe,0xfd,
0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//灯的显示代码
void delay()
{;;}
void delay1(uint z) //延时
{
int x,y;
for(x=0;x<110;x++)
for(y=z;y>0;y--);
}
void init () //初始化要比较好
{
sda=1;
scl=1;
delay();
}
void start()//开始/当时钟线为高时,数据线从高到低的跳变,表示开始。
当然当中的延时有3us 已经足够。
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()//结束/当时钟线为高时,数据线从低到高的跳变表示结束。
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons()//应答器件会将sda线拉低,表示收完了8位数据,所以一开始将数据拉高,是位了观察sda线是否被拉低;然而若从件没有给应答信号
{ //若从件没有给应答信号,过了一段时间后,就默认它以接受完了。
uchar i="0";
scl=1;
delay();
while((sda==1)&&(i<255))i++;
scl=0;
delay();
}
void wr_date(uchar date)//写入芯片
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
scl=0; //当scl 线为低时,才允许sda变化,所以将其拉低
delay();
temp=(temp<<1); //将要发的东西左移到CY位,
sda=CY; // 将要发的数据给sda线
delay();
scl=1; //
delay();
}
scl=0; //当scl线从高到低跳变时,发送一位数据
delay();
}
uchar re_date()//读出芯片的内容原理和上面写数据差不多。
{
uchar i,num;
for(i=0;i<8;i++)
{
scl=1;
delay();
num=(num<<1)|sda;
delay();
scl=0;
delay();
}
return num;
}
void wr_rea(uchar address,uchar date)//总的写入芯片
{
start(); //开始
wr_date(0xa0); //写要找的器件的地址(现三个地址选择端都是零电位)。
respons(); //应答
wr_date(address); //写器件内部的地址(要写入数据的地方)respons(); //
wr_date(date); //写要写的数据
respons(); //
stop(); //终止信号
}
uchar re_rea(uchar address)//总的读出芯片的内容(和上面差不多)
{
uchar date;
start();
wr_date(0xa0);
respons();
wr_date(address);
respons();
start();
wr_date(0xa1);
respons();
date=re_date();
respons();
stop();
return date;
}
void main()
{
uchar i;
init(); //有没有问题不是很大,但最好有
while(1)
{
for(i=0;i<8;i++) //让流水灯闪烁
{
wr_rea(23,table[i]); //写数据
delay1(100); //写与读之间要相隔一段时间P1=re_rea(23); // 读数据,赋给P1
delay1(400);
}
}
}。