标题: STC15单片机自带ADC电压表Proteus仿真程序 求帮助 [打印本页]

作者: 天外仙    时间: 2021-3-4 17:19
标题: STC15单片机自带ADC电压表Proteus仿真程序 求帮助


单片机源程序如下:
  1. #include <stc15f2k60s2.h>//添加STC15单片机头文件
  2. unsigned long result,ref; //定义无符号长整形变量result ref
  3. unsigned char R=0,K=0;   //定义无符号整形变量
  4. void votage() interrupt 0 //外部中断0服务函数
  5. {
  6.     if(K>=6)   //if判断语句  如果k>6  k置0
  7.     {
  8.         K=0;   
  9.     }
  10.     else
  11.     {
  12.         K++;   //k自加
  13.     }
  14. }
  15. void ADC_int() interrupt 5    //ADC中断服务子函数
  16. {
  17.     if(R==0)    //if判断语句  如果R等于0  执行以下语句
  18.     {
  19.         ADC_CONTR=0x60+K; //ADC控制寄存器设置为0x60+k
  20.         ref=(ADC_RES*256+ADC_RESL)*5.0/1024*100000;  //ref变量存储转换结果
  21.         R=1;      //变量R置1
  22.         ADC_CONTR=0xe8+K;   //ADC控制寄存器设置为0xe8+k
  23.     }
  24.     else
  25.     {
  26.         ADC_CONTR=0x67;  //ADC控制寄存器设置为0x67
  27.         result=((ADC_RES*256+ADC_RESL)*5.0/1024*100000)/ref*2.5*100000-300; //result变量存储转换结果
  28.         R=0;
  29.         ADC_CONTR=0xef;   //ADC控制寄存器设置为0xef
  30.     }
  31. }
  32. void main()
  33. {
  34.     unsigned int code a[]= {0x01,0x02,0x04,0x08,0x10,0x20},b[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90},c[]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0,0x10},d[]= {10000,1000,100,10,1};
  35.         //code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能改变;
  36.         //定义的是静态数组
  37.    unsigned int i,n;//定义无符号整形变量
  38.     P1ASF = 0xFF;//与ADC 相关寄存器P1ASF的值设置为0xFF
  39.     CLK_DIV= 0x20;    //ADC时钟设置为0x20
  40.     IE0=0;  
  41.     EADC=EA=EX0=IT0=1;   //使能ADC中断和打开总中断,打开外部中断0  设置为下降沿触发
  42.     ADC_CONTR =0xef; //ADC控制寄存器设置为0xe8
  43.     while(1)
  44.     {
  45.         P7=b[K]; //把静态数组a的元素值赋给P7口
  46.         n=result / 100000 % 10;   //取result的十万位赋给n   比如result是946782 则除100000后是9 对10求余后是9
  47.         P0=a[0]; //把静态数组a的元素值赋给P0口
  48.         P2=c[n];  //把静态数组c的元素值赋给P2口
  49.         for (i=1; i<=5; i++) //for循环  i从1到5
  50.         {
  51.             n=result / d[i-1] % 10;//依次取 result(即ADC转换结果)的万位,千位,百位,十位,个位  
  52.             P0=a[i];//把静态数组a的元素值赋给P0口
  53.             P2=b[n];//把静态数组c的元素值赋给P2口
  54.         }
  55.     }
  56. }
复制代码

这个程序貌似我仿真的时候,无结果,求大神指导:
15ADC电压表.zip (84.04 KB, 下载次数: 109)






作者: aking991    时间: 2021-3-5 08:23
你这程序也只是一般用的测试,基准源是自设定的,这种方法测出来是有一定的误差的,建议用读内部基准源再来计算,这样误差就小点了,不然你的供电5V就要非常准才稳定,另外这个芯片可以测8路的,你也只是测了7路而已
作者: 天外仙    时间: 2021-3-5 13:21
aking991 发表于 2021-3-5 08:23
你这程序也只是一般用的测试,基准源是自设定的,这种方法测出来是有一定的误差的,建议用读内部基准源再来 ...

大神能分享一份比较好的STC15ADC采集程序和仿真吗?
作者: horton1314    时间: 2023-4-3 19:28
我的也出现了这个问题呀
作者: ddsczrm    时间: 2024-6-3 17:46
怎么减小这个程序的误差啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1