資源簡(jiǎn)介
設(shè)計(jì)的一款聲控LED智能燈,該燈含有8個(gè)燈珠,采用一個(gè)按鍵統(tǒng)一控制燈的開與關(guān),也可以通過聲音控制開燈,開燈后根據(jù)環(huán)境光亮度,點(diǎn)亮多個(gè)燈珠(最暗時(shí)點(diǎn)亮8個(gè)燈珠,最亮?xí)r點(diǎn)亮1個(gè)燈珠)

代碼片段和文件信息
#include?
sbit?scl=P2^0;???????//I2C??時(shí)鐘?
sbit?sda=P2^1;???????//I2C??數(shù)據(jù)?
bit?ack;?????????????//應(yīng)答標(biāo)志位
/*******************************************************************
?????????????????????起動(dòng)總線函數(shù)???????????????
函數(shù)原型:?void??Start_I2c();??
功能:?????啟動(dòng)I2C總線即發(fā)送I2C起始條件.??
********************************************************************/
void?Start_I2c()
{
??sda=1;?????????/*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/
??_nop_();
??scl=1;
??_nop_();????????/*起始條件建立時(shí)間大于4.7us延時(shí)*/
??_nop_();
??_nop_();
??_nop_();
??_nop_();????
??sda=0;?????????/*發(fā)送起始信號(hào)*/
??_nop_();????????/*?起始條件鎖定時(shí)間大于4μs*/
??_nop_();
??_nop_();
??_nop_();
??_nop_();???????
??scl=0;???????/*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)?*/
??_nop_();
??_nop_();
}
/*******************************************************************
??????????????????????結(jié)束總線函數(shù)???????????????
函數(shù)原型:?void??Stop_I2c();??
功能:?????結(jié)束I2C總線即發(fā)送I2C結(jié)束條件.??
********************************************************************/
void?Stop_I2c()
{
??sda=0;??????/*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/
??_nop_();???????/*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/
??scl=1;??????/*結(jié)束條件建立時(shí)間大于4μs*/
??_nop_();
??_nop_();
??_nop_();
??_nop_();
??_nop_();
??sda=1;??????/*發(fā)送I2C總線結(jié)束信號(hào)*/
??_nop_();
??_nop_();
??_nop_();
??_nop_();
}
/*******************************************************************
?????????????????字節(jié)數(shù)據(jù)發(fā)送函數(shù)???????????????
函數(shù)原型:?void??I2C_SendByte(u8?c);
功能:?????將數(shù)據(jù)c發(fā)送出去可以是地址也可以是數(shù)據(jù)發(fā)完后等待應(yīng)答并對(duì)
??????????此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0)?????
???????????發(fā)送數(shù)據(jù)正常,ack=1;?ack=0表示被控器無應(yīng)答或損壞。
********************************************************************/
void??I2C_SendByte(u8??c)
{
?u8??i;
?
?for(i=0;i<8;i++)??/*要傳送的數(shù)據(jù)長度為8位*/
????{
?????if((c<???????else??sda=0;????????????????
?????_nop_();
?????scl=1;???????????????/*置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位*/
??????_nop_();?
??????_nop_();?????????????/*保證時(shí)鐘高電平周期大于4μs*/
??????_nop_();
??????_nop_();
??????_nop_();?????????
?????scl=0;?
????}
????
????_nop_();
????_nop_();
????sda=1;????????????????/*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/
????_nop_();
????_nop_();???
????scl=1;
????_nop_();
????_nop_();
????_nop_();
????if(sda==1)ack=0;?????
???????else?ack=1;????????/*判斷是否接收到應(yīng)答信號(hào)*/
????scl=0;
????_nop_();
????_nop_();
}
/*******************************************************************
?????????????????字節(jié)數(shù)據(jù)接收函數(shù)???????????????
函數(shù)原型:?u8??I2C_RcvByte();
功能:????????用來接收從器件傳來的數(shù)據(jù)并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),
??????????發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。??
********************************************************************/????
u8???I2C_RcvByte()
{
??u8??retc=0i;?
??sda=1;?????????????????????/*置數(shù)據(jù)線為輸入方式*/
??for(i=0;i<8;i++)
??????{
????????_nop_();???????????
????????scl=0;??????????????????/*置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/
????????_nop_();
????????_nop_();?????????????????/*時(shí)鐘低電平周期大于4.7μs*/
????????_nop_();
????????_nop_();
????????_nop_();
????????scl=1;??????????????????/*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/
????????_nop_();
????????_nop_();
????????retc=retc<<1;
????????if(sda==1)retc=retc+1;??/*讀數(shù)據(jù)位接收的數(shù)據(jù)位放入retc中?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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
評(píng)論
共有 條評(píng)論