鱼C论坛

 找回密码
 立即注册
查看: 1047|回复: 2

[已解决]51智能充电器问题

[复制链接]
发表于 2022-4-2 11:32:48 | 显示全部楼层 |阅读模式
50鱼币
关于一个充电器问题,就是投币后 再开始的话 等待的时候电压 电流 还有电量在LCD1602中为什么不会改变啊?按道理应该随着充电时间而增加的啊?DEBUG了一下发现那个AD转换好像值也没变 不知道什么原因 有大神看看嘛?
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/***************&#210;&#253;&#189;&#197;&#201;ù&#195;÷*********************/
#define lcd P0
sbit rs=P2^7;          //LCD&#210;&#186;&#190;§&#191;&#216;&#214;&#198;&#182;&#203;
sbit en=P2^6;
sbit SPK=P1^7;  //·&#228;&#195;ù&#198;÷&#210;&#253;&#189;&#197;
sbit CS=P1^2;   //&#189;&#171;CS&#206;&#187;&#182;¨&#210;&#229;&#206;&#170;P1.2&#210;&#253;&#189;&#197;
sbit CLK=P1^0;  //&#189;&#171;CLK&#206;&#187;&#182;¨&#210;&#229;&#206;&#170;P1.0&#210;&#253;&#189;&#197;
sbit DIO=P1^1;  //&#189;&#171;DIO&#206;&#187;&#182;¨&#210;&#229;&#206;&#170;P1.1&#210;&#253;&#189;&#197;
sbit key1=P1^6;  //&#182;¨&#210;&#229;°&#180;&#188;ü&#210;&#253;&#189;&#197;
sbit key2=P1^5;  //&#182;¨&#210;&#229;°&#180;&#188;ü&#210;&#253;&#189;&#197;
sbit key3=P1^4;  //&#182;¨&#210;&#229;°&#180;&#188;ü&#210;&#253;&#189;&#197;
sbit a=P2^0;                //&#196;&#163;&#196;&#226;&#193;&#191;&#205;¨&#181;&#192;&#209;&#161;&#212;&#241;&#182;&#203;
sbit b=P2^1;                //&#196;&#163;&#196;&#226;&#193;&#191;&#205;¨&#181;&#192;&#209;&#161;&#212;&#241;&#182;&#203;
sbit c=P2^2;                //&#196;&#163;&#196;&#226;&#193;&#191;&#205;¨&#181;&#192;&#209;&#161;&#212;&#241;&#182;&#203;
sbit LED = P3^7;
sbit LED1 = P3^6;
sbit LED2 = P3^5;

uint total = 0;                       
uint count = 0;

/***********LCD&#207;&#212;&#202;&#190;&#202;&#253;×é**************************/

uchar table1[]="V=0.00V";
uchar table3[]="I=0.00A";
uchar table5[]="PO=000%";
uchar time[]="T=000Min";

/***************&#200;&#171;&#190;&#214;±&#228;&#193;&#191;************************/
uchar flag=0;      //&#187;&#187;&#181;&#178;±ê&#214;&#190;&#206;&#187;


void delay(uint count)                 //&#209;&#211;&#202;±
{
  uint i,j;
  for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}

/*************LCD1602&#199;&#253;&#182;&#175;&#179;&#204;&#208;ò************************/
void w_cmd(uchar com)                  //lcd1602&#208;&#180;&#195;ü&#193;&#238;
{
  rs=0;
  lcd=com;
  en=1;
  delay(5);
  en=0;
}

void w_data(uchar dat)                  //lcd1602&#182;&#193;&#202;&#253;&#190;&#221;
{
  rs=1;
  lcd=dat;
  en=1;
  delay(5);
  en=0;
}

void w_str(uchar *s)       //lcd1602&#208;&#180;×&#214;·&#251;&#180;&#174;
{
    while(*s)  w_data(*s++);
}

void init()                     //lcd1602&#179;&#245;&#202;&#188;&#187;&#175;
{
  en=0;
  w_cmd(0x38);
  w_cmd(0x0c);
  w_cmd(0x06);
  w_cmd(0x01);
}

/*****************************************************
&#186;&#175;&#202;&#253;&#185;&#166;&#196;&#220;&#163;&#186;&#189;&#171;&#196;&#163;&#196;&#226;&#208;&#197;&#186;&#197;×&#170;&#187;&#187;&#179;&#201;&#202;&#253;×&#214;&#208;&#197;&#186;&#197;
***************************************************/
unsigned char  A_D()
{
  unsigned char i,dat;
   CS=1;   //&#210;&#187;&#184;&#246;×&#170;&#187;&#187;&#214;&#220;&#198;&#218;&#191;&#170;&#202;&#188;
   CLK=0;  //&#206;&#170;&#181;&#218;&#210;&#187;&#184;&#246;&#194;&#246;&#179;&#229;×÷×&#188;±&#184;
   CS=0;  //CS&#214;&#195;0&#163;&#172;&#198;&#172;&#209;&#161;&#211;&#208;&#208;§
   DIO=1;    //DIO&#214;&#195;1&#163;&#172;&#185;&#230;&#182;¨&#181;&#196;&#198;&#240;&#202;&#188;&#208;&#197;&#186;&#197;  
   CLK=1;   //&#181;&#218;&#210;&#187;&#184;&#246;&#194;&#246;&#179;&#229;
   CLK=0;   //&#181;&#218;&#210;&#187;&#184;&#246;&#194;&#246;&#179;&#229;&#181;&#196;&#207;&#194;&#189;&#181;&#209;&#216;&#163;&#172;&#180;&#203;&#199;°DIO±&#216;&#208;&#235;&#202;&#199;&#184;&#223;&#181;&#231;&#198;&#189;
   DIO=1;   //DIO&#214;&#195;1&#163;&#172; &#205;¨&#181;&#192;&#209;&#161;&#212;&#241;&#208;&#197;&#186;&#197;  
   CLK=1;   //&#181;&#218;&#182;&#254;&#184;&#246;&#194;&#246;&#179;&#229;&#163;&#172;&#181;&#218;2&#161;&#162;3&#184;&#246;&#194;&#246;&#179;&#229;&#207;&#194;&#179;&#193;&#214;&#174;&#199;°&#163;&#172;DI±&#216;&#208;&#235;&#184;ú±&#240;&#202;&#228;&#200;&#235;&#193;&#189;&#206;&#187;&#202;&#253;&#190;&#221;&#211;&#195;&#211;&#218;&#209;&#161;&#212;&#241;&#205;¨&#181;&#192;&#163;&#172;&#213;&#226;&#192;&#239;&#209;&#161;&#205;¨&#181;&#192;CH0
   CLK=0;   //&#181;&#218;&#182;&#254;&#184;&#246;&#194;&#246;&#179;&#229;&#207;&#194;&#189;&#181;&#209;&#216;
   
   DIO=0;   //DI&#214;&#195;0&#163;&#172;&#209;&#161;&#212;&#241;&#205;¨&#181;&#192;0
   CLK=1;    //&#181;&#218;&#200;&#253;&#184;&#246;&#194;&#246;&#179;&#229;
   CLK=0;    //&#181;&#218;&#200;&#253;&#184;&#246;&#194;&#246;&#179;&#229;&#207;&#194;&#189;&#181;&#209;&#216;
   DIO=1;    //&#181;&#218;&#200;&#253;&#184;&#246;&#194;&#246;&#179;&#229;&#207;&#194;&#179;&#193;&#214;&#174;&#186;ó&#163;&#172;&#202;&#228;&#200;&#235;&#182;&#203;DIO&#202;§&#200;&#165;×÷&#211;&#195;&#163;&#172;&#211;&#166;&#214;&#195;1
   CLK=1;    //&#181;&#218;&#203;&#196;&#184;&#246;&#194;&#246;&#179;&#229;
   for(i=0;i<8;i++)  //&#184;&#223;&#206;&#187;&#212;&#218;&#199;°
    {
      CLK=1;         //&#181;&#218;&#203;&#196;&#184;&#246;&#194;&#246;&#179;&#229;
      CLK=0;
      dat<<=1;       //&#189;&#171;&#207;&#194;&#195;&#230;&#180;&#162;&#180;&#230;&#181;&#196;&#181;&#205;&#206;&#187;&#202;&#253;&#190;&#221;&#207;ò&#211;&#210;&#210;&#198;
   dat|=(unsigned char)DIO;   //&#189;&#171;&#202;&#228;&#179;&#246;&#202;&#253;&#190;&#221;DIO&#205;¨&#185;&#253;&#187;ò&#212;&#203;&#203;&#227;&#180;&#162;&#180;&#230;&#212;&#218;dat×&#238;&#181;&#205;&#206;&#187;
    }            
    CS=1;          //&#198;&#172;&#209;&#161;&#206;&#222;&#208;§
  return dat;  //&#189;&#171;&#182;&#193;&#202;é&#181;&#196;&#202;&#253;&#190;&#221;·&#181;&#187;&#216;     
}
/**********************±¨&#190;&#175;&#179;&#204;&#208;ò************************/
void BaoJing(void)
{  
        uint i, j;
        for (i = 0; i < 200; i++)    //&#178;ú&#201;ú&#194;&#246;&#179;&#229;&#202;&#185;·&#228;&#195;ù&#198;÷·&#162;&#179;&#246;&#201;ù&#210;&#244;
        {
         SPK = 0; for (j = 0; j < 100; j++);
         SPK = 1; for (j = 0; j < 100; j++);
  }         
}
/*********************°&#180;&#188;ü&#197;&#208;&#182;¨************************************/
void keyscan()
{
        if(key1==0)                   //&#197;&#208;&#182;&#207;&#202;&#199;·&#241;°&#180;&#207;&#194;
        {
                delay(10);
                if(key1==0)
                {
                        while(!key1);
                        total+=5;
                        BaoJing();   //&#204;á&#202;&#190;&#210;&#244;
                        if(total >990 ) total = 990;
                       
                }
        }
        if(key2==0)                   //&#197;&#208;&#182;&#207;&#202;&#199;·&#241;°&#180;&#207;&#194;
        {
                delay(10);
                if(key2==0)
                {
                        while(!key2);
                        if(total > 0){
                                BaoJing();   //&#204;á&#202;&#190;&#210;&#244;
                                LED = 1;
                                TR1 = 1;
                        }
                       
                }
        }
        if(key3==0)                   //&#197;&#208;&#182;&#207;&#202;&#199;·&#241;°&#180;&#207;&#194;
        {
                delay(10);
                if(key3==0)
                {
                        while(!key3);
                        BaoJing();   //&#204;á&#202;&#190;&#210;&#244;
                        LED = 0;
                        LED = 0;
                        LED = 0;
                        total = 0;
                        TR1 = 0;       
                }
        }
}

/*******************&#182;¨&#202;±&#198;÷1&#179;&#245;&#202;&#188;&#187;&#175;&#179;&#204;&#208;ò******************/
void Timer1_Init(void)
{
        TMOD=0x11;       
        TH1 = ( 65535 - 50000 ) / 256;   //0.2ms
        TL1 = ( 65535 - 50000 ) % 256;
        ET1=1;               
        TR1=0;         
        EA=1;
}
/*******************&#182;¨&#202;±&#198;÷1&#214;&#208;&#182;&#207;&#179;&#204;&#208;ò********************/
void Timer1 ( void ) interrupt 3  //&#182;¨&#202;±&#198;÷1&#214;&#208;&#182;&#207;&#186;&#175;&#202;&#253; 0.2ms
{
        TH1 = ( 65535 - 50000) / 256;  
        TL1 = ( 65535 - 50000 ) % 256;          
        count++;
        if(count==25*60)
        {
                total--;
                if(total == 0)
                {
                        total =0;
                        LED = 0;
                        LED2 = 1;
                        TR1=0;
                }
                count =0;       
        }
}

/*&#214;÷&#186;&#175;&#202;&#253;*/                                                               
void main()
{
  uint adval;
  unsigned long int temp;
  init();         //&#210;&#186;&#190;§&#179;&#245;&#202;&#188;&#187;&#175;       
  Timer1_Init();  //&#182;¨&#202;±&#198;÷1&#179;&#245;&#202;&#188;&#187;&#175;
  LED = 0;       
  LED1=0;
  LED2=0;
  while(1)
  {
         
        //&#214;±&#193;÷&#181;&#231;&#209;&#185;&#178;&#226;&#193;&#191;
        keyscan();   //°&#180;&#188;ü&#197;&#208;&#182;¨
        c=0;b=0;a=0;    //&#205;¨&#181;&#192;&#209;&#161;&#212;&#241;
        //w_cmd(0x80);
        //w_str(table0);
        adval=A_D();    //&#189;&#248;&#208;&#208;A/D×&#170;&#187;&#187;
        temp=adval* 5.0/255* 2*100;  //×&#170;&#187;&#187;&#179;&#201;&#202;&#181;&#188;&#202;&#181;&#231;&#209;&#185;&#178;&#162;·&#197;&#180;ó100±&#182;
        table1[2]=temp%1000/100+0x30;
        table1[4]=temp%100/10+0x30;
        table1[5]=temp%10+0x30;                       
        w_cmd(0x80+0x00);       
        w_str(table1);               
        delay(10);
                       
        //&#214;±&#193;÷&#181;&#231;&#193;÷&#178;&#226;&#193;&#191;
        c=0;b=0;a=1;    //&#205;¨&#181;&#192;&#209;&#161;&#212;&#241;
        //w_cmd(0x80);
        //w_str(table2);               
        adval=A_D();    //&#189;&#248;&#208;&#208;A/D×&#170;&#187;&#187;
        temp=adval*0.1/255*5000000/10;
       
        table3[2]=temp%1000/100+0x30;
        table3[4]=temp%100/10+0x30;
        table3[5]=temp%10+0x30;       
        w_cmd(0x80+8);       
        w_str(table3);
        delay(10);
                       
        //&#181;&#231;&#193;&#191;&#188;ì&#178;&#226;
        c=0;b=1;a=0;    //&#205;¨&#181;&#192;&#209;&#161;&#212;&#241;
        adval=A_D();    //&#189;&#248;&#208;&#208;A/D×&#170;&#187;&#187;
        temp=adval*1.0/(255-adval)*1000;
        temp = temp/96;
        if(temp > 100)temp = 100;

        if(temp == 100){
                LED = 0;
                LED1 = 1;
        }else{
                LED1 = 0;
        }       
        table5[3]=temp%1000/100+0x30;               
        table5[4]=temp%100/10+0x30;               
        table5[5]=temp%10+0x30;       
        w_cmd(0xc0+0);       
        w_str(table5);
        delay(10);
                                       
        //&#179;&#228;&#181;&#231;&#202;±&#188;&#228;&#207;&#212;&#202;&#190;
        time[2]=total%1000/100+0x30;               
        time[3]=total%100/10+0x30;               
        time[4]=total%10+0x30;       
        w_cmd(0xc0+8);       
        w_str(time);
        delay(10);                                       
            
  }
}
最佳答案
2022-4-2 11:32:49
本帖最后由 村里小黑 于 2022-4-12 11:05 编辑

不太清楚你的电量采集模拟?电能量完全可以根据公式计算出来的啊,没必要去在单独采集了呀,电压*电流*时间=电能量;而且电能量应该是和时间有关系的,随时间累计增加的,在你代码里没看出来有,也有可能是你电量采集的硬件已经做好了?我不清楚。
至于AD值没有变可能是因为是在模拟环境下进行,你的电平,电阻都是理想的,所以没有波动。

只是猜测,仅供参考!

仿真图

仿真图

最佳答案

查看完整内容

不太清楚你的电量采集模拟?电能量完全可以根据公式计算出来的啊,没必要去在单独采集了呀,电压*电流*时间=电能量;而且电能量应该是和时间有关系的,随时间累计增加的,在你代码里没看出来有,也有可能是你电量采集的硬件已经做好了?我不清楚。 至于AD值没有变可能是因为是在模拟环境下进行,你的电平,电阻都是理想的,所以没有波动。 只是猜测,仅供参考!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-2 11:32:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 村里小黑 于 2022-4-12 11:05 编辑

不太清楚你的电量采集模拟?电能量完全可以根据公式计算出来的啊,没必要去在单独采集了呀,电压*电流*时间=电能量;而且电能量应该是和时间有关系的,随时间累计增加的,在你代码里没看出来有,也有可能是你电量采集的硬件已经做好了?我不清楚。
至于AD值没有变可能是因为是在模拟环境下进行,你的电平,电阻都是理想的,所以没有波动。

只是猜测,仅供参考!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-15 16:22:46 | 显示全部楼层
村里小黑 发表于 2022-4-12 10:59
不太清楚你的电量采集模拟?电能量完全可以根据公式计算出来的啊,没必要去在单独采集了呀,电压*电流*时间 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表