找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19709|回复: 67
收起左侧

stc12c5a60s2详细例程

  [复制链接]
ID:79596 发表于 2015-5-11 01:24 | 显示全部楼层 |阅读模式
其中有20多个例程!

STC12C5A60S2详细例程.rar

728.55 KB, 下载次数: 1453, 下载积分: 黑币 -5

评分

参与人数 2黑币 +55 收起 理由
jiangbo1991 + 5
admin + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:80516 发表于 2015-5-26 20:13 | 显示全部楼层
不错,留着用得上
回复

使用道具 举报

ID:80992 发表于 2015-5-27 12:31 | 显示全部楼层
不错
回复

使用道具 举报

ID:86964 发表于 2015-7-27 13:44 | 显示全部楼层
其实我想问的是这款单片机的AD方面的知识。不知道谁有个好贴链接
回复

使用道具 举报

ID:79544 发表于 2015-7-28 20:07 | 显示全部楼层
CAOMINGYU 发表于 2015-7-27 13:44
其实我想问的是这款单片机的AD方面的知识。不知道谁有个好贴链接

STC12C5A60S2片内AD程序
  1. /*(1)      
  2. P1_ADC_EN:特殊功能寄存器  
  3. P1.x作为A/D转换输入通道来用允许特殊功能寄存器。
  4. 相应位为“1”时,对应的P1.x口作为A/D转换使用
  5. ,内部上拉电阻自动断开。
  6. (2)ADC_CONTR:特殊功能寄存器            
  7. CHS2/CHS1/CHS0是模拟输入通道选择,

  8. CHS2/CHS1/CHS0的取值如下表所示

  9. CHS2  CHS1  CHS0  模拟输入通道选择
  10. 0                 0         0 选择P1.0为A/D输入
  11. 0                 0         1 选择P1.1为A/D输入
  12. 0                 1         0  选择P1.2为A/D输入
  13. 0                 1         1 选择P1.3为A/D输入
  14. 1                 0         0 选择P1.4为A/D输入
  15. 1                 0         1 选择P1.5为A/D输入
  16. 1                 1         0 选择P1.6为A/D输入
  17. 1                  1          1  选择P1.7为A/D输入

  18. ADC_START是模拟/数字转换(ADC)启动控制位,设置为1时,开始转换。      
  19. ADC_FLAG是模拟/数字转换结束标志位,当A/D转换完成后,ADC_FLAG=1。
  20. (3)ADC_DATA:A/D转换结果特殊功能寄存器

  21. 模拟/数字转换结果计算公式为 结果=256×Vin/Vcc

  22. Vin是模拟输入通道输入电压,Vcc为单片机实际工作电压,
  23. 用单片机工作电压作为模拟参考电压 */


  24. //2、STC12C5A60S2内ADC采样电压值,
  25. //先采样30次然后去掉上下10个再取平均值
  26. //STC12C5A60S2内ADC采样
  27. #include <reg51.h>  
  28. #include<math.h>
  29. #define uchar unsigned char
  30. #define uint unsigned int
  31. #define segp P0 //数据端口
  32. #define scanp P2  //位端口
  33. sbit wei=P0^6;
  34. sbit duan=P0^7;
  35. sbit fmq =P1^7;
  36. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,               
  37.                                 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};     //不带点共阳段驱动信号

  38. uchar code tab_d[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带点共阳段驱动

  39. uchar code scan[]={0xfe,0xfd,0xfb,0xf7};

  40.               //位扫描驱动信号
  41. uint display[4]={0,0,0,0}; //初始显示数字
  42. uint con=0, _data=0,data2=0; //con显示循环变量_data为ADC采样值临时变量data2显示数据临时变量
  43. //下面五行为ADC定义

  44. sfr P1ASF=0x9d;           
  45. sfr ADC_CONTR=0xbc;
  46. sfr ADC_RES=0xbd;
  47. sfr ADC_RESL=0xbe;
  48. sfr AUXR1=0xa2;

  49. /*sfr P1_ADC_EN=0x97;
  50. sfr ADC_CONTR=0xc5;
  51. sfr ADC_DATA=0xc6;*/

  52. void t0_t1_init();//t0显示扫描定时器和t1串口比特率定时器初始化函数
  53. void adc_init();  //adc初始化函数
  54. void uart_out(uchar byte);  //串口发送字节函数
  55. uint average(uint buffer[30]); //采样数据处理函数
  56. void AD();                //电压采样30次函数
  57. void delay1ms(uchar x);     //延时函数
  58. void beep()
  59. {
  60.         fmq=0;
  61.         delay1ms(100);
  62.         fmq=1;
  63.         delay1ms(100);
  64. }
  65. void main()
  66. {     
  67.         t0_t1_init();  
  68.         adc_init();  
  69.         while(1)  
  70.         {     
  71.                 AD();
  72.                 if(data2>4700|data2<4000)
  73.                 beep();        //报警         
  74.         }
  75. }
  76. /////////定时器初始化///////  
  77. void t0_t1_init()                        
  78. {
  79.         SCON=0x50;  
  80.         PCON=0;  
  81.         TMOD=0x21;  
  82.         TH1=TL1=0xe6;  
  83.         TH0=0xf0;  
  84.         TL0=0x60;  
  85.         EA=ET0=1;
  86.         // ES=1;  
  87.         TR1=1;  
  88.         TR0=1;
  89. }
  90. ////ADC初始化///////  
  91. void adc_init()                     
  92. {
  93.         P1ASF=0x01;//启动P10为ADC模拟输入口把内部上拉电阻断开
  94.         P1ASF=0x02; //启动P11为ADC模拟输入口把内部上拉电阻断开  
  95.         AUXR1&=0xfb; //adrj_0 高8位在ADC_RES     
  96.         ADC_RES=0;    //初值
  97.         //开启ADC电源 并设置转换周期为540个时钟周期转换一次。
  98.         //SPEED_1_1,chs000(选择AD采样通道p10)
  99.         //ADC_POWER=1; CHS2,1,0为0,用p1.0作为输入。SPEED1,0  
  100.         ADC_CONTR=0x80;//用p1.0作为输入
  101.         ADC_CONTR=0x81;//用p1.1作为输入

  102.         delay1ms(2);
  103.         // IE|=0xa0;  
  104. }
  105. //////采集30次电压值//////  
  106. void AD()                                
  107. {
  108.         char i;  uint temp_buf[30]={0};  
  109.         for(i=0;i<30;i++)  
  110.         {
  111.                 ADC_CONTR |=0x08; //开启转换   
  112.                 while((ADC_CONTR&0x10)==0);   
  113.                 ADC_CONTR &=0xe7;     //清除标志   
  114.                 temp_buf[i]=ADC_RES;   //取出数值到temp_buf      
  115.         }  
  116.         _data=average(temp_buf); //采样30次后的数据代入处理函数处理后返回处理后的数值,给下面用串口发送出去  
  117.         uart_out(_data);  
  118. }
  119. ////先对整个数组的三十个值进行从小到大的排列,
  120. //////  ///再去掉最大5个和最少5个再求平均值;函数返回temp值///
  121. uint average(uint buffer[30])      
  122. {   
  123.         uchar i,j;  
  124.         uint temp;
  125.         for(i=1; i<30; i++)      
  126.         for(j=29; j>=i; --j)   
  127.         {   
  128.                  if(buffer[j-1] > buffer[j])   
  129.                 {      
  130.                         temp = buffer[j-1];     
  131.                         buffer[j-1] = buffer[j];     
  132.                         buffer[j] = temp;
  133.                 }   
  134.         }   
  135.         temp = 0;                                   
  136.         for(i=5; i<25; i++)  
  137.         {   
  138.                 temp += buffer[i];  
  139.         }      
  140.         temp = (uint)(((float)temp) / 20 + 0.5);  
  141.         return(temp);
  142. }
  143. ///显示数据处理及扫描显示中断服务函数////
  144. void t0_4ms(void) interrupt 1      
  145. {   
  146.         data2=_data;  
  147.         data2=_data*19.53;  
  148.         display[0]=tab_d[data2/1000]; //用带小数点的段码
  149.         display[1]=tab[(data2/100)%10]; //用不带小数点的段码  
  150.         display[2]=tab[(data2/10)%10];  
  151.         display[3]=tab[data2%10];  
  152.         TH0=0xf0;  
  153.         TL0=0x60;
  154.         if(++con==5) con=1;
  155.         // segp=0xff;
  156.         wei=1;
  157.         P2=scan[con-1];
  158.         wei=0;
  159.         duan=1;
  160.         P2=display[con-1];
  161.         duan=0;
  162.         delay1ms(10) ;
  163.         P2=0xff;
  164. //        segp=display[con-1];  
  165. //        scanp=scan[con-1];
  166. }
  167. //串口发送节字函数////  
  168. void uart_out(uchar byte)              
  169. {
  170.         SBUF=byte;  
  171.         while(TI==0);  
  172.         TI=0;
  173. }
  174. ///1ms延时////  
  175. void delay1ms(uchar x)               
  176. {
  177. uchar i,j;
  178. for(i=0;i<x;i++)  
  179. for(j=0;j<250;j++);  
  180. }

复制代码
回复

使用道具 举报

ID:70330 发表于 2015-12-12 18:47 | 显示全部楼层
向楼主学习,谢谢!
回复

使用道具 举报

ID:95809 发表于 2015-12-24 13:46 | 显示全部楼层
内容挺丰富,下载学习了。
回复

使用道具 举报

ID:52896 发表于 2016-3-10 11:56 | 显示全部楼层
腾飞的龙 发表于 2015-7-28 20:07
STC12C5A60S2片内AD程序

不错,感谢分享,学习学习
回复

使用道具 举报

ID:68108 发表于 2016-3-11 07:33 | 显示全部楼层
谢谢楼主,感谢谢分享
回复

使用道具 举报

ID:92746 发表于 2016-3-13 22:23 | 显示全部楼层
向楼主学习,谢谢!
回复

使用道具 举报

ID:32565 发表于 2016-5-13 16:07 | 显示全部楼层
谢谢楼主分享、、、
回复

使用道具 举报

ID:120590 发表于 2016-5-13 18:47 | 显示全部楼层
学习了,谢谢楼主
回复

使用道具 举报

ID:115286 发表于 2016-5-13 19:50 | 显示全部楼层
学习了
回复

使用道具 举报

ID:112990 发表于 2016-5-15 17:23 | 显示全部楼层
好强大的    我也刚开始学
回复

使用道具 举报

ID:68727 发表于 2016-5-16 22:02 来自手机 | 显示全部楼层
很好可以对比下89c51的时序问题了
回复

使用道具 举报

ID:124753 发表于 2016-6-4 10:48 | 显示全部楼层
太好了,谢谢楼主
回复

使用道具 举报

ID:126485 发表于 2016-6-14 00:02 | 显示全部楼层
学习感谢楼主分享学习
回复

使用道具 举报

ID:109246 发表于 2016-7-21 11:00 | 显示全部楼层
楼主,里面差spi的,能不能传一下呢
回复

使用道具 举报

ID:100826 发表于 2016-7-21 14:30 | 显示全部楼层
谢谢  学习.....
回复

使用道具 举报

ID:141015 发表于 2016-9-30 20:30 | 显示全部楼层
感谢楼主,收藏了
回复

使用道具 举报

ID:150842 发表于 2016-11-28 20:48 | 显示全部楼层
谢谢楼主分享!
回复

使用道具 举报

ID:106950 发表于 2017-1-28 21:04 | 显示全部楼层
下载来看看 好东西
回复

使用道具 举报

ID:163070 发表于 2017-1-31 18:00 来自手机 | 显示全部楼层
正在学习中,谢谢
回复

使用道具 举报

ID:98992 发表于 2017-2-1 12:00 | 显示全部楼层
谢谢分享很好
回复

使用道具 举报

ID:69254 发表于 2017-3-2 09:38 | 显示全部楼层
内容挺丰富,下载学习了。
回复

使用道具 举报

ID:165753 发表于 2017-4-27 14:15 | 显示全部楼层
谢谢分享,
回复

使用道具 举报

ID:169252 发表于 2017-4-27 20:29 | 显示全部楼层
谢谢楼主分享,楼主万岁
回复

使用道具 举报

ID:110278 发表于 2017-4-27 21:16 | 显示全部楼层
没有钱下载了。
回复

使用道具 举报

ID:189908 发表于 2017-5-4 21:38 | 显示全部楼层
大赞!!!!!!!
回复

使用道具 举报

ID:198368 发表于 2017-5-8 21:44 | 显示全部楼层
好贴子
回复

使用道具 举报

ID:199188 发表于 2017-5-10 20:20 | 显示全部楼层
不错,慢慢学习
回复

使用道具 举报

ID:195866 发表于 2017-5-24 11:47 | 显示全部楼层
谢谢分享,谢谢分享
回复

使用道具 举报

ID:212367 发表于 2017-6-18 21:27 | 显示全部楼层
币不够。。。
回复

使用道具 举报

ID:219168 发表于 2017-7-12 17:16 | 显示全部楼层
不错的资源
回复

使用道具 举报

ID:219920 发表于 2017-7-15 17:33 | 显示全部楼层
好东西,收藏备用,指不定那天就用到了呢
回复

使用道具 举报

ID:145935 发表于 2017-7-16 23:00 | 显示全部楼层
谢谢分享,下了学习。
回复

使用道具 举报

ID:222076 发表于 2017-7-28 15:09 | 显示全部楼层
CAOMINGYU 发表于 2015-7-27 13:44
**** 作者被禁止或删除 内容自动屏蔽 ****

STC12C5A60S2单片机AD采样程序及其寄存器讲解
http://www.51hei.com/bbs/dpj-42513-1.html
(出处: 单片机论坛)
回复

使用道具 举报

ID:219497 发表于 2017-8-10 19:01 | 显示全部楼层
谢啦~谢啦~谢啦~谢啦~
回复

使用道具 举报

ID:171060 发表于 2017-8-14 00:16 | 显示全部楼层
不错,留着以后用
回复

使用道具 举报

ID:171822 发表于 2017-9-25 15:30 | 显示全部楼层
学习一下
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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