找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机AD

[复制链接]
跳转到指定楼层
楼主
ID:227847 发表于 2017-8-16 14:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机AD(转载)
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit sda=P2^0;
  6. sbit scl=P2^1;
  7. sbit dula=P2^6;
  8. sbit wela=P2^7;
  9. uchar code table[]={

  10.                 0x3F,  //"0"
  11.                 0x06,  //"1"
  12.                 0x5B,  //"2"
  13.                 0x4F,  //"3"
  14.                 0x66,  //"4"
  15.                 0x6D,  //"5"
  16.                 0x7D,  //"6"
  17.                 0x07,  //"7"
  18.                 0x7F,  //"8"
  19.                 0x6F,  //"9"
  20.                 0x77,  //"A"
  21.                 0x7C,  //"B"
  22.                 0x39,  //"C"
  23.                 0x5E,  //"D"
  24.                 0x79,  //"E"
  25.                 0x71,  //"F"
  26.                          };
  27. void delay()  //5us
  28. {;;}
  29. void delay1(uint z)//1ms
  30. {
  31.         uint x,y;
  32.         for(x=z;x>0;x--)
  33.                 for(y=120;y>0;y--);       
  34. }
  35. void display(uchar value)
  36. {
  37.         uchar bai,shi,ge;
  38.         bai=value/100;
  39.         shi=value%100/10;
  40.         ge=value%100%10;

  41.         dula=1;
  42.         P0=table[bai];
  43.         dula=0;
  44.         P0=0xff;
  45.         wela=1;
  46.         P0=0xfe;
  47.         wela=0;
  48.         delay1(1);

  49.         dula=1;
  50.         P0=table[shi];
  51.         dula=0;
  52.         P0=0xff;
  53.         wela=1;
  54.         P0=0xfd;
  55.         wela=0;
  56.         delay1(1);

  57.         dula=1;
  58.         P0=table[ge];
  59.         dula=0;
  60.         P0=0xff;
  61.         wela=1;
  62.         P0=0xfb;
  63.         wela=0;
  64.         delay1(1);
  65. }
  66. void start()
  67. {
  68.         scl=1;
  69.         _nop_();
  70.         sda=1;
  71.         delay();
  72.         sda=0;
  73.         delay();
  74.         scl=0;
  75.         _nop_();
  76. }
  77. void stop()
  78. {
  79.         scl=1;
  80.         _nop_();
  81.         sda=0;
  82.         delay();
  83.         sda=1;
  84.         delay();
  85. }
  86. void respons()
  87. {
  88.         scl=1;
  89.         _nop_();
  90.         sda=0;
  91.         delay();
  92.         scl=0;
  93.         _nop_();
  94. }
  95. void norespons()
  96. {
  97.         scl=1;
  98.         _nop_();
  99.         sda=1;
  100.         delay();
  101. }
  102. void init()
  103. {
  104.         scl=1;
  105.         _nop_();
  106.         sda=1;
  107.         _nop_();
  108. }
  109. void write_byte(uchar dat)
  110. {
  111.         uchar i,temp;
  112.         temp=dat;
  113.         for(i=0;i<8;i++)
  114.         {
  115.                 scl=0;
  116.                 _nop_();
  117.                 if((temp&0x80)==0x80)
  118.                         sda=1;          //写1
  119.                 else
  120.                         sda=0;          //写0
  121.                 scl=1;
  122.                 _nop_();
  123.                 temp<<=1;
  124.         }
  125.         scl=0;
  126.         _nop_();
  127. }
  128. uchar read_byte()
  129. {
  130.         uchar dat,i;
  131.         sda=1;
  132.         _nop_();
  133.         scl=0;
  134.         _nop_();
  135.         for(i=0;i<8;i++)
  136.         {
  137.                 scl=1;
  138.                 _nop_();
  139.                 if(sda)
  140.                         dat|=0x01;
  141.                 if(i<7)
  142.                          dat<<=1;
  143.                 scl=0;
  144.                 _nop_();       
  145.         }
  146.         return dat;
  147. }
  148. void DAC_write(uchar dat)
  149. {
  150.         start();
  151.         write_byte(0x90);
  152.         respons();
  153.         write_byte(0x40);
  154.         respons();
  155.         write_byte(dat);
  156.         respons();
  157.         stop();

  158. }
  159. uchar ADC_read(uchar com)
  160. {
  161.         uchar dat;
  162.         dat=com;
  163.         start();
  164.         write_byte(0x90);
  165.         respons();
  166.         write_byte(com);
  167.         respons();
  168.         start();
  169.         write_byte(0x91);
  170.         respons();
  171.         dat=read_byte();
  172.         norespons();
  173.         stop();
  174.         return dat;
  175. }
  176. void main()
  177. {
  178.         uchar i=0,ad_value;
  179.         init();
  180.         while(1)
  181.         {
  182.                
  183.                 ad_value=ADC_read(0x42);
  184.                 display(255);
  185.                 DAC_write(255);
  186.                 i++;
  187.                 delay1(20);
  188.         }
  189. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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