找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机+adc0804 AD转换

[复制链接]
跳转到指定楼层
楼主
系统采集到的信号,几乎都是模拟信号。学习单片机的模拟数字ad转换是必须的。
这个仿真就是利用adc0804把模拟电压转换为数字信号,然后再输出到数码管。
由于最大电压不超过5v,所以数码管显示只有个位,和小数点后面,我只显示小数点后3位,没有四舍五入。
仿真电路图:


  1.     #include<reg52.h>
  2. #include<intrins.h>
  3.     #define uchar unsigned char
  4.     #define uint unsigned int
  5.     sbit duan=P3^0;    //u1
  6.     sbit wei=P3^1;
  7.     sbit ADC_CS=P3^2;
  8.     sbit ADC_RD=P3^3;
  9.     sbit ADC_WR=P3^4;
  10.     uchar code table[]={
  11.     0x3f,0x06,0x5b,0x4f,
  12.     0x66,0x6d,0x7d,0x07,
  13.     0x7f,0x6f,0x77,0x7c,
  14.     0x39,0x5e,0x79,0x71 };
  15.     void delay(uint xms)
  16.     {
  17.       uint i,j;
  18.       for(i=xms;i>0;i--)
  19.       for(j=80;j>0;j--);
  20.     }

  21.     void show6led(float num)
  22.     {
  23.     unsigned char i;
  24.       P2=0xff;
  25.     P3=0xff;
  26.     i=num;
  27.     duan=1;
  28.     P2=table+0x80;  //显示个位和小数点
  29.     duan=0;
  30.     P2=0xff;   //先关闭led
  31.     wei=1;
  32.     P2=0xfb;             //段选3
  33.     wei=0;
  34.     delay(5);

  35.       P2=0xff;
  36.     P3=0xff;
  37.     num=num-i;
  38.     num=num*10;
  39.     i=num;
  40.     duan=1;
  41.     P2=table;
  42.     duan=0;
  43.       P2=0xff;
  44.       wei=1;
  45.     P2=0xf7;          //段选4,十分位
  46.     wei=0;
  47.     delay(5);
  48.        P2=0xff;
  49.     P3=0xff;
  50.     num=num-i;
  51.     num=num*10;
  52.     i=num;
  53.     duan=1;
  54.     P2=table;
  55.     duan=0;
  56.     P2=0xff;
  57.     wei=1;
  58.     P2=0xef;          //段选5,百分位
  59.     wei=0;
  60.     delay(5);
  61.       P2=0xff;
  62.     P3=0xff;
  63.     num=num-i;
  64.     num=num*10;
  65.     i=num;
  66.     duan=1;
  67.     P2=table;
  68.     duan=0;
  69.     P2=0xff;
  70.     wei=1;
  71.     P2=0xdf;          //段选6,千分位
  72.     wei=0;
  73.     delay(5);
  74.       
  75.       
  76.     }

  77.     void main()
  78.     {
  79.     uchar val;
  80.     ADC_CS=0;

  81.       ADC_WR=1;
  82.       _nop_();
  83.       ADC_WR=0;
  84.       _nop_();
  85.       ADC_WR=1;
  86.       delay(50);
  87.       P1=0xff;
  88.       ADC_RD=1;
  89.     _nop_();
  90.       ADC_RD=0;
  91.       _nop_();
  92.        val=P1;
  93.        ADC_RD=1;
  94.       
  95.       while(1)
  96.       {
  97.        show6led(val*0.02);//adc0832是8位,5v/256=0.02v
  98.       
  99.        }

  100.     }
复制代码



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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