您当前的位置: > 行业资讯

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

时间:2025-02-10  来源:扁平线圈电感厂家  点击:

试验要求上的AD,DA调一调,用键盘输入一个2V以下电压比如1.2V,DA输出1.2V,ADC采集 如果大于1.2,让DA减少,小于1.2让DA增大,同时液晶上显示设定值和实测值,#include#include#define uchar unsigned char#define uint unsigned int#define Delay4us(){_nop_();_nop_();_nop_();_nop_();}sbit LCD_RS=P2^6;sbit LCD_RW=P2^5;sbit LCD_EN=P2^7;sbit SCL=P2^0;                            //I2C时钟引脚sbit SDA=P2^1;                            //I2C数据输入输出引脚uchar Recv_Buffer[4];                     //数据接收缓冲uint Voltage[]={'0','0','0','0'};         //数据分解为电压x.xxbit bdata IIC_ERROR;                      //I2C错误标志位uchar LCD_Line_1[]={"   .  V         "};//延时void delay(int ms){uchar i;while(ms--) for(i=0;i<250;i++) Delay4us();}//LCD忙检测bit LCD_Busy_Check(){bit Result;LCD_RS=0;LCD_RW=1;LCD_EN=1;Delay4us();Result=(bit)(P0&0x80);LCD_EN=0;return Result;}//写指令void LCD_Write_Command(uchar cmd){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();}// 写数据void LCD_Write_Data(uchar dat){while(LCD_Busy_Check());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;Delay4us();LCD_EN=1;Delay4us();LCD_EN=0;}//初始化void LCD_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);}//设置显示位置void LCD_Set_Position(uchar pos){LCD_Write_Command(pos|0x80);}//显示一行void LCD_Display_A_Line(uchar Line_Addr,uchar s[]){uchar i;LCD_Set_Position(Line_Addr);for(i=0;i<16;i++)LCD_Write_Data(s[i]);}// 将模数转换后得到的值分解存入缓存void Convert_To_Voltage(uchar val){uchar Tmp;                       //最大值为255,对应5V,255/5=51Voltage[2]=val/51+'0';           //整数部分Tmp=val%51*10;                   // 第一位小数Voltage[1]=Tmp/51+'0';Tmp=Tmp%51*10;Voltage[0]=Tmp/51+'0';}//启动I2C总线void IIC_Start(){SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;}//停止I2C总线void IIC_Stop(){SDA=0;SCL=1;Delay4us();SDA=1; Delay4us();SCL=0;}// 从机发送应答位void Slave_ACK(){SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;}// 从机发送非应答位void Slave_NOACK(){SDA=1;SCL=1;Delay4us();SCL=0;SDA=0;}//发送一字节void IIC_SendByte(uchar wd){uchar i;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();}//接收一字节uchar IIC_ReceiveByte(){uchar i,rd=0x00;for(i=0;i<8;i++){SCL=1;rd<<=1;rd|=SDA;Delay4us();SCL=0;Delay4us();}SCL=0;Delay4us();return rd;}//连续读入4路通道的A/D转换结果并保存到Recv_Buffervoid ADC_PCF8591(uchar CtrlByte){uchar i;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转换//主程序void main(){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);}}

大电流电感

精密的智能电池简单化充电过程 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费

多节并联锂电池充电问题想问一下,三节并联的锂电池是否可以用单节锂电池充电管理芯片进行充电?考虑到电池两端的电压都是4.2V,这应该不冲突吧?不可以吧,需要均流
可以的,大容量的锂电池都是电池单体并联

三相交错并联请问三相交错并联,当一个工作的时候另外两个是不工作吗,那么输出的功率岂不是只有三分之一?
三相交错并联,第一路开通时,2路3路是关闭的。当第一路即将关闭时,2路开通。第二路即将

注塑加工厂


上一篇开关电源问题

下一篇镍氢电池充电控制IC


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话