欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stc15單片機AD轉換設計并進行串口通信源程序
[打印本頁]
作者:
lcx187
時間:
2019-1-2 22:34
標題:
stc15單片機AD轉換設計并進行串口通信源程序
基于stc15系列單片機 AD轉換設計并進行串口通信源程序
單片機源程序如下:
#include<STC15.h>
#include<intrins.h>
#define BYTE unsigned char
#define WORD unsigned int
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標志
#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); //數碼管延時函數
void lintADC(); //ADC特殊功能寄存器初始化
BYTE GetADCResult(BYTE ch) ; //ADC結果返回函數
void InitUart(); //串口初始化
void SendData(BYTE dat); //串口發送
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碼
/*~~~~~~~~~~~~~~~主函數~~~~~~~~~~~~~~~*/
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結果
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;
}
}
}
void lintADC()
{
P1ASF=0xff; //選擇P1口作為AD轉換口
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轉換完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
RESULT=ADC_RES;
RESULT=RESULT<<2;
RESULT1=ADC_RESL;
RESULT=(RESULT|RESULT1);
return RESULT; //返回ADC結果
}
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; //發送當前數據
while (!TI); //等待前一個數據發送完成
TI = 0; //清除發送標志
}
void InitUart()
{
AUXR=(AUXR|0x11); //定時器2作為串口波特率發生器
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; //計算電壓值
a0=(int)num;
a1=(int)(num*10);
a1=a1%10;
a2=(int)(num*100);
a2=a2%10;
a3=(int)(num*1000);
a3=a3%10;
}
復制代碼
所有資料51hei提供下載:
AD轉換.zip
(8.72 KB, 下載次數: 42)
2019-1-2 22:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
sdsslh
時間:
2019-6-20 16:49
謝謝樓主的分享。。。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1