標(biāo)題:
STC12C5A60S2片內(nèi)ad程序數(shù)碼管顯示
[打印本頁(yè)]
作者:
騰飛的龍
時(shí)間:
2015-7-28 20:11
標(biāo)題:
STC12C5A60S2片內(nèi)ad程序數(shù)碼管顯示
/*(1)
P1_ADC_EN:特殊功能寄存器
P1.x作為A/D轉(zhuǎn)換輸入通道來(lái)用允許特殊功能寄存器。
相應(yīng)位為“1”時(shí),對(duì)應(yīng)的P1.x口作為A/D轉(zhuǎn)換使用
,內(nèi)部上拉電阻自動(dòng)斷開。
(2)ADC_CONTR:特殊功能寄存器
CHS2/CHS1/CHS0是模擬輸入通道選擇,
CHS2/CHS1/CHS0的取值如下表所示
CHS2 CHS1 CHS0 模擬輸入通道選擇
0 0 0 選擇P1.0為A/D輸入
0 0 1 選擇P1.1為A/D輸入
0 1 0 選擇P1.2為A/D輸入
0 1 1 選擇P1.3為A/D輸入
1 0 0 選擇P1.4為A/D輸入
1 0 1 選擇P1.5為A/D輸入
1 1 0 選擇P1.6為A/D輸入
1 1 1 選擇P1.7為A/D輸入
ADC_START是模擬/數(shù)字轉(zhuǎn)換(ADC)啟動(dòng)控制位,設(shè)置為1時(shí),開始轉(zhuǎn)換。
ADC_FLAG是模擬/數(shù)字轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1。
(3)ADC_DATA:A/D轉(zhuǎn)換結(jié)果特殊功能寄存器
模擬/數(shù)字轉(zhuǎn)換結(jié)果計(jì)算公式為 結(jié)果=256×Vin/Vcc
Vin是模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,
用單片機(jī)工作電壓作為模擬參考電壓 */
//2、STC12C5A60S2內(nèi)ADC采樣電壓值,
//先采樣30次然后去掉上下10個(gè)再取平均值
//STC12C5A60S2內(nèi)ADC采樣
#include <reg51.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define segp P0 //數(shù)據(jù)端口
#define scanp P2 //位端口
sbit wei=P0^6;
sbit duan=P0^7;
sbit fmq =P1^7;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //不帶點(diǎn)共陽(yáng)段驅(qū)動(dòng)信號(hào)
uchar code tab_d[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶點(diǎn)共陽(yáng)段驅(qū)動(dòng)
uchar code scan[]={0xfe,0xfd,0xfb,0xf7};
//位掃描驅(qū)動(dòng)信號(hào)
uint display[4]={0,0,0,0}; //初始顯示數(shù)字
uint con=0, _data=0,data2=0; //con顯示循環(huán)變量_data為ADC采樣值臨時(shí)變量data2顯示數(shù)據(jù)臨時(shí)變量
//下面五行為ADC定義
sfr P1ASF=0x9d;
sfr ADC_CONTR=0xbc;
sfr ADC_RES=0xbd;
sfr ADC_RESL=0xbe;
sfr AUXR1=0xa2;
/*sfr P1_ADC_EN=0x97;
sfr ADC_CONTR=0xc5;
sfr ADC_DATA=0xc6;*/
void t0_t1_init();//t0顯示掃描定時(shí)器和t1串口比特率定時(shí)器初始化函數(shù)
void adc_init(); //adc初始化函數(shù)
void uart_out(uchar byte); //串口發(fā)送字節(jié)函數(shù)
uint average(uint buffer[30]); //采樣數(shù)據(jù)處理函數(shù)
void AD(); //電壓采樣30次函數(shù)
void delay1ms(uchar x); //延時(shí)函數(shù)
void beep()
{
fmq=0;
delay1ms(100);
fmq=1;
delay1ms(100);
}
void main()
{
t0_t1_init();
adc_init();
while(1)
{
AD();
if(data2>4700|data2<4000)
beep(); //報(bào)警
}
}
/////////定時(shí)器初始化///////
void t0_t1_init()
{
SCON=0x50;
PCON=0;
TMOD=0x21;
TH1=TL1=0xe6;
TH0=0xf0;
TL0=0x60;
EA=ET0=1;
// ES=1;
TR1=1;
TR0=1;
}
////ADC初始化///////
void adc_init()
{
P1ASF=0x01;//啟動(dòng)P10為ADC模擬輸入口把內(nèi)部上拉電阻斷開
P1ASF=0x02; //啟動(dòng)P11為ADC模擬輸入口把內(nèi)部上拉電阻斷開
AUXR1&=0xfb; //adrj_0 高8位在ADC_RES
ADC_RES=0; //初值
//開啟ADC電源 并設(shè)置轉(zhuǎn)換周期為540個(gè)時(shí)鐘周期轉(zhuǎn)換一次。
//SPEED_1_1,chs000(選擇AD采樣通道p10)
//ADC_POWER=1; CHS2,1,0為0,用p1.0作為輸入。SPEED1,0
ADC_CONTR=0x80;//用p1.0作為輸入
ADC_CONTR=0x81;//用p1.1作為輸入
delay1ms(2);
// IE|=0xa0;
}
//////采集30次電壓值//////
void AD()
{
char i; uint temp_buf[30]={0};
for(i=0;i<30;i++)
{
ADC_CONTR |=0x08; //開啟轉(zhuǎn)換
while((ADC_CONTR&0x10)==0);
ADC_CONTR &=0xe7; //清除標(biāo)志
temp_buf[i]=ADC_RES; //取出數(shù)值到temp_buf
}
_data=average(temp_buf); //采樣30次后的數(shù)據(jù)代入處理函數(shù)處理后返回處理后的數(shù)值,給下面用串口發(fā)送出去
uart_out(_data);
}
////先對(duì)整個(gè)數(shù)組的三十個(gè)值進(jìn)行從小到大的排列,
////// ///再去掉最大5個(gè)和最少5個(gè)再求平均值;函數(shù)返回temp值///
uint average(uint buffer[30])
{
uchar i,j;
uint temp;
for(i=1; i<30; i++)
for(j=29; j>=i; --j)
{
if(buffer[j-1] > buffer[j])
{
temp = buffer[j-1];
buffer[j-1] = buffer[j];
buffer[j] = temp;
}
}
temp = 0;
for(i=5; i<25; i++)
{
temp += buffer[i];
}
temp = (uint)(((float)temp) / 20 + 0.5);
return(temp);
}
///顯示數(shù)據(jù)處理及掃描顯示中斷服務(wù)函數(shù)////
void t0_4ms(void) interrupt 1
{
data2=_data;
data2=_data*19.53;
display[0]=tab_d[data2/1000]; //用帶小數(shù)點(diǎn)的段碼
display[1]=tab[(data2/100)%10]; //用不帶小數(shù)點(diǎn)的段碼
display[2]=tab[(data2/10)%10];
display[3]=tab[data2%10];
TH0=0xf0;
TL0=0x60;
if(++con==5) con=1;
// segp=0xff;
wei=1;
P2=scan[con-1];
wei=0;
duan=1;
P2=display[con-1];
duan=0;
delay1ms(10) ;
P2=0xff;
// segp=display[con-1];
// scanp=scan[con-1];
}
//串口發(fā)送節(jié)字函數(shù)////
void uart_out(uchar byte)
{
SBUF=byte;
while(TI==0);
TI=0;
}
///1ms延時(shí)////
void delay1ms(uchar x)
{
uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<250;j++);
}
復(fù)制代碼
作者:
h1314258
時(shí)間:
2015-8-6 16:30
188.///1ms延時(shí)////
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1