小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 3919|回复: 0

STC12C5A60S2片内AD4路采集循环显示

[复制链接]
发表于 2015-11-16 18:12:34 | 显示全部楼层 |阅读模式
  1. /**********************************************************
  2.         功能  :STC12C5A60S2片内4路AD循环检测并数码管显示
  3.                         大数码管实验板 约2秒循环显示一次。P1^0-P1^3口
  4.                         模拟输入的值
  5.         单片机:STC12C5A60S2
  6.         晶振  :11.0592M
  7.         作者  :苏义江
  8.         时间  ;2015-11-16
  9.        
  10. ********************************************************/
  11. #include<stc12c5a60s2.h>
  12. #include<intrins.h>
  13. #define uint8 unsigned char
  14. #define uint16 unsigned int
  15. //带小数点的共阳段码
  16. uint8 code tab_d[]={0x40,0x79,0x24,0x30,0x19,0x12,
  17. 0x02,0x78,0x00,0x10}; //带点共阳段驱动
  18. //不带小数点的共阳段码
  19. uint8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,               
  20.                                 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  21. //sfr P1ASF=0x9d;           
  22. //sfr ADC_CONTR=0xbc;
  23. //sfr ADC_RES  =0xbd;
  24. //sfr ADC_RESL =0xbe;
  25. sbit wei=P0^6;
  26. sbit duan=P0^7;
  27. uint8 datah0=0;
  28. uint8 datah1=0;
  29. uint8 datah2=0;
  30. uint8 datah3=0;
  31. uint8 tab[4];

  32. void delayms(uint16 z)
  33. {
  34.         uint16 x,y;
  35.         for(x=z;x>0;x--)
  36.         for(y=620;y>0;y--);
  37. }
  38. void ADC_Init0(void)
  39. {
  40.         P1ASF=0x0F;//P1.0,P1.1,P1.2,P1.3口作为模拟功能AD使用。
  41.         ADC_CONTR=0X80;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD转换控制位初始化为0,选择P1.0作为AD输入来用。

  42.         ADC_RES =0;
  43.         ADC_RESL =0;
  44. }
  45. void ADC_Init1(void)
  46. {
  47.         ADC_CONTR=0X81;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD转换控制位初始化为0,选择P1.1作为AD输入来用。
  48. }
  49. void ADC_Init2(void)
  50. {
  51.         ADC_CONTR=0X82;
  52. }
  53. void ADC_Init3(void)
  54. {
  55.         ADC_CONTR=0X83;
  56. }
  57. void display(uint8 num)
  58. {
  59.         uint8 hundred,ten,one;
  60.         float a;
  61.         int        b;
  62.         a=ADC_RES;
  63.         a=(ADC_RES+0.05)/55; //调节/后面的数值调节精度
  64. //        a=(num+0.005)/51;
  65.         a=a*100;
  66.         b=a;
  67.         hundred=b/100;
  68.         ten=b%100/10;
  69.         one=b%10;
  70.         wei=1;
  71.         P2=0XFE;
  72.         wei=0;
  73.         duan=1;
  74.         P2=tab_d[hundred];
  75.         duan=0;
  76.         delayms(10);
  77.         P2=0xff;

  78.         wei=1;
  79.         P2=0XFd;
  80.         wei=0;
  81.         duan=1;
  82.         P2=table[ten];
  83.         duan=0;
  84.         delayms(10);
  85.         P2=0xff;

  86.         wei=1;
  87.         P2=0XFb;
  88.         wei=0;
  89.         duan=1;
  90.         P2=table[one];
  91.         duan=0;
  92.         delayms(10);
  93.         P2=0xff;
  94.        
  95. }
  96. void main()
  97. {       
  98.         uint8 i;
  99.     ADC_Init0();
  100.     ADC_Init1();
  101.         ADC_Init2();
  102.     ADC_Init3();
  103.         while(1)
  104.         {
  105.                 ADC_CONTR=0X80;
  106.                 _nop_();
  107.                 _nop_();
  108.                 _nop_();
  109.                 _nop_();
  110.                 datah0=ADC_RES;
  111.        
  112.         /***************************/
  113.                 ADC_CONTR=0X81;
  114.                 _nop_();
  115.                 _nop_();
  116.                 _nop_();
  117.                 _nop_();
  118.                 datah1=ADC_RES;
  119.                 ADC_CONTR=0X82;
  120.                 _nop_();
  121.                 _nop_();
  122.                 _nop_();
  123.                 _nop_();
  124.                 datah2=ADC_RES;
  125.                 ADC_CONTR=0X83;
  126.                 _nop_();
  127.                 _nop_();
  128.                 _nop_();
  129.                 _nop_();
  130.                 datah3=ADC_RES;
  131.                 ADC_CONTR=0X88;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.0作为AD输入来用。
  132.                 _nop_();
  133.                 _nop_();
  134.                 _nop_();
  135.                 _nop_();/*以上是四个时钟延时*/
  136.                 for(i=0;i<50;i++)
  137.                 {
  138.                         display(table[datah0]);
  139.                         delayms(5);       
  140.                 }
  141.                 delayms(2000);
  142.                 //          R_S_Byte(datah0);
  143.                 tab[0]=datah0;
  144.                 ADC_CONTR=0X89;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.1作为AD输入来用。
  145.                 _nop_();
  146.                 _nop_();
  147.                 _nop_();
  148.                 _nop_();
  149.                 /*以上是四个时钟延时*/
  150.                 for(i=0;i<50;i++)
  151.                 {
  152.                         display(table[datah1]);
  153.                         delayms(5);       
  154.                 }
  155.                 delayms(2000);
  156.        
  157.                 //           R_S_Byte(datah1);
  158.                 tab[1]=datah1;
  159.                 ADC_CONTR=0X8A;
  160.                 _nop_();
  161.                 _nop_();
  162.                 _nop_();
  163.                 _nop_();
  164.                 for(i=0;i<50;i++)
  165.                 {
  166.                         display(table[datah2]);
  167.                         delayms(5);       
  168.                 }
  169.                 delayms(2000);
  170.        
  171.                 //          R_S_Byte(datah2);
  172.                 tab[2]=datah2;
  173.                 ADC_CONTR=0X8B;
  174.                 _nop_();
  175.                 _nop_();
  176.                 _nop_();
  177.                 _nop_();
  178.                 for(i=0;i<50;i++)
  179.                 {
  180.                         display(table[datah3]);
  181.                         delayms(5);       
  182.                 }
  183.                 delayms(2000);
  184.        
  185.                 //          R_S_Byte(datah3);
  186.                 tab[3]=datah3;        
  187.         }
  188. }

复制代码


回复

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-5-4 02:17 , Processed in 1.074243 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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