找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2334|回复: 0
打印 上一主题 下一主题
收起左侧

ad0831+lcd+da0808+ds1302+24c64的应用程序及仿真

[复制链接]
跳转到指定楼层
楼主
给大家分享一个ad0831+lcd+da0808+ds1302+24c64的仿真,下面是原理图:



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

单片机源程序:
  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. //延时函数
  11. void delay(void)
  12. {
  13.         _nop_();
  14.         _nop_();
  15.         _nop_();
  16.         _nop_();
  17. }

  18. //提供I2C总线工作时序中的起始位
  19. void I_start(void)
  20. {
  21.         SDA = HIGH;
  22.         delay();
  23.         SCL = HIGH;
  24.         delay();
  25.         SDA = LOW;//当SCL为高时,SDA的一个下降沿作为起始位
  26.         delay();
  27.         SCL = LOW;
  28.         delay();
  29. }
  30. //提供I2C总线工作时序中的停止位
  31. void I_stop(void)
  32. {
  33.         SDA = LOW;
  34.         delay();
  35.         SCL = HIGH;
  36.         delay();
  37.         SDA = HIGH;//当SCL为高时,SDA的一个上升沿作为停止位
  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总线的时钟信号,并返回时钟电平为高期间SDA信号线上状态
  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总线发送8位数据,并请求一个应答信号ACK。如果收到ACK应答,则返回1,否则返回0。
  60. bit I_send(uchar I_data)
  61. {
  62.         register uchar i;
  63.         /*发送8位数据*/
  64.         for(i=0;i<8;i++)
  65.         {
  66.                 SDA = (bit)(I_data & 0x80);
  67.                 I_data <<= 1;
  68.                 I_clock();
  69.         }
  70.         /*请求应答信号ACK*/
  71.         SDA = HIGH;
  72.         delay();
  73.         return(~I_clock());
  74. }
  75. //从I2C总线上接收8位数据信号,并将接收到的8位数据作为一个字节返回,不回送应答信号。
  76. //主函数在调用本函数之前应保证SDA信号线处于浮置状态,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总线发送一个应答信号ACK,一般用于连续数据读取时
  89. void I_Ack(void)
  90. {
  91.         SDA = LOW;
  92.         I_clock();
  93.         SDA = HIGH;
  94. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表