单片机源程序如下:
- #include <stc15f2k60s2.h>//添加STC15单片机头文件
- unsigned long result,ref; //定义无符号长整形变量result ref
- unsigned char R=0,K=0; //定义无符号整形变量
- void votage() interrupt 0 //外部中断0服务函数
- {
- if(K>=6) //if判断语句 如果k>6 k置0
- {
- K=0;
- }
- else
- {
- K++; //k自加
- }
- }
- void ADC_int() interrupt 5 //ADC中断服务子函数
- {
- if(R==0) //if判断语句 如果R等于0 执行以下语句
- {
- ADC_CONTR=0x60+K; //ADC控制寄存器设置为0x60+k
- ref=(ADC_RES*256+ADC_RESL)*5.0/1024*100000; //ref变量存储转换结果
- R=1; //变量R置1
- ADC_CONTR=0xe8+K; //ADC控制寄存器设置为0xe8+k
- }
- else
- {
- ADC_CONTR=0x67; //ADC控制寄存器设置为0x67
- result=((ADC_RES*256+ADC_RESL)*5.0/1024*100000)/ref*2.5*100000-300; //result变量存储转换结果
- R=0;
- ADC_CONTR=0xef; //ADC控制寄存器设置为0xef
- }
- }
- void main()
- {
- 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};
- //code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能改变;
- //定义的是静态数组
- unsigned int i,n;//定义无符号整形变量
- P1ASF = 0xFF;//与ADC 相关寄存器P1ASF的值设置为0xFF
- CLK_DIV= 0x20; //ADC时钟设置为0x20
- IE0=0;
- EADC=EA=EX0=IT0=1; //使能ADC中断和打开总中断,打开外部中断0 设置为下降沿触发
- ADC_CONTR =0xef; //ADC控制寄存器设置为0xe8
- while(1)
- {
- P7=b[K]; //把静态数组a的元素值赋给P7口
- n=result / 100000 % 10; //取result的十万位赋给n 比如result是946782 则除100000后是9 对10求余后是9
- P0=a[0]; //把静态数组a的元素值赋给P0口
- P2=c[n]; //把静态数组c的元素值赋给P2口
- for (i=1; i<=5; i++) //for循环 i从1到5
- {
- n=result / d[i-1] % 10;//依次取 result(即ADC转换结果)的万位,千位,百位,十位,个位
- P0=a[i];//把静态数组a的元素值赋给P0口
- P2=b[n];//把静态数组c的元素值赋给P2口
- }
- }
- }
复制代码
这个程序貌似我仿真的时候,无结果,求大神指导:
15ADC电压表.zip
(84.04 KB, 下载次数: 106)
|