找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2529|回复: 6
打印 上一主题 下一主题
收起左侧

能不能帮忙解释下这段mcu代码的意思?

[复制链接]
跳转到指定楼层
楼主
ID:893163 发表于 2021-3-17 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void read_eeprom()
{
        PH_H = byte_read(0x2000);
  PH_L = byte_read(0x2001);
        a_a    = byte_read(0x2058);
}
void init_eeprom()
{
        read_eeprom()
        if(a_a != 1||k2==0||k3==0)PH_H=90;
                PH_L=40;
                a_a = 1;
                write_eeprom();         
        }        
}
void dispaly()//
{

        if(flag==0)
        {
        lcd1602_write(0,0x80);
        lcd1602_writebyte("PH:");
        lcd1602_write(1,PH/1000 + 0x30);
        lcd1602_write(1,PH%1000/100 + 0x30);
        lcd1602_write(1,'.');
        lcd1602_write(1,PH%100/10+ 0x30);
        lcd1602_write(1,PH%10 + 0x30);
        lcd1602_writebyte("  ");

        if(flagU==1)
        {
        lcd1602_writebyte("U:");
        lcd1602_write(1,Vdisbuff[0]);
        lcd1602_write(1,Vdisbuff[1]);
        lcd1602_write(1,Vdisbuff[2]);
        lcd1602_writebyte("V");
        }
        else
                lcd1602_writebyte("      ");

        lcd1602_write(0,0xC0);
        lcd1602_writebyte("Temp:");
        lcd1602_write(1,temp/1000 + 0x30);
        lcd1602_write(1,temp%1000/100 + 0x30);
        lcd1602_write(1,temp%100/10 + 0x30);
        lcd1602_write(1,'.');
        lcd1602_write(1,temp%10 + 0x30);
        lcd1602_write(1,0xdf);
        lcd1602_writebyte("C    ");
  }
        if(flag>0)
        {
                lcd1602_write(0,0x80);
                lcd1602_writebyte("PH_H:");
                lcd1602_write(1,PH_H/100 + 0x30);
                lcd1602_write(1,PH_H%100/10+ 0x30);
                lcd1602_write(1,'.');
                lcd1602_write(1,PH_H%10 + 0x30);
                lcd1602_writebyte("       ");

                if(flag==1)
                {
                        lcd1602_write(0,0x80+14);
                        lcd1602_writebyte("<<");
                }



                lcd1602_write(0,0xc0);
                lcd1602_writebyte("PH_L:");
                lcd1602_write(1,PH_L/100 + 0x30);
                lcd1602_write(1,PH_L%100/10+ 0x30);
                lcd1602_write(1,'.');
                lcd1602_write(1,PH_L%10 + 0x30);
                lcd1602_writebyte("       ");

                if(flag==2)
                {
                        lcd1602_write(0,0xc0+14);
                        lcd1602_writebyte("<<");
                }
        }
}

void alarm()
{
        altt++;
        if(altt>50)
        {
                altt=0;
                if(PHV>PH_H){rled=~rled; gled=1; beep=~beep;}
                else if(PHV<PH_L){rled=1; gled=~gled; beep=~beep;}
                else {rled=1; gled=1; beep=1;}
        }

}

void cekey()
{

        if(k1==0)
        {
                delay(10);
                if(k1==0)
                {
                        flag++;
                        if(flag>2) flag=0;
                }
                while(!k1);
        }
        if(k2==0&&flag>0)
        {
                delay(10);
                if(k2==0)
                {
                        altk=0;
                        switch(flag)
                        {
                                case 1: PH_H++; if(PH_H>140) PH_H=140;   break;
                                case 2: if(PH_H>PH_L) PH_L++;  break;
                        }
                        write_eeprom();
                }
                while(!k2);
//                {
//                        dispaly();
//                        altk++;
//                        if(altk>30)
//                        {
//                                altk=305;
//                                switch(flag)
//                                {
//                                        case 1: PH_H=PH_H+10;  PH_H=140;   break;
//                                        case 2: if(PH_H>PH_L) PH_L=PH_L+10;  break;
//                                }
//                        write_eeprom();
//                                write_eeprom();
//                        }
//                        delay(100);
//                        dispaly();
//                }
        }

        if(k3==0&&flag>0)
        {
                delay(10);
                if(k3==0)
                {
                        altk=0;
                        switch(flag)
                        {
                                case 1: if(PH_H>PH_L) PH_H--;   break;
                                case 2: if(PH_L>0) PH_L--;  break;
                        }
                        write_eeprom();
                }
                while(!k3);
//                {
//                        dispaly();
//                        altk++;
//                        if(altk>30)
//                        {
//                                altk=305;
//                                switch(flag)
//                                {
//                                        case 1: if(PH_H>PH_L) PH_H=PH_H-10;   break;
//                                        case 2: if(PH_L>0) PH_L=PH_L-10;  break;
//                                }
//                                write_eeprom();
//                        }
//                        delay(100);
//                        dispaly();
//                        
//                }
        }



        if(k3==0&&flag==0)
        {
                delay(10);
                if(k3==0)
                {
                        flagU=~flagU;
                }
                while(!k3);
        }

}

void TU_Collection()
{

        ad_red=ADC0832(1,0)
  adGet=adGet+ad_red;
        numt++;
        if(numt>=100)
        {
                numt=0;        
                Value=adGet/100;
                adv=Value * 500.0/ 256;
                PH_V =Value * 5.0 / 256;
//                PH_Value=-5.887*PH_V+21.677;
                PH_Value=-5.9647*PH_V+22.255;
                if(PH_Value<=0){PH_Value=0;}
                if(PH_Value>=14){PH_Value=14;}
                temp=check_wendu();

                disbuff[0]=(int)(PH_Value*100)/1000;
                disbuff[1]=(int)(PH_Value*100)%1000/100;        
                disbuff[2]=(int)(PH_Value*100)%100/10;
                disbuff[3]=(int)(PH_Value*100)%10;
                PH=disbuff[0]*1000+disbuff[1]*100+disbuff[2]*10+disbuff[3];
                PHV=disbuff[0]*100+disbuff[1]*10+disbuff[2];
                Vdisbuff[0]=(int)(PH_V*100)/100+'0';
                Vdisbuff[1]=(int)(PH_V*100)%100/10+'0';
                Vdisbuff[2]=(int)(PH_V*100)%10+'0';
                adGet=0;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:230742 发表于 2021-3-17 18:56 | 只看该作者
从0832读取的数据显示在1602上,有两个按键。有蜂鸣器。好像是一个类似可调温度报警的程序。还有写内部EEPROM的部分,掉电不丢失。
回复

使用道具 举报

板凳
ID:893163 发表于 2021-3-17 21:17 | 只看该作者
啤酒瓶子老大 发表于 2021-3-17 18:56
从0832读取的数据显示在1602上,有两个按键。有蜂鸣器。好像是一个类似可调温度报警的程序。还有写内部EEPR ...

   lcd1602_write(1,PH_L/100 + 0x30);
                lcd1602_write(1,PH_L%100/10+ 0x30);
这段是什么意思
回复

使用道具 举报

地板
ID:287575 发表于 2021-3-18 01:26 | 只看该作者
PH_L/100 是求出ph的百位数,加上0x30是把数字转换成字符,比如求的值是1,你要转换成‘1’才能显示
PH_L%100/10是求十位的数
回复

使用道具 举报

5#
ID:584814 发表于 2021-3-18 03:20 | 只看该作者
1820184992 发表于 2021-3-17 21:17
lcd1602_write(1,PH_L/100 + 0x30);
                lcd1602_write(1,PH_L%100/10+ 0x30);
这段是 ...

在1602的屏上显示PH_L百位和十位的值(两位)
回复

使用道具 举报

6#
ID:420836 发表于 2021-3-18 04:54 | 只看该作者
该代码包括ADC模数转换,警报,LCD显示,EEPROM读写。
回复

使用道具 举报

7#
ID:517951 发表于 2021-3-18 09:04 | 只看该作者
lcd1602_write(1,PH_L/100 + 0x30);   //在1602液晶显示屏上显示变量PH_L的百位数值
                lcd1602_write(1,PH_L%100/10+ 0x30); //在1602液晶显示屏下一个字符位上显示变量PH_L的十位数值
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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