深圳市瑞申电子有限公司

深圳市瑞申电子有限公司是一家10年专业大功率电感生产加工厂商,主要以大功率,大电流、扁平线圈电感、平面变压器设计、生产、销售工厂。设计、绕线、组装、检测、包装、出货等全制程的工艺流程!拥有完整、科学的质量管理体系。专业技术团队10人,我们的诚信、实力和产品质量获得业界的认可。欢迎各界朋友莅临参观、指导和业务洽谈。 ...

adda我的程序有什么问题为什么518952单片机没任何显示

时间:2021-03-09 06:02:48 点击:

试验要求上的AD,DA调一调,用键盘输入一个2V以下电压比如1.2V,DA输出1.2V,ADC采集如果大于1.2,让DA减少,小于1.2让DA增大,同时液晶上显示设定值和实测值,

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineDelay4us(){_nop_();_nop_();_nop_();_nop_();}

sbitLCD_RS=P2^6;

sbitLCD_RW=P2^5;

sbitLCD_EN=P2^7;

sbitSCL=P2^0;//I2C时钟引脚

sbitSDA=P2^1;//I2C数据输入输出引脚

ucharRecv_Buffer[4];//数据接收缓冲

uintVoltage[]={'0','0','0','0'};//数据分解为电压x.xx

bitbdataIIC_ERROR;//I2C错误标志位

ucharLCD_Line_1[]={".V"};

//延时

voiddelay(intms)

{

uchari;

while(ms--)for(i=0;i<250;i++)Delay4us();

}

//LCD忙检测

bitLCD_Busy_Check()

{

bitResult;

LCD_RS=0;LCD_RW=1;

LCD_EN=1;Delay4us();Result=(bit)(P0&0x80);

LCD_EN=0;

returnResult;

}

//写指令

voidLCD_Write_Command(ucharcmd)

{

while(LCD_Busy_Check());

LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();

LCD_EN=1;Delay4us();LCD_EN=0;

P0=cmd;Delay4us();

}

//写数据

voidLCD_Write_Data(uchardat)

{

while(LCD_Busy_Check());

LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;Delay4us();

LCD_EN=1;Delay4us();LCD_EN=0;

}

//初始化

voidLCD_Initialise()

{

LCD_Write_Command(0x38);delay(5);

LCD_Write_Command(0x0c);delay(5);

LCD_Write_Command(0x06);delay(5);

LCD_Write_Command(0x01);delay(5);

}

//设置显示位置

voidLCD_Set_Position(ucharpos)

{

LCD_Write_Command(pos

0x80);

}

//显示一行

voidLCD_Display_A_Line(ucharLine_Addr,uchars[])

{

uchari;

LCD_Set_Position(Line_Addr);

for(i=0;i<16;i++)LCD_Write_Data(s[i]);

}

//将模数转换后得到的值分解存入缓存

voidConvert_To_Voltage(ucharval)

{

ucharTmp;//最大值为255,对应5V,255/5=51

Voltage[2]=val/51+'0';//整数部分

Tmp=val%51*10;//第一位小数

Voltage[1]=Tmp/51+'0';

Tmp=Tmp%51*10;

Voltage[0]=Tmp/51+'0';

}

//启动I2C总线

voidIIC_Start()

{

SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;

}

//停止I2C总线

voidIIC_Stop()

{

SDA=0;SCL=1;Delay4us();SDA=1;Delay4us();SCL=0;

}

//从机发送应答位

voidSlave_ACK()

{

SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;

}

//从机发送非应答位

voidSlave_NOACK()

{

SDA=1;SCL=1;Delay4us();SCL=0;SDA=0;

}

//发送一字节

voidIIC_SendByte(ucharwd)

{

uchari;

for(i=0;i<8;i++)//循环移入8位

{

SDA=(bit)(wd&0x80);_nop_();_nop_();

SCL=1;Delay4us();SCL=0;wd<<=1;

}

Delay4us();

SDA=1;//释放总线并准备读取应答

SCL=1;

Delay4us();

IIC_ERROR=SDA;//IIC_ERROR=1表示无应答

SCL=0;

Delay4us();

}

//接收一字节

ucharIIC_ReceiveByte()

{

uchari,rd=0x00;

for(i=0;i<8;i++)

{

SCL=1;rd<<=1;rd

=SDA;Delay4us();SCL=0;Delay4us();

}

SCL=0;Delay4us();

returnrd;

}

//连续读入4路通道的A/D转换结果并保存到Recv_Buffer

voidADC_PCF8591(ucharCtrlByte)

{

uchari;

IIC_Start();

IIC_SendByte(0x90);//发送写地址

if(IIC_ERROR==1)return;

//IIC_SendByte(CtrlByte);//发送控制字节

//if(IIC_ERROR==1)return;

IIC_Start();//重新发送开始命令

IIC_SendByte(0x91);//发送读地址

if(IIC_ERROR==1)return;

IIC_ReceiveByte();//空读一次,调整读顺序

Slave_ACK();//收到一字节后发送一个应答位

for(i=0;i<4;i++)

{

Recv_Buffer[i++]=IIC_ReceiveByte();

Slave_ACK();//收到一个字节后发送一个应答位

}

Slave_NOACK();

IIC_Stop();//收到一个字节后发送一个非应答位

}

//向PCF8591发送1字节进行AD转换

//主程序

voidmain()

{

LCD_Initialise();

while(1)

{

ADC_PCF8591(0x04);

Convert_To_Voltage(Recv_Buffer[0]);

LCD_Line_1[2]=Voltage[2];

LCD_Line_1[4]=Voltage[1];

LCD_Line_1[5]=Voltage[0];

LCD_Display_A_Line(0x00,LCD_Line_1);

}

}

大功率电感厂家 |大电流电感工厂
  • MTK参考电路充电路问题
    请问做MTK的朋友有没有碰到R2060.3欧的电阻容易坏,阻值变大,导致充电电流小,或不充电现象,做了俩款产品,量产后,都有客户退回来的机器有这种情况发生,电阻用的是0805的封装,充电电
  • 不断发展的MEMS封装、装配和测试
    历史上,在MEMS(微机电系统)整个成功商业化的进程中,封装/装配/测试(P/A/T)对于器件研发而言只占据着无关紧要的位置。最开始,MEMS实际上是独立的器件,它被插入到特别订制的机械外壳或标准I
  • 三相并联型有源电力滤波器预测直接功率控制
    单相感应电动机因具有结构简单、运行可靠、维修方便等优点而得到了广泛应用,但是,单相感应电动机仅由单相电源供电,因此,在一般情况下,气隙磁场不是圆形旋转磁场,而是椭圆形旋转磁
  • 大功率电感