|
基于stc15系列單片機(jī) AD轉(zhuǎn)換設(shè)計(jì)并進(jìn)行串口通信源程序
單片機(jī)源程序如下:
- #include<STC15.h>
- #include<intrins.h>
- #define BYTE unsigned char
- #define WORD unsigned int
- #define ADC_POWER 0x80 //ADC電源控制位
- #define ADC_FLAG 0x10 //ADC完成標(biāo)志
- #define ADC_START 0x08 //ADC起始控制位
- #define ADC_SPEEDLL 0x00 //540個時鐘
- #define ADC_SPEEDL 0x20 //360個時鐘
- #define ADC_SPEEDH 0x40 //180個時鐘
- #define ADC_SPEEDHH 0x60 //90個時鐘
- void delay(WORD i); //數(shù)碼管延時函數(shù)
- void lintADC(); //ADC特殊功能寄存器初始化
- BYTE GetADCResult(BYTE ch) ; //ADC結(jié)果返回函數(shù)
- void InitUart(); //串口初始化
- void SendData(BYTE dat); //串口發(fā)送
- void Time(); //定時器初始化
- float num;
- bit p=1,p1=1;
- WORD a0,a1,a2,a3,a4,a5,a6,a7,j=0,i,k=0,sum=0,n=0,RESULT,RESULT1;
- BYTE code AA[]={0x80,0xE5,0x28,0x24,0x45,0x82}; //0.~4.字形碼
- BYTE code BB[]={0x82,0xE7,0x2A,0x26,0x47,0x16,0x12,0xA7,0x02,0x06}; //0~9字形碼
- BYTE code CC[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //0~9 ASCII碼
- /*~~~~~~~~~~~~~~~主函數(shù)~~~~~~~~~~~~~~~*/
- void main()
- {
-
- lintADC(); //ADC特殊功能寄存器初始化
- InitUart(); //串口初始化
- //P3=0xff;
- Time(); //定時器初始化
- while(1)
- {
- if(n==100)
- {
- GetADCResult(7);}
- switch(j)
- {
- case 1: // 判斷j是否為1
- {
- P37=0;
- P2=AA[a0];
- }break;
- case 2: // 判斷j是否為2
- {
- P2=0xff;
- P37=1;
- } break;
- case 3: // 判斷j是否為3
- {
- P36=0;
- P2=BB[a1];
- } break;
- case 4: // 判斷j是否為4
- { P2=0xff;
- P36=1;
- } break;
- case 5: // 判斷j是否為5
- {
- P35=0;
- P2=BB[a2];
- /* if(SBUF==2)
- { if(0<i&&i<1000)
- {
- GetADCResult(7);
- if(SBUF==1|SBUF==2)
- {
- a4=CC[a0];
- a5=CC[a1];
- a6=CC[a2];
- a7=CC[a3];
- SendData(a4);
- SendData(0x2e);
- SendData(a5);
- SendData(a6);
- SendData(a7);
- SendData(0x20);
-
- }
- }
- } */
-
- } break;
- case 6: // 判斷j是否為6
- { P2=0xff;
- P35=1;
- } break;
- case 7: // 判斷j是否為7
- {
- P34=0;
- P2=BB[a3];
- } break;
- case 8: // 判斷j是否為8
- { P2=0xff;
- P34=1;
- } break;
- case 10: // 判斷j是否為10
- {/* if(0<i&&i<1000)
- {
- // GetADCResult(7); //返回通道1 ADC結(jié)果
- if(SBUF==1|SBUF==2)
- {
- a4=CC[a0]; //發(fā)送電壓值
- a5=CC[a1];
- a6=CC[a2];
- a7=CC[a3];
- SendData(a4);
- SendData(0x2e);
- SendData(a5);
- SendData(a6);
- SendData(a7);
- SendData(0x20);
-
- }
- } */
- } break;
-
- }
- }
- }
- void lintADC()
- {
- P1ASF=0xff; //選擇P1口作為AD轉(zhuǎn)換口
- ADC_RES=0;
- ADC_RESL=0;
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
- delay(10);
- }
- BYTE GetADCResult(BYTE ch)
- {
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
- _nop_(); //等待4個NOP
- _nop_();
- _nop_();
- _nop_();
- while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成
- ADC_CONTR &= ~ADC_FLAG; //Close ADC
- RESULT=ADC_RES;
- RESULT=RESULT<<2;
- RESULT1=ADC_RESL;
- RESULT=(RESULT|RESULT1);
- return RESULT; //返回ADC結(jié)果
- }
- void delay(unsigned int i)
- {
- unsigned int m,n;
- for(m=i;m>0;m--)
- for(n=90;n>0;n--);
- }
- void SendData(BYTE dat)
- { SBUF = dat; //發(fā)送當(dāng)前數(shù)據(jù)
- while (!TI); //等待前一個數(shù)據(jù)發(fā)送完成
- TI = 0; //清除發(fā)送標(biāo)志
-
- }
- void InitUart()
- {
- AUXR=(AUXR|0x11); //定時器2作為串口波特率發(fā)生器
- T2H=0xFF; //波特率為115200
- T2L=0xFE;
- SCON = 0x50;
- }
- void Time()
- {
- AUXR=AUXR&0x3f;
- TMOD=0x00; //定時器T0,T1選擇方式0
- TH0=0xFC; //定時器T0定時1ms
- TL0=0x66;
- EA=1;
- ET0=1;
- TR0=1;
- }
- timer2()interrupt 1
- { n++;
- j++;
- i++;
- if(i==2000)
- i=0;
- if(j==11)
- j=0;
- if(n==101)
- n=0;
- num=RESULT/1024.0*5; //計(jì)算電壓值
- a0=(int)num;
- a1=(int)(num*10);
- a1=a1%10;
- a2=(int)(num*100);
- a2=a2%10;
- a3=(int)(num*1000);
- a3=a3%10;
- }
復(fù)制代碼
所有資料51hei提供下載:
AD轉(zhuǎn)換.zip
(8.72 KB, 下載次數(shù): 42)
2019-1-2 22:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|