找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2392|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

ad0831+lcd+da0808+ds1302+24c64的應(yīng)用程序及仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
給大家分享一個(gè)ad0831+lcd+da0808+ds1302+24c64的仿真,下面是原理圖:



仿真工程文件及所有完整程序等資料下載地址:http://www.torrancerestoration.com/bbs/dpj-56304-1.html

單片機(jī)源程序:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define HIGH 1
  4. #define LOW 0
  5. #define FALSE 0
  6. #define TRUE ~FALSE
  7. #define uchar unsigned char

  8. sbit SCL = P0^4;
  9. sbit SDA = P0^3;

  10. //延時(shí)函數(shù)
  11. void delay(void)
  12. {
  13.         _nop_();
  14.         _nop_();
  15.         _nop_();
  16.         _nop_();
  17. }

  18. //提供I2C總線工作時(shí)序中的起始位
  19. void I_start(void)
  20. {
  21.         SDA = HIGH;
  22.         delay();
  23.         SCL = HIGH;
  24.         delay();
  25.         SDA = LOW;//當(dāng)SCL為高時(shí),SDA的一個(gè)下降沿作為起始位
  26.         delay();
  27.         SCL = LOW;
  28.         delay();
  29. }
  30. //提供I2C總線工作時(shí)序中的停止位
  31. void I_stop(void)
  32. {
  33.         SDA = LOW;
  34.         delay();
  35.         SCL = HIGH;
  36.         delay();
  37.         SDA = HIGH;//當(dāng)SCL為高時(shí),SDA的一個(gè)上升沿作為停止位
  38.         delay();
  39.         SCL = LOW;
  40.         delay();
  41. }
  42. //I2C總線初始化
  43. void I_init(void)
  44. {
  45.         SCL = LOW;
  46.         I_stop();
  47. }
  48. //提供I2C總線的時(shí)鐘信號(hào),并返回時(shí)鐘電平為高期間SDA信號(hào)線上狀態(tài)
  49. bit I_clock(void)
  50. {
  51.         bit sample;
  52.         SCL = HIGH;
  53.         delay();
  54.         sample = SDA;
  55.         SCL = LOW;
  56.         delay();
  57.         return (sample);
  58. }
  59. //向I2C總線發(fā)送8位數(shù)據(jù),并請(qǐng)求一個(gè)應(yīng)答信號(hào)ACK。如果收到ACK應(yīng)答,則返回1,否則返回0。
  60. bit I_send(uchar I_data)
  61. {
  62.         register uchar i;
  63.         /*發(fā)送8位數(shù)據(jù)*/
  64.         for(i=0;i<8;i++)
  65.         {
  66.                 SDA = (bit)(I_data & 0x80);
  67.                 I_data <<= 1;
  68.                 I_clock();
  69.         }
  70.         /*請(qǐng)求應(yīng)答信號(hào)ACK*/
  71.         SDA = HIGH;
  72.         delay();
  73.         return(~I_clock());
  74. }
  75. //從I2C總線上接收8位數(shù)據(jù)信號(hào),并將接收到的8位數(shù)據(jù)作為一個(gè)字節(jié)返回,不回送應(yīng)答信號(hào)。
  76. //主函數(shù)在調(diào)用本函數(shù)之前應(yīng)保證SDA信號(hào)線處于浮置狀態(tài),SDA=1.
  77. uchar I_receive(void)
  78. {
  79.         uchar I_data = 0;
  80.         register uchar i;
  81.         for(i=0;i<8;i++)
  82.         {
  83.                 I_data*=2;
  84.                 if(I_clock())I_data++;
  85.         }
  86.         return (I_data);
  87. }
  88. //向I2C總線發(fā)送一個(gè)應(yīng)答信號(hào)ACK,一般用于連續(xù)數(shù)據(jù)讀取時(shí)
  89. void I_Ack(void)
  90. {
  91.         SDA = LOW;
  92.         I_clock();
  93.         SDA = HIGH;
  94. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表