標(biāo)題:
STC8單片機12位AD轉(zhuǎn)換顯示程序
[打印本頁]
作者:
zhangshuyuan1
時間:
2022-9-5 19:11
標(biāo)題:
STC8單片機12位AD轉(zhuǎn)換顯示程序
#include<STC8.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//***********y延時聲明**************************
void Delay(uint t);
void LCD_Delay(uint t);
//***********LCD1602聲明***********************************
void lcd_init(void);
void DisplayOneChar(uint X, uint Y, uint DData);
//**********************************************
sbit LED0=P7^1;
//**********************************************
uchar xdata table1[]={" "};
uchar xdata table2[]={"ADC_V: "};
//**********************************************
uint ADC_Result;uint ADC_count; ulong ADC_sum;uint xdata ADC_data[100]; uint ADC_flag;
void Display_line(uchar y,uchar *DData)
{
uchar i;
for(i=0;i<16;i++)
{
if(y==0) DisplayOneChar(i,0,DData[i]);
else if(y==1) DisplayOneChar(0x40+i,1,DData[i]);
}
}
void table2_charge()
{
table2[8]=ADC_Result%10000/1000+0x30;
table2[9]=ADC_Result%1000/100+0x30;
table2[10]=ADC_Result%100/10+0x30;
table2[11]=ADC_Result%10+0x30;
}
void ADC_init()
{
P1M0 &=0xBF; //設(shè)置 P0.6 為 ADC 口 M1為1,M0為0,高阻輸入 1011 1111 0100 0000
P1M1 |= 0x40;
ADCCFG = 0x0f; //設(shè)置 ADC 時鐘為系統(tǒng)時鐘/2/16/16 數(shù)據(jù)左對齊
ADC_CONTR = 0x8E; //使能 ADC 模塊 使能 1000 1110 通道P0.6
EADC = 1; //使能 ADC 中斷
EA = 1;
ADC_CONTR |= 0x40; //啟動 AD 轉(zhuǎn)換
}
void ADC_filter(uint *P)
{
uint i,j,temp;
ulong sum=0;
for(j=0;j<99;j++)
for(i=0;i<99-j;i++)
{
if(*(P+i)>*(P+i+1))
{
temp=*(P+i);
*(P+i)=*(P+i+1);
*(P+i+1)=temp;
}
}
if(ADC_flag!=0)
{ for(i=45;i<55;i++)
{
sum+=P[i];
}
//ADC_Result=sum/10;
ADC_Result=(uint)((float)(sum/10*2.5/4.096));
}
}
void main()
{
LED0=0;
lcd_init();
ADC_init();
ADC_count=0;ADC_flag=0;
while(1)
{
// LED0=!LED0;
// LCD_Delay(5);
table2_charge();
Display_line(0,table1);
Display_line(1,table2);
ADC_filter(ADC_data);
}
}
void ADC_Isr() interrupt 5
{
ADC_CONTR &= ~0x20; //清中斷標(biāo)志
ADC_data[ADC_count]= (ADC_RESL>>4)+ADC_RES*16; //讀取 ADC 結(jié)果
ADC_CONTR |= 0x40; //繼續(xù) AD 轉(zhuǎn)換
ADC_count++;
if( ADC_count>100) {ADC_count=0; ADC_flag++; if(ADC_flag>=2) ADC_flag=1;}
}
復(fù)制代碼
作者:
lsh04
時間:
2022-9-8 17:59
一下程序呢?
//***********y延時聲明**************************
void Delay(uint t);
void LCD_Delay(uint t);
//***********LCD1602聲明***********************************
void lcd_init(void);
void DisplayOneChar(uint X, uint Y, uint DData);
作者:
gxgllzh123
時間:
2022-12-2 20:56
樓主,沒有完呀
作者:
gxgllzh123
時間:
2022-12-2 20:56
沒有完
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1