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

📄 testad.c

📁 52单片机开发板的实例程序
💻 C
字号:
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
sbit SDA=P3^7;
sbit SCL=P3^6;
bit bdata IIC_ERROR;
uchar code a[]="AD=0.00V";
uchar Recv_Buffer[4];//数据接收缓冲
void delayms(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;y--);
}
void delayus(uint k)
{
   for(;k>0;k--);
}
void write_com(uchar command)//写指令子函数
{
   rs=0;
   rw=0;
   P2=command;
   delayms(1);
   en=1;
   delayms(3);
   en=0;
}
void write_data(uchar date)//写数据子函数
{
   rs=1;
   rw=0;
   P2=date;
   delayms(1);
   en=1;
   delayms(3);
   en=0;
}
void init()
{	
	en=0;
	rw=0;
	write_com(0x38);
	write_com(0x01);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x80);
}
void display(uchar aa,uint da)
{
	write_com(0x80+aa);
	write_data(da%10000/1000+0x30);
	write_data(a[4]);
	write_data(da%1000/100+0x30);
	write_data(da%100/10+0x30);
}
void I2C_write(unsigned char tmp)//I2C写入一个8位二进制数,高位在前低位在后
{
	unsigned char i;
	for(i=0;i<8;i++){
		SCL=0;
		_nop_();
		_nop_();
		_nop_();
		SDA=(bit)(tmp&0x80);
		tmp<<=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();		
		SCL=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();		
	}
	SCL=0;
}
unsigned char I2C_read(void)////I2C读取一个8位二进制数,也是高位在前低位在后
{
	unsigned char i,tmp;
	tmp=0;
	for(i=0;i<8;i++){
		SCL=0;
		_nop_();
		_nop_();
		_nop_();			//加入空指令增加稳定性,这关系到频率问题
		SDA=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();
		SCL=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();
		tmp<<=1;
		if(SDA==1)
			tmp++;
	}
	SCL=0;
	return tmp;		
		
}
/*void I2C_ACK(bit tmp)		//根据tmp的1、0来决定应答信号
{
	SDA=tmp;		
	 _nop_();_nop_();_nop_();_nop_();_nop_();
	 SCL=1;	
	 _nop_();_nop_();_nop_();_nop_();_nop_();
	 SCL=0;		
}	*/
void respons()//应答信号
{
	uchar i=0;
	SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();
	while((SDA==1)&&(i<255)) i++;
	SCL=0;
	_nop_();_nop_();_nop_();_nop_();_nop_();
}
void I2C_start(void)		//看看I2C开始的波形,再对应SDA、SCL的输出
{
	 SDA=1;		
	 _nop_();
	 SCL=1;  	
	 _nop_();
	 SDA=0;	
	 _nop_();
	 SCL=0;		
	 _nop_();
}

/*********/
void I2C_stop(void)		//I2C结束
{
	 SDA=0;		
	 _nop_();
	 SCL=1;		
 	 _nop_();
	 SDA=1;		
	 _nop_();
	 SCL=0;		
	 _nop_();
}
uchar read_ad()
{
	uchar dat;
	I2C_start();
	I2C_write(0x90);
	respons();
	I2C_write(0x00);
	respons();
	I2C_start();
	I2C_write(0x91);
	respons();
	dat=I2C_read();
	//I2C_ACK(1);
	respons();
	I2C_stop();
	return dat;
}
void write(uchar d)
{
	I2C_start();
	I2C_write(0x90);
	//I2C_ACK(0);
	respons();
	I2C_write(0x40);
	//I2C_ACK(0);
	respons();
	I2C_write(d);
	//I2C_ACK(0);
	respons();
	I2C_stop();
	delayms(5);
}	
void main()
{		uchar i,datt;
		float d;
		uint dattt;
		init();
	for(i=0;a[i]!='\0';i++)
			{
				write_data(a[i]);
				delayus(600);
			}
		 
	    while(1)   
		{

		   for(i=255;i>0;i--)
		   {write(i);	  
		  datt=read_ad();
		  d=(float)datt*16.875;
		  //d=(float)datt*19.537;
		   dattt=(uint)d;
		   display(3,dattt);
		   delayms(100);
		   delayms(400);}
				
		}
	
}

⌨️ 快捷键说明

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