|
12864為串行接法。AD0~AD4接的5V電源。
AD5~AD7接的GND。
STC15W408AS 自帶8路10位AD
程序只使用了高八位。量程為255.
程序里面含10位AD采集。1024。
代碼已注釋。
新手上路。有錯誤還請斧正。
制作出來的實物圖如下:
QQ圖片20190716115530.jpg (129.44 KB, 下載次數(shù): 70)
下載附件
2019-7-16 11:56 上傳
QQ圖片20190716115539.jpg (224.45 KB, 下載次數(shù): 72)
下載附件
2019-7-16 11:56 上傳
單片機源程序如下:
- #include <STC15.h>
- #include"intrins.h"
- #define uchar unsigned char;
- #define uint unsigned int;
- uchar a1,b1; //接收高八位,低八位
- uint ad1; //用于接收10位AD數(shù)據(jù)
- #define ADC_POWER 0X80; // 上電狀態(tài)
- #define ADC_FLAG 0x10; // FLAG=1,結(jié)束轉(zhuǎn)換。ADC_FLAG:A/D轉(zhuǎn)換結(jié)束標(biāo)志位
- #define ADC_START 0X08; // START=1,開始轉(zhuǎn)換。
- #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; //高八位數(shù)據(jù)
- 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();
- }
- }
- /****************
- *以下關(guān)于ADC
- *****************/
- void ADC_init() //adc初始化
- {
- P1ASF=0XFF; //設(shè)置P1為ADC采集
- ADC_RES=0; //清除高八位結(jié)果寄存器
- ADC_CONTR=0XE0; //ADC上電 A/D轉(zhuǎn)換周期90個時鐘周期
- delay(5);
- }
- uchar ADC_P(unsigned char ch) //ADC處理函數(shù)
- {
- ADC_CONTR&=~ADC_FLAG; //關(guān)閉標(biāo)志位
- ADC_CONTR=0X80|0X00|0X08|ch;
- _nop_();_nop_();_nop_();_nop_();
- while(!(ADC_CONTR&0x10));//等待ADC轉(zhuǎn)換完成
- return ADC_RES; //返回ADC結(jié)果 8位AD
-
- /* ADC_CONTR &= !ADC_FLAG; //清除ADC中斷標(biāo)志
- 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相關(guān)子函數(shù)
- *
- *************************/
- 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) //寫數(shù)據(jù)
- {
- shuru(0xfa);
- shuru(shuju&(0xf0));
- shuru((shuju<<4)&(0xf0));
- delay(2);
- }
- void chushihua()
- {
- zhiling(0x30);
- delay(1);
- zhiling(0x0c); //打開顯示,無光標(biāo),光標(biāo)不反光
- 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;
-
- }
復(fù)制代碼
所有資料51hei提供下載:
多通道AD采集.zip
(49.63 KB, 下載次數(shù): 198)
2019-7-16 11:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|