完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uint unsigned int #define uchar unsigned char uchar dispbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar dispbuf1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; uint temp1,sh1,ge1,n1,m1; uchar ad_average_result1; //AD转换十次的平均值 uchar ad_average_result2; //AD转换十次的平均值 uchar ad_average_result; //AD转换十次的平均值 uchar Vin=0; char tp=0; //-------模块延时程序---------------------------- 1ms void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延时1ms { uint i,j; for(;delay1ms>0;delay1ms--) for(i=0;i<7;i++) for(j=0;j<210;j++); } void delay(uint delay) //STC11F60XE,22.1184M,延时170us { uint i,j; for(;delay>0;delay--) for(i=0;i<124;i++); for(j=0;j<124;j++); } /******************************************************* AD转换程序 *******************************************************/ void ADC_Power_On() //AD转换电 { ADC_CONTR|=0x80; delay(5); //必要的延时 } void get_ad_result() //取AD结果函数,它是十位AD转换,每十次平均,最后取平均十位作为AD采样数据 { uchar i=0,q=0,p=0; // for(i=0;i<10;i++) // { tp=0; ADC_RES=0; //高八位数据清零,STC12C5A60S2 AD数据寄存名与STC12C54××系列不同 ADC_RESL=0; //低两位清零 ADC_CONTR|=0x08; //启动AD转换 while(!tp) //判断AD转换是否完成 { tp=0x10; tp&=ADC_CONTR; } ADC_CONTR&=0xe7; delay(2); ad_average_result1=ADC_RES; //取高八位数据 ad_average_result2=ADC_RESL; //取低2位数据 // q=q+ad_average_result1; //各取十次平均 // p=p+ad_average_result2; // } // ad_average_result=q/10; //得到最后结果 // ad_average_result2=p/10; //ad_average_result=ad_average_result*4*5000/1024; ad_average_result=ad_average_result1*4+ad_average_result2; } /********************电压采样程序********************/ void caiyangP10() //测电压 { //P1M0|=0x01; //设P1_0为开漏模式 如: P1_0= #00000000B //P1M1|=0x01; P1ASF=0x01; //设置P1.0为输入AD转换口 ADC_CONTR&=0xe0; delay(2); get_ad_result(); //取转换数据 Vin=ad_average_result; } void display() { P3=0x00; //每次显示之前消影 P3=dispbuf[sh1]; //十位 P2=0xfe; delay1ms(300); P3=0x00; P3=dispbuf1[ge1]; //个位显示带有小数点 P2=0xfd; delay1ms(300); P3=0x00; P3=dispbuf[n1]; //小数点后1位 P2=0xfb; delay1ms(300); P3=0x00; P3=dispbuf[m1]; //小数点后第二位 P2=0xf7; delay1ms(300); P3=0x00; } void displayP10() { float ad1; ad1=Vin*4.8828125; //得到输入的十进制电压值 单位为 mv // ad1=Vin*1.953125; // temp1=(int)((ad1-2000)/66); // temp1=(int)ad1; sh1=temp1/1000; //十位 ge1=(temp1%1000)/100; //个位 n1=((temp1%1000)%100)/10; //小数点后一位 m1=((temp1%1000)%100)%10; //小数点后二位 display(); //计算完上边的数据后显示 } void main() { P3M0|=0xff; //设P3_0为推挽模式 P3M1|=0x00; AUXR1&=0xfb; EA=1; ADC_Power_On(); //开AD电源 while(1) { delay(10); //显示频率 caiyangP10(); //测电压 displayP10(); delay(10); } } |
|
相关推荐
39个回答
|
|
#include #define uint unsigned int #define uchar unsigned char uchar dispbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar dispbuf1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; uint temp1,sh1,ge1,n1,m1; uchar ad_average_result1; //AD转换十次的平均值 uchar ad_average_result2; //AD转换十次的平均值 uchar ad_average_result; //AD转换十次的平均值 uchar Vin=0; char tp=0; //-------模块延时程序---------------------------- 1ms void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延时1ms { uint i,j; for(;delay1ms>0;delay1ms--) for(i=0;i<7;i++) for(j=0;j<210;j++); } void delay(uint delay) //STC11F60XE,22.1184M,延时170us { uint i,j; for(;delay>0;delay--) for(i=0;i<124;i++); for(j=0;j<124;j++); } /******************************************************* AD转换程序 *******************************************************/ void ADC_Power_On() //AD转换电 { ADC_CONTR|=0x80; delay(5); //必要的延时 } void get_ad_result() //取AD结果函数,它是十位AD转换,每十次平均,最后取平均十位作为AD采样数据 { uchar i=0,q=0,p=0; // for(i=0;i<10;i++) // { tp=0; ADC_RES=0; //高八位数据清零,STC12C5A60S2 AD数据寄存名与STC12C54××系列不同 ADC_RESL=0; //低两位清零 ADC_CONTR|=0x08; //启动AD转换 while(!tp) //判断AD转换是否完成 { tp=0x10; tp&=ADC_CONTR; } ADC_CONTR&=0xe7; delay(2); ad_average_result1=ADC_RES; //取高八位数据 ad_average_result2=ADC_RESL; //取低2位数据 // q=q+ad_average_result1; //各取十次平均 // p=p+ad_average_result2; // } // ad_average_result=q/10; //得到最后结果 // ad_average_result2=p/10; //ad_average_result=ad_average_result*4*5000/1024; ad_average_result=ad_average_result1*4+ad_average_result2; } /********************电压采样程序********************/ void caiyangP10() //测电压 { //P1M0|=0x01; //设P1_0为开漏模式 如: P1_0= #00000000B //P1M1|=0x01; P1ASF=0x01; //设置P1.0为输入AD转换口 ADC_CONTR&=0xe0; delay(2); get_ad_result(); //取转换数据 Vin=ad_average_result; } void display() { P3=0x00; //每次显示之前消影 P3=dispbuf[sh1]; //十位 P2=0xfe; delay1ms(300); P3=0x00; P3=dispbuf1[ge1]; //个位显示带有小数点 P2=0xfd; delay1ms(300); P3=0x00; P3=dispbuf[n1]; //小数点后1位 P2=0xfb; delay1ms(300); P3=0x00; P3=dispbuf[m1]; //小数点后第二位 P2=0xf7; delay1ms(300); P3=0x00; } void displayP10() { float ad1; ad1=Vin*4.8828125; //得到输入的十进制电压值 单位为 mv // ad1=Vin*1.953125; // temp1=(int)((ad1-2000)/66); // temp1=(int)ad1; sh1=temp1/1000; //十位 ge1=(temp1%1000)/100; //个位 n1=((temp1%1000)%100)/10; //小数点后一位 m1=((temp1%1000)%100)%10; //小数点后二位 display(); //计算完上边的数据后显示 } void main() { P3M0|=0xff; //设P3_0为推挽模式 P3M1|=0x00; AUXR1&=0xfb; EA=1; ADC_Power_On(); //开AD电源 while(1) { delay(10); //显示频率 caiyangP10(); //测电压 displayP10(); delay(10); } } |
|
|
|
景宏涛 发表于 2016-12-6 12:43 数据没问题哎,逻辑关系也对着呢,谢谢你呀 |
|
|
|
看不懂,不过之前老师说过数据的类型错了,会有结果错的情况
|
|
|
|
会飞的傻杰 发表于 2016-12-06 15:42 后面没有吗? |
|
|
|
|
|
|
|
1002925094
|
|
|
|
|
|
|
|
我这个用的是stc12c5a60s2单片机,就是用这个头文件呀 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
没看完整,什么都不清楚呀!
|
|
|
|
又见帅哥 发表于 2016-12-5 15:37 谢谢你,我在这边在看看吧 |
|
|
|
看看,也学习一下哦
|
|
|
|
|
|
|
|
你的头文件呢
|
|
|
|
还是看不全,发我QQ吧,345601793
|
|
|
|
|
|
|
|
|
|
|
|
FaTeh 发表于 2016-12-08 13:59 没看见过这样写的 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2024年上海海思MCU开发者体验官招募,手机/MatePad大奖等你拿!
1464 浏览 0 评论
【xG24 Matter开发套件试用体验】蓝牙控制板载LED
1013 浏览 0 评论
1286 浏览 0 评论
电赛:mspm0l1306的开发板可以烧录程序,但是程序运行不了,怎么解决这个问题?
1322 浏览 1 评论
【xG24 Matter开发套件试用体验】Silicon Labs 基于 EFR32MG24 Explorer Kit 开发板 开箱试用体验
1020 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10575 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-10 09:13 , Processed in 0.889795 second(s), Total 79, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191