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
|