歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 【51單片機】A/D(1)

【51單片機】A/D(1)

日期:2017/3/1 11:57:44   编辑:關於Linux

用單片機控制ADC0804進行模數轉換,當擰動實驗板上A/D旁邊的電位器Re2時,在數碼管的前三位以十進制方式動態顯示出A/D轉換後的數字量(8位uA/D轉換後數值在0~255變化)。

#include
#include

sbit dula=P2^6;    //申明U1鎖存器的鎖存端
sbit wela=P2^7;    //申明U2存鎖器的鎖存端
sbit adwr=P3^6;     //定義A/D的WR端口
sbit adrd=P3^7;     //定義A/D的RD端口

unsigned char	code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delayms(unsigned int xms)
{
	unsigned int i,j;
	for(i=xms;i>0;i--)   //i=xms即延時約xms毫秒
		for(j=110;j>0;j--);
}

void display(unsigned char bai,unsigned char shi,unsigned char ge)
{
	dula=1;
	P0=table[bai];  //送段選數據
	dula=0;
	P0=0xff; //送位選數據前關閉所有顯示,防止打開位選鎖存的時候原來的段選數據通過位選鎖存器造成混亂
	wela=1;
	P0=0x7e; //送位選數據
	wela=0;
	delayms(5);  //延時

	dula=1;
	P0=table[shi];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0x7d;
	wela=0;
	delayms(5);

	dula=1;
	P0=table[ge];
	dula=0;
	P0=0xff;
	wela=1;
	P0=0x7b;
	wela=0;
	delayms(5);
	}

	void main()//主程序
	{
		unsigned char a, A1,A2,A3,adval;
		wela=1;
		P0=0x7f; //置CSAD為0,選通ADCS以後不必再管ADCS
		wela=0;
		while(1)
		{
			adwr=1;
			_nop_();
			adwr=0;	   //啟動A/D轉換
			_nop_();
			adwr=1;
			for(a=0;a>0;a--) //TX-IC實驗板A/D工作頻率較低,所以啟動轉換後要多留點時間轉換
			{
				display(A1,A2,A3);	//把顯示部分放在這裡的原因也是為了延長轉換時間
			}
			P1=0xff;   //讀取P1口之前先給其寫全1
			adrd=1;	  //寫通ADCS
			_nop_();
			adrd=0;	   //A/D使能
			_nop_();
			adval=P1; //A/D數據讀取賦給P1口
			adrd=1;
			A1=adval/100;	 分//分出百,十,個位
			A2=adval%100/10;
			A3=adval%10;
			}
		}

	

Copyright © Linux教程網 All Rights Reserved