资源简介
设计的一款声控LED智能灯,该灯含有8个灯珠,采用一个按键统一控制灯的开与关,也可以通过声音控制开灯,开灯后根据环境光亮度,点亮多个灯珠(最暗时点亮8个灯珠,最亮时点亮1个灯珠)
代码片段和文件信息
#include
sbit scl=P2^0; //I2C 时钟
sbit sda=P2^1; //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μs*/
_nop_();
_nop_();
_nop_();
_nop_();
scl=0; /*钳住I2C总线,准备发送或接收数据 */
_nop_();
_nop_();
}
/*******************************************************************
结束总线函数
函数原型: void Stop_I2c();
功能: 结束I2C总线即发送I2C结束条件.
********************************************************************/
void Stop_I2c()
{
sda=0; /*发送结束条件的数据信号*/
_nop_(); /*发送结束条件的时钟信号*/
scl=1; /*结束条件建立时间大于4μs*/
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=1; /*发送I2C总线结束信号*/
_nop_();
_nop_();
_nop_();
_nop_();
}
/*******************************************************************
字节数据发送函数
函数原型: void I2C_SendByte(u8 c);
功能: 将数据c发送出去可以是地址也可以是数据发完后等待应答并对
此状态位进行操作.(不应答或非应答都使ack=0)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void I2C_SendByte(u8 c)
{
u8 i;
for(i=0;i<8;i++) /*要传送的数据长度为8位*/
{
if((c< else sda=0;
_nop_();
scl=1; /*置时钟线为高,通知被控器开始接收数据位*/
_nop_();
_nop_(); /*保证时钟高电平周期大于4μs*/
_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_();
}
/*******************************************************************
字节数据接收函数
函数原型: u8 I2C_RcvByte();
功能: 用来接收从器件传来的数据并判断总线错误(不发应答信号),
发完后请用应答函数应答从机。
********************************************************************/
u8 I2C_RcvByte()
{
u8 retc=0i;
sda=1; /*置数据线为输入方式*/
for(i=0;i<8;i++)
{
_nop_();
scl=0; /*置时钟线为低,准备接收数据位*/
_nop_();
_nop_(); /*时钟低电平周期大于4.7μs*/
_nop_();
_nop_();
_nop_();
scl=1; /*置时钟线为高使数据线上数据有效*/
_nop_();
_nop_();
retc=retc<<1;
if(sda==1)retc=retc+1; /*读数据位接收的数据位放入retc中
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 269 2018-11-12 22:41 project\config.h
文件 6025 2018-11-12 22:52 project\pcf8591.c
文件 215 2018-11-12 22:52 project\pcf8591.h
文件 10045 2018-11-26 17:45 project\pcf8591.LST
文件 10314 2018-11-26 17:45 project\pcf8591.OBJ
文件 6376 2009-05-07 14:37 project\STARTUP.A51
文件 14050 2018-11-26 17:45 project\STARTUP.LST
文件 749 2018-11-26 17:45 project\STARTUP.OBJ
文件 20442 2018-11-26 17:45 project\test
文件 1542 2018-11-26 17:45 project\test.c
文件 5617 2018-11-26 17:45 project\test.hex
文件 70 2018-11-26 17:45 project\test.lnp
文件 4090 2018-11-26 17:45 project\test.LST
文件 20953 2018-11-26 17:45 project\test.M51
文件 7204 2018-11-26 17:45 project\test.OBJ
文件 180 2018-11-26 23:42 project\test.plg
文件 56704 2018-11-26 23:42 project\test.uvopt
文件 13725 2018-11-12 22:58 project\test.uvproj
文件 56696 2018-11-26 17:54 project\test_uvopt.bak
文件 13557 2018-11-12 15:18 project\test_uvproj.bak
文件 281 2018-11-12 21:22 project\uart.c
文件 152 2018-11-06 21:21 project\uart.h
文件 1297 2018-11-26 17:45 project\uart.LST
文件 3159 2018-11-26 17:45 project\uart.OBJ
目录 0 2018-12-03 18:23 project
----------- --------- ---------- ----- ----
253712 25
- 上一篇:树莓派代码
- 下一篇:设计模式计算器的设计
相关资源
- c51单片机数码管显示温度
- 关于pcf8591ad转换的iic读取数据模块
- 基于STC89C51占空比可调的pwm方波
- 单片机代码LED灯,蜂鸣器,按键,流
- 门禁系统设计
- 基于89C51单片机的LCD音乐闹钟(详细注
- C51双机模拟IIC通信源代码.rar
- 基于89C51的等精度频率计LCD1602显示1
- Keil中的C51FPS.LIB文件
- C51+1602液晶+矩阵键盘+三相步进电机
- 基于12864的简易示波器C51编程
- 用89C51实现的正弦波信号发生器电路图
- 简易c51单片机矩阵式键盘密码锁
- PCF8591 ad转换及lcd显示
- 毕业设计智能灯
- 基于51单片机的8路AD电压采集与测量
- 基于P89C51单片机的多路数据采集系统
- 单片机的可视对讲门铃设计
- C51 汇编语言多字节加法,减法,除法
- DAC7614 12bit DAC驱动,c51
- 80c51单片机4位数码管计算器设计
- HC06蓝牙模块控制小灯开关例程
- 51定时器计算器
- TMC5160功能特性简要翻译
- TMC5160寄存器定义
- 单片机内部资源的C51编程.ppt
- STC89c51/52及STC12C5A60S2单片机原理图和
- 单片机课程设计,数字电压表,主要
- 基于AT89C51的倒计时盘
- 篮球记分牌proteus版本.zip
评论
共有 条评论