⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1549.c

📁 51单片机上控制ad1549完成十位AD采样
💻 C
字号:
//AD1549程序模块
#include<reg52.h>

//*****************************************************
//AD1549定义部分
#define uchar unsigned char
#define uint  unsigned int
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
#define ad_sclk P2_5
#define ad_dout P2_6
#define ad_cs  P2_7
uint ad_data_get=0;



sbit dc=0xa0;       /*P2.0 LCD 的RS 21*/
sbit rw=0xa1;      /*P2.1 LCD 的R/W 22*/
sbit cs=0xa2;     /*P2.2 LCD 的E 25*/
sfr lcdbus=0x90; /*p1LCD 数据 D0=P1.0*/
unsigned int sys10mscounter;
unsigned char syslimitcounter;
unsigned char data lcdcounter;
bit lcdusing1,lcdusing2;
int dat[10];

void soft_nop(){}
void soft_1()//12MHZ 提供软件延时
{ register int i;
for(i=0;i<711;i++);
}


bit lcd_checkbusy()/*检查LCD 忙*/
{ register lcdstate;
dc=0; /*dc=1为数据,=0 为命令.*/
rw=1; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
lcdstate=lcdbus;
cs=0;
return((bit)(lcdstate&0x80));
}


void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
{ lcdusing1=1;
while(lcd_checkbusy());
lcdbus=lcdcmd;
dc=0; /*dc=1为数据,=0 为命令.*/
rw=0; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
cs=0;
lcdbus=0xff;
lcdusing1=0;
}


void lcd_moveto(char position) /*移动光标到指定位.0-79*/
{ register cmd=0x80;
lcdcounter=position;
if (position > 59)
position += 0x18;
else
{ if (position > 39)position -= 0x14;
else
{ if (position > 19)position += 0x2c;
}
}
cmd=cmd|position;
lcd_wrcmd(cmd);
}


void lcd_wrdata(char lcddata) /*在当前显示位置显示字符*/
{ 
lcdusing2=1;
while(lcd_checkbusy());
if(lcdcounter==20){
lcd_moveto(20);
while(lcd_checkbusy());
}
if(lcdcounter==40){
lcd_moveto(40);
while(lcd_checkbusy());
}
if(lcdcounter==60){
lcd_moveto(60);
while(lcd_checkbusy());
}
if(lcdcounter==80){
lcd_moveto(0);
while(lcd_checkbusy());
lcdcounter=0;
} /*为通用而如此*/
lcdcounter++;
lcdbus=lcddata;
dc=1; /*dc=1为数据,=0 为命令.*/
rw=0; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
cs=0;
lcdbus=0xff;
lcdusing2=0;
}

void lcd_init()/*初始化*/
{ lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
lcd_wrcmd(0x01); /*清除显示*/
lcdcounter=0;
}


void datadisplay(long  a)
{int i;
 unsigned char b;
 if(a>=0)
 {for(i=9;i>=0;i--)
 {b=a%10; 
 if(i==6)
  {i--;
   dat[6]='.';
   }
 dat[i]=b+48;
  
  a/=10;
  }
  for(i=0;i<=9;i++)
  lcd_wrdata(dat[i]);
 }
 else
 {a=-a;
 for(i=9;i>=0;i--)
 {b=a%10; 
 if(i==6)
  {i--;
   dat[6]='.';
   }
 dat[i]=b+48;
  
  a/=10;
  }
  dat[0]='-';
 for(i=0;i<=9;i++)
  lcd_wrdata(dat[i]); 

 }

}

void delay(unsigned char n)    //n=50,延时大约0.05ms
{
	do{n--;}while(n);
}

//********************************************************8
//AD1549程序部分

void ad1549(void)
{
	uchar i;
	bit temp=0;
	ad_data_get=0;
	//c_s=1;
	//delay(25);
	ad_cs=0;
    delay(10);
	ad_sclk=0;
	for(i=0;i<10;i++)
	{ad_sclk=1;
    temp=ad_dout;
	ad_data_get<<=1;//注意时序
	ad_data_get=ad_data_get+(uint)temp;
	//l_delay(1);
	delay(5);
	ad_sclk=0;
	delay(20);
	}
	ad_cs=1;
	delay(20);
}





void main()
{	uint i,v,j;
	while(1)
	{
	ad1549();
	i=ad_data_get;
	v=(i*10-23)/2.046;//i*10/2.046;//
   	lcd_init();
	datadisplay(v);
    for(j=50;j>0;j--)
    {soft_1();}

	}
	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -