资源简介
设计的一款声控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
- 上一篇:树莓派代码
- 下一篇:设计模式计算器的设计
相关资源
- STC8951系列单片机中方指南
- proteus仿真 AT89C51输出各种波形
- 基于AT89C51的数据采集系统设计新方法
- C51单片机汇编指令查询、学习工具集
- 基于89c51的数字钟
- 基于单片机交通灯设计
- 基于89C51计算机锁定加密键盘设计
- 基于51单片机的计算器(C51编写,有
- STM32+TMC5160代码电路图.rar
- AT89C51+ADC0808 PROTEUS仿真
- 单片机原理及接口技术C51编程张毅刚
- 基于AT89C51的十字路口交通灯设计pro
- 单片机原理及接口技术C51编程
- at89c51单片机外文翻译
- 单片机原理及接口技术C51编程高清P
- 基于C51的电子琴设计
- keilc51源代码
- 在C51中变量的空间分配几个方法
- 初学C51的一些误区
- 单片机初学者学习C51时的一些误区和
- Philips 80C51MX
- 12bit流水线ADC电路整体电路原理图-c
- 0.96OLED_C51系列_IIC应答_例程
- 0-999计数器的C51程序
- [单片机原理与应用设计C51编程+Prote
- ESP8266AP模式控制51单片机亮灯.docx
- C51代码生成器(代码快速生成工具)
- 基于AT89C51单片机信号发生器设计.pd
- 89C51单片机最小系统PCB
- 基于AT89C51单片机的多功能函数信号发
评论
共有 条评论