找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3025|回复: 4
收起左侧

基于51单片机的A/D0809转换

[复制链接]
ID:356519 发表于 2018-6-25 01:26 | 显示全部楼层 |阅读模式
这是我的单片机实验课的实验课题

使用到的A/D芯片为 A/D0809,在数码管上显示电压值,电压范围为0~5v


0.png

  1. #include "reg51.h"
  2. #include "absacc.h"
  3. #define COUNT 5000
  4. #define AIN0 XBYTE[0x0000] //定义外部地址
  5. sbit EOC=P3^3; //转换结束信号
  6. unsigned char LED_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. //unsigned char YLED_seg[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xf7,0xff,0xef};
  8. unsigned char LED_bit[4]={0x01,0x02,0x04,0x08};
  9. unsigned char LED_buf[3]={0};
  10. //fosc=11.0592MHz,9600bps
  11. //串口初始化函数9600bps
  12. void Sbuf_Init(void)
  13. {
  14.     SCON=0x50;  //10位方式
  15.         //波特率设置
  16.         PCON=0x00;  //波特率不倍增
  17.     TMOD=(TMOD&0x0f)|0x20;//T1方式2
  18.     TH1=0xfd;          //T1计数初值
  19.     TL1=0xfd;
  20.         //ES=1;EA=1;        //串口中断使能
  21.     TR1=1;                   //启动定时器
  22. }
  23. void T0_ISR(void) interrupt 1
  24. {
  25.         static unsigned char i=0;
  26.         TH0=(65536-COUNT)/256;
  27.         TL0=(65536-COUNT)%256;
  28.         if(i==2)//显示小数点
  29.         {
  30.                 P2=~LED_bit[i];        //先送位码
  31.                 P1=LED_seg[LED_buf[i]]|0x80;//再送段码;0x80对应的是段码口的dp位
  32.         }
  33.         else
  34.         {
  35.                 P2=~LED_bit[i];        //先送位码
  36.                 P1=LED_seg[LED_buf[i]];         //再送段码
  37.         }
  38.         i++;
  39.         if(i==3)
  40.                 i=0;
  41. }
  42. void Timer0_Init(void)
  43. {
  44.         TMOD=(TMOD&0xf0)|0x01;//定时器0为工作方式1
  45.         TH0=(65536-COUNT)/256;//装初值 高八位
  46.         TL0=(65536-COUNT)%256;//低八位
  47.         ET0=1;//开定时器0中断
  48.         EA=1; //开总中断
  49.         TR0=1;//启动定时器0
  50. }
  51. void delay(unsigned int n)
  52. {
  53.         unsigned int i;
  54.         for(i=0;i<n;i++)
  55. ;
  56. }

  57. void main(void)
  58. {  
  59.                 unsigned int i=0,ad,pre_ad=0;
  60.                 Timer0_Init();
  61. Sbuf_Init();
  62.                 while(1)
  63.                 {
  64.                         AIN0=0;                 //启动转换
  65.                         i=i;
  66.                         i=i;
  67.                         delay(20);
  68.                         while(EOC==0);  //等待AD转换结束
  69.                         ad=AIN0;    //读AD转换结果
  70.                         if(ad!=pre_ad)
  71.                         {
  72.                                 //ad=ad/51;8位A/D转换精度为1/225*5V=19.6mV
  73.                                 LED_buf[2]=(ad*100/51)/100;
  74.                                 LED_buf[1]=(ad*100/51)/10%10;
  75.                                 LED_buf[0]=(ad*100/51)%10;
  76.                         }
  77.                         pre_ad=ad;                 
  78.             }
复制代码


实验5(AD)报告.doc

63 KB, 下载次数: 13, 下载积分: 黑币 -5

回复

使用道具 举报

ID:359165 发表于 2018-6-27 10:50 | 显示全部楼层
怎么会没下起就把我黑币扣了??
回复

使用道具 举报

ID:359165 发表于 2018-6-27 11:12 | 显示全部楼层
下不了文件
回复

使用道具 举报

ID:359165 发表于 2018-6-27 11:15 | 显示全部楼层
下不起你的文件,这是怎么回事 文档1.docx (88.61 KB, 下载次数: 4)

评分

参与人数 1黑币 +5 收起 理由
大家好才是真的 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:359661 发表于 2018-6-29 22:16 | 显示全部楼层
有仿真原文件吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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