欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機ADC0808采集 數碼管顯示
[打印本頁]
作者:
天外仙
時間:
2021-3-4 15:06
標題:
51單片機ADC0808采集 數碼管顯示
51hei圖片20210304150216.png
(23.34 KB, 下載次數: 57)
下載附件
2021-3-4 15:02 上傳
程序和仿真工程請在附件中下載
單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
//定義ADC的控制接口
#define ADC_DATA P1
sbit ADC_EOC = P3^2;
sbit ADC_CLK = P3^1;
sbit ADC_START = P3^0;
sbit ADC_OE = P3^3;
sbit ADC_A = P3^4;
sbit ADC_B = P3^5;
sbit ADC_C = P3^6;
//定義數碼管接口
#define SEG_DATA P0
sbit seg_1=P2^0;
sbit seg_2=P2^1;
sbit seg_3=P2^2;
sbit seg_4=P2^3;
uchar code SEG_Table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xf7};//CA共陽
uchar dis_data_buf[4]={0,0,0,0};
//============================
//ADC獲取函數
//============================
uchar ADC_GET(uchar temp_channel)
{
if(temp_channel==0)
{
ADC_A=0;
ADC_B=0;
ADC_C=0;
}
else if(temp_channel==1)
{
ADC_A=1;
ADC_B=0;
ADC_C=0;
}
else if(temp_channel==2)
{
ADC_A=0;
ADC_B=1;
ADC_C=0;
}
else if(temp_channel==3)
{
ADC_A=1;
ADC_B=1;
ADC_C=0;
}
else if(temp_channel==4)
{
ADC_A=0;
ADC_B=0;
ADC_C=1;
}
else if(temp_channel==5)
{
ADC_A=1;
ADC_B=0;
ADC_C=1;
}
else if(temp_channel==6)
{
ADC_A=0;
ADC_B=1;
ADC_C=1;
}
else if(temp_channel==7)
{
ADC_A=1;
ADC_B=1;
ADC_C=1;
}
ADC_START = 0;
ADC_OE = 0;
ADC_START = 1;
ADC_START = 0;
while(ADC_EOC == 0);
ADC_OE = 1;
return ADC_DATA;
}
void Delay_1ms(uint i)//1ms延時
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
//數碼管的顯示函數
void diplay(uchar *dis_p)
{
static uchar temp_num=0;
//消隱
seg_1=0;seg_2=0;seg_3=0;seg_4=0;
switch(temp_num) //動態掃描數碼管
{
case 0:
SEG_DATA=SEG_Table[*(dis_p+temp_num)]&0x7f;//傳遞數碼管斷碼到數據段
seg_1=1;seg_2=0;seg_3=0;seg_4=0;
break;
case 1:
SEG_DATA=SEG_Table[*(dis_p+temp_num)];//傳遞數碼管斷碼到數據段
seg_1=0;seg_2=1;seg_3=0;seg_4=0;
break;
case 2:
SEG_DATA=SEG_Table[*(dis_p+temp_num)];//傳遞數碼管斷碼到數據段
seg_1=0;seg_2=0;seg_3=1;seg_4=0;
break;
case 3:
SEG_DATA=SEG_Table[*(dis_p+temp_num)];//傳遞數碼管斷碼到數據段
seg_1=0;seg_2=0;seg_3=0;seg_4=1;
break;
}
Delay_1ms(2);
temp_num++;
if(temp_num>3) temp_num=0;
}
//************************************
//定時器初始化
//************************************
void Time0_init()
{
TMOD |= 0x02; //使用模式2,8位定時器
TH0=256-50;// 50US
TL0=256-50;//
EA = 1; //總中斷
ET0 = 1;//定時器0初始化
TR0 = 1;
}
//轉換采集的數據進行顯示
void Trans_data(uchar temp_channel)
{
ulong temp_data=0;
temp_data=ADC_GET(temp_channel);
temp_data=temp_data*5000/255; //把AD數值換算成電壓并放大1000倍,避免小數運算
//解析數據到數碼管
dis_data_buf[3]=temp_data%10;
dis_data_buf[2]=temp_data%100/10;
dis_data_buf[1]=temp_data%1000/100;; //數組的最后一個是下劃線編碼
dis_data_buf[0]=temp_data/1000;
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Main(void)
{
Time0_init(); //初始化定時器
while(1)
{
Trans_data(0); //采集指定通道的數據
diplay(dis_data_buf); //刷新顯示
}
}
//===========================
//定時器0中斷,為ADC提供時鐘信號
//===========================
void timer0() interrupt 1
{
ADC_CLK = ~ADC_CLK;
}
復制代碼
所有資料51hei提供下載:
ADC809.zip
(236.54 KB, 下載次數: 70)
2021-3-4 15:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1