找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5363|回复: 2
收起左侧

关于stc12a5c60s2中内部AD和DA的用法

[复制链接]
ID:78218 发表于 2015-8-3 09:39 | 显示全部楼层 |阅读模式
求大神
回复

使用道具 举报

ID:79544 发表于 2015-8-3 18:18 | 显示全部楼层
STC片内AD程序
  1. /****************************************************
  2.     P2口接4位数码管显示STC12C单片机AD转换电压值,
  3.         测P1 8个口任意一个口转换电压,
  4.     数码管为共阳管

  5.         电压为单片机电压:5v经2个10k电阻分压给单片机vref
  6.                                 提供2.5v基准电压
  7.         作者:苏义江
  8. ***********************************************/

  9. //#include<12c5a.h>
  10. #include<reg51.h>
  11. #include<intrins.h>  
  12. #define  uchar  unsigned  char
  13. #define  uint  unsigned   int

  14. uint AV;
  15. sfr P1ASF     = 0x9D;     //P1口模数转换功能控制寄存器
  16. sfr ADC_CONTR = 0xBC; //AD转换控制寄存器
  17. sfr ADC_RES   = 0xBD;  //AD转换结果寄存器高位
  18. sfr ADC_RESL  = 0xBE; //AD转换结果寄存器低位
  19. sfr AURX1     = 0xA2;  //AD转换结果存储方式控制位
  20. sfr ADC_CONTER=0xc5; //ADC控制寄存器
  21. sfr ADC_DATA=0xc6;//ADC转换结果寄存器 高8位
  22. sfr ADC_LOW2  = 0xBE; //ADC转换结果寄存器 低8位

  23. sfr P1M0 =0x91;
  24. sfr P1M1 =0x92;  
  25. sbit led =P0^0;
  26. sbit led1=P0^1;
  27. sbit wei =P0^6;
  28. sbit duan=P0^7;
  29. uint  a, b, c, d,temp;
  30. uchar code SMG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  31. uchar code table1[]={0x04,0x9e,0x22,0x12,0x98,0x11,0x01,0x96,0x00,0x10};
  32. //带小数点字码表//
  33. uchar  code  table[]={0x44,0xde,0x62,0x52,0xd8,0x51,0x41,0xd6,0x40,0x50};
  34. //不带小数点字码表//

  35. void delay(uint z) //延时//   
  36. {
  37.     uint x,y;   
  38.          for(x=z;x>0;x--)   
  39.          for(y=125;y>0;y--);  
  40. }
  41. /****获取ADC转换结果*****/
  42. uint ADC()  //设置AD转换口//

  43. {
  44.   ADC_CONTER = ADC_CONTER|0x80;
  45.   ADC_DATA=0x00;     
  46.   ADC_CONTER=0xe2;  
  47.   ADC_CONTER|=0x08;
  48.         //查询ADC_FLAG位是否置1
  49.    while ((0x10&ADC_CONTER)!=0x10);
  50. //        ADC_CONTER = ADC_CONTER&0xe7;
  51.    ADC_CONTER&=0xE7; //关闭AD 清除转换结束标志
  52.         //单片机电源为5V,求的真实电压值
  53.    AV=256*ADC_DATA/5;//公式换算成电压值//
  54.    return (AV);
  55. }
  56. void main ()
  57. {  
  58.         //设置P1.2为 AD 输入口
  59. //         P1M0=0X02 ;
  60.   //   P1M1=0X02;
  61.         //把P1.0配置为ADC输入引脚
  62. //        P1M0=0x01;
  63. //        P1M1=0x00;
  64.         //1111 1111 设置P1口为开漏模式,用来AD采集
  65.          P1M0=0xFF;
  66.          P1M1=0xFF;  
  67.          ADC_CONTER|=0x80;//打开ADC电源
  68.            while(1)  
  69.            {
  70.                 temp=ADC();   
  71.                         a=temp/1000;   
  72.                         b=(temp-a*1000)/100;   
  73.                         c=(temp-a*1000-b*100)/10;   
  74.                         d=temp%10;   
  75.                         wei=1;                       
  76.                         P2=0XFE;
  77.                         wei=0;
  78.                         duan=0;
  79.                         duan=1;                          
  80.                         P2=SMG[a];   
  81.                         delay(10);
  82.                            P2=0XFf;

  83.                         wei=1;               
  84.                         P2=0XFd;
  85.                         wei=0;
  86.                         duan=0;
  87.                         duan=1;       
  88.                         P2=SMG[b];   
  89.                         delay(10);
  90.                            P2=0XFf;

  91.                         wei=0;
  92.                         wei=1;
  93.                         P2=0XFb;
  94.                         duan=0;
  95.                         duan=1;          
  96.                     P2=SMG[c];   
  97.                         delay(10);
  98.                            P2=0XFf;

  99.                         wei=0;
  100.                         wei=1;
  101.                         P2=0XF7;
  102.                         duan=0;
  103.                         duan=1;         
  104.                           P2=SMG[d];   
  105.                           delay(10);   
  106.                           P2=0XFf;

  107.                                 if(AV>5.3)
  108.                                 led=0;led1=1;
  109.                                 if(AV<4.5)
  110.                                 led=1;led1=0;
  111.                                 if(AV<5.25&&AV>4.55)
  112.                                 led=1;led1=1;
  113.                 }
  114. }
复制代码
回复

使用道具 举报

ID:78218 发表于 2015-8-4 10:05 | 显示全部楼层

谢谢大神
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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