|
給大家分享一個(gè)ad0831+lcd+da0808+ds1302+24c64的仿真,下面是原理圖:
0.png (37.03 KB, 下載次數(shù): 31)
下載附件
2016-10-7 23:17 上傳
0.png (65.58 KB, 下載次數(shù): 43)
下載附件
2016-10-7 23:19 上傳
仿真工程文件及所有完整程序等資料下載地址:http://www.torrancerestoration.com/bbs/dpj-56304-1.html
單片機(jī)源程序:
- #include <reg51.h>
- #include <intrins.h>
- #define HIGH 1
- #define LOW 0
- #define FALSE 0
- #define TRUE ~FALSE
- #define uchar unsigned char
- sbit SCL = P0^4;
- sbit SDA = P0^3;
- //延時(shí)函數(shù)
- void delay(void)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- //提供I2C總線工作時(shí)序中的起始位
- void I_start(void)
- {
- SDA = HIGH;
- delay();
- SCL = HIGH;
- delay();
- SDA = LOW;//當(dāng)SCL為高時(shí),SDA的一個(gè)下降沿作為起始位
- delay();
- SCL = LOW;
- delay();
- }
- //提供I2C總線工作時(shí)序中的停止位
- void I_stop(void)
- {
- SDA = LOW;
- delay();
- SCL = HIGH;
- delay();
- SDA = HIGH;//當(dāng)SCL為高時(shí),SDA的一個(gè)上升沿作為停止位
- delay();
- SCL = LOW;
- delay();
- }
- //I2C總線初始化
- void I_init(void)
- {
- SCL = LOW;
- I_stop();
- }
- //提供I2C總線的時(shí)鐘信號(hào),并返回時(shí)鐘電平為高期間SDA信號(hào)線上狀態(tài)
- bit I_clock(void)
- {
- bit sample;
- SCL = HIGH;
- delay();
- sample = SDA;
- SCL = LOW;
- delay();
- return (sample);
- }
- //向I2C總線發(fā)送8位數(shù)據(jù),并請(qǐng)求一個(gè)應(yīng)答信號(hào)ACK。如果收到ACK應(yīng)答,則返回1,否則返回0。
- bit I_send(uchar I_data)
- {
- register uchar i;
- /*發(fā)送8位數(shù)據(jù)*/
- for(i=0;i<8;i++)
- {
- SDA = (bit)(I_data & 0x80);
- I_data <<= 1;
- I_clock();
- }
- /*請(qǐng)求應(yīng)答信號(hào)ACK*/
- SDA = HIGH;
- delay();
- return(~I_clock());
- }
- //從I2C總線上接收8位數(shù)據(jù)信號(hào),并將接收到的8位數(shù)據(jù)作為一個(gè)字節(jié)返回,不回送應(yīng)答信號(hào)。
- //主函數(shù)在調(diào)用本函數(shù)之前應(yīng)保證SDA信號(hào)線處于浮置狀態(tài),SDA=1.
- uchar I_receive(void)
- {
- uchar I_data = 0;
- register uchar i;
- for(i=0;i<8;i++)
- {
- I_data*=2;
- if(I_clock())I_data++;
- }
- return (I_data);
- }
- //向I2C總線發(fā)送一個(gè)應(yīng)答信號(hào)ACK,一般用于連續(xù)數(shù)據(jù)讀取時(shí)
- void I_Ack(void)
- {
- SDA = LOW;
- I_clock();
- SDA = HIGH;
- }
復(fù)制代碼 |
|