12864为串行接法。AD0~AD4接的5V电源。
AD5~AD7接的GND。
STC15W408AS 自带8路10位AD
程序只使用了高八位。量程为255.
程序里面含10位AD采集。1024。
代码已注释。
新手上路。有错误还请斧正。
制作出来的实物图如下:
单片机源程序如下:
- #include <STC15.h>
- #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;
- if((n<<a)&(0x80)) //串行输入
- {
- rw=1;
- }
- else
- {
- rw=0;
- }
- e=1; //移位时钟
- e=0;
- }
- }
- void zhiling(unsigned char zhiling) //写指令
- {
- shuru(0xf8);
- shuru(zhiling&(0xf0));
- shuru((zhiling<<4)&(0xf0));
- delay(2);
- }
- void shuju(unsigned char shuju) //写数据
- {
- shuru(0xfa);
- shuru(shuju&(0xf0));
- shuru((shuju<<4)&(0xf0));
- delay(2);
- }
- void chushihua()
- {
- zhiling(0x30);
- delay(1);
- zhiling(0x0c); //打开显示,无光标,光标不反光
- zhiling(0x01); //清屏
- delay(1);
- }
- void guding()
- {
- unsigned char i;
- zhiling(0x80);
- for(i=0;i<16;i++)
- {
- shuju(tab[i]);
- delay(3);
- }
- zhiling(0x90);
- for(i=0;i<16;i++)
- {
- shuju(tab1[i]);
- delay(3);
- }
- zhiling(0x88);
- for(i=0;i<16;i++)
- {
- shuju(tab2[i]);
- delay(3);
- }
- zhiling(0x98);
- for(i=0;i<16;i++)
- {
- shuju(tab3[i]);
- delay(3);
- }
- }
- void time0() interrupt 1
- {
- TH0=0X3C;
- TL0=0XB0;
-
- }
复制代码
所有资料51hei提供下载:
多通道AD采集.zip
(49.63 KB, 下载次数: 198)
|