历史上的今天
今天是:2025年08月14日(星期四)
2020年08月14日 | 单片机多通道AD采集源程序(8路) STC15w系列
2020-08-14 来源:51hei
12864为串行接法。AD0~AD4接的5V电源。
AD5~AD7接的GND。
STC15W408AS 自带8路10位AD
程序只使用了高八位。量程为255.
程序里面含10位AD采集。1024。
代码已注释。
新手上路。有错误还请斧正。
制作出来的实物图如下:

单片机源程序如下
#include #include"intrins.h" #define uchar unsigned char; #define uint unsigned int; uchar a1,b1; //接收高八位,低八位 uint ad1; //用于接收10位AD数据 #define ADC_POWER 0X80; // 上电状态 #define ADC_FLAG 0x10; // FLAG=1,结束转换。ADC_FLAG:A/D转换结束标志位 #define ADC_START 0X08; // START=1,开始转换。 #define ADC_SPEEDLL 0X00; //540个时钟 #define ADC_SPEEDL 0X20; //360个时钟 #define ADC_SPEEDH 0X40; //180个时钟 #define ADC_SPEEDHH 0X60;//90个时钟 /*12864显示*/ unsigned char tab[]= {"AD1: AD2: "}; unsigned char tab1[]={"AD3: AD4: "}; unsigned char tab2[]={"AD5: AD6: "}; unsigned char tab3[]={"AD7: AD8: "}; uchar num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0~9 sbit rw=P2^6; //12864 input sbit e=P2^7; //12864 clock uint ADC_data; //高八位数据 void chushihua(); //12864初始化 void zhiling(unsigned char zhiling); void shuru(unsigned char n); void shuju(unsigned char shuju); void guding(); void ADC_init(); uchar ADC_P(unsigned char ch); void delay(unsigned char x) { while(x--); } void main() { TMOD=0X11; TH0=0X3C; TL0=0XB0; EA=1; ET0=1; TR0=1; chushihua();//12864初始化程序 ADC_init(); //ADC初始化程序 while(1) { ADC_data=ADC_P(0);//ad通道1 delay(5); tab[4]=num[ADC_data/1000]; delay(5); tab[5]=num[ADC_data%1000/100]; delay(5); tab[6]=num[ADC_data%100/10]; delay(5); tab[7]=num[ADC_data%10]; ADC_data=ADC_P(1);//ad通道2 delay(5); tab[12]=num[ADC_data/1000]; delay(5); tab[13]=num[ADC_data%1000/100]; delay(5); tab[14]=num[ADC_data%100/10]; delay(5); tab[15]=num[ADC_data%10]; ADC_data=ADC_P(2);//ad通道3 delay(5); tab1[4]=num[ADC_data/1000]; delay(5); tab1[5]=num[ADC_data%1000/100]; delay(5); tab1[6]=num[ADC_data%100/10]; delay(5); tab1[7]=num[ADC_data%10]; ADC_data=ADC_P(3);//ad通道4 delay(5); tab1[12]=num[ADC_data/1000]; delay(5); tab1[13]=num[ADC_data%1000/100]; delay(5); tab1[14]=num[ADC_data%100/10]; delay(5); tab1[15]=num[ADC_data%10]; ADC_data=ADC_P(4);//ad通道5 delay(5); tab2[4]=num[ADC_data/1000]; delay(5); tab2[5]=num[ADC_data%1000/100]; delay(5); tab2[6]=num[ADC_data%100/10]; delay(5); tab2[7]=num[ADC_data%10]; ADC_data=ADC_P(5);//ad通道6 delay(5); tab2[12]=num[ADC_data/1000]; delay(5); tab2[13]=num[ADC_data%1000/100]; delay(5); tab2[14]=num[ADC_data%100/10]; delay(5); tab2[15]=num[ADC_data%10]; ADC_data=ADC_P(6);//ad通道7 delay(5); tab3[4]=num[ADC_data%1000/100]; delay(5); tab3[5]=num[ADC_data%1000/100]; delay(5); tab3[6]=num[ADC_data%100/10]; delay(5); tab3[7]=num[ADC_data%10]; ADC_data=ADC_P(7);//ad通道8 delay(5); tab3[12]=num[ADC_data/1000]; delay(5); tab3[13]=num[ADC_data%1000/100]; delay(5); tab3[14]=num[ADC_data%100/10]; delay(5); tab3[15]=num[ADC_data%10]; guding(); } } /**************** *以下关于ADC *****************/ void ADC_init() //adc初始化 { P1ASF=0XFF; //设置P1为ADC采集 ADC_RES=0; //清除高八位结果寄存器 ADC_CONTR=0XE0; //ADC上电 A/D转换周期90个时钟周期 delay(5); } uchar ADC_P(unsigned char ch) //ADC处理函数 { ADC_CONTR&=~ADC_FLAG; //关闭标志位 ADC_CONTR=0X80|0X00|0X08|ch; _nop_();_nop_();_nop_();_nop_(); while(!(ADC_CONTR&0x10));//等待ADC转换完成 return ADC_RES; //返回ADC结果 8位AD /* ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 delay(30); ADC_CONTR=0x80|0x00|0x08|0x00; a1=ADC_RES; //高8位 b1=ADC_RESL; //低8位 delay(60); // ADC_data=(a1<<2)|(b1>>6); //10AD */ } /************************* * * *以下12864相关子函数 * *************************/ void shuru(unsigned char n) { unsigned char a; for(a=0;a<8;a++) { e=0;
史海拾趣
|
开贴整理QtEmbedded/Qtopia FAQ --- 不可不看的精华都在这里哦~ Qt-X11/QtEmbedded/Qtopia及其他常见包的关系? build Qtopia时经常能看到以下的包: qt-x11-2.3.2 qt-x11-3.3.x qte-2.3.x qtopia-2.x tmake-1.3 qmake, uic, moc ... 其中Qtopia编译依赖Qte; qt-x11-2.3只与编译一些tool有关, 如uic,mo ...… 查看全部问答> |
|
实例分为两部分,第1部分连续输入数据处理的电路设计是我们的课程设计,有详细的设计过程(分析过程,数据流图,以及状态机,源代码仿真和综合电路图),另一个是老师给的例题,有100多个例子吧,不过只有源代码和题目。希望能给大家做一个参考!!… 查看全部问答> |
|
我先说一下我的需求,就是要在播放影片的画面上面显示影片的码率之类的. 假设现在影片的码率是700kbps,我要在影片的某个位置显示出来,比如说左上角,这个怎么做出来呢? 或者给我指条明路. 谢谢 PS: 现在TCPMP能在我的机器上面跑了,也能正常解码.… 查看全部问答> |
|
一直从事asp.net开发,对wince开发一无所知。 目前有一个gps设备,需要开发征对此设备的应用程序开发。该设备是wince 5.0操作系统。 我使用的是vs 2008做为开发工具(C#)。 我在vs2008中新建项目-智能设备 右侧仅有智能设备选项,请问我还需要安 ...… 查看全部问答> |
|
现在的问题是,程序无法检测到其中的位数,并做出相应的处理 表象就是:在串口调试助手中输入B****E,无任何返回值 程序如下: #include //工作频率7.3728Mhz #include unsigned ch ...… 查看全部问答> |
|
我用89s52串口输出一个波形,但是一旦接至另外一个模拟电路部分,该波形就变成尖峰形状了 我的想法是用35M左右的载波调制该串口波形,然后经功率放大等电路发送出去。但是现在串口波形一接至高频部分电路,就不再是原来 ...… 查看全部问答> |
|
通常我们加载wince系统,总是编译好eboot然后下载到flash里面,根据菜单提示下载NK。而实际的产品中,可以不用BOOTLOADER,那它是怎么实现系统加载的? 还有个问题,就是OAL的代码也可以完成所有的bootloader的功能,为什么一定要写个bootloader? ...… 查看全部问答> |
|
我大四毕业设计做基于ARM9的嵌入式的linux开发.想请大家帮我选题. 我本不是这个专业的,现在毕业设计要做这个,所以我什么都不懂.现在急着做毕业设计,希望大家给个建议,帮忙选个题目. 简单一些容易做的,而且够毕业设计的水平. 谢谢谢谢… 查看全部问答> |




