找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位大佬下面这个单片机代码按键运用不当该怎么改呀?求大神帮忙看看

[复制链接]
跳转到指定楼层
楼主
仿真是正常的但焊接出来按键按下没任何反应
程序如下:
void KeyScanf()
{
        if(KeySet_P==0)                // 判断设置按键是否被按下
        {
                EA=0;
               
                /*将液晶显示改为设置温度的页面****************************************************/
                LcdWriteCmd(0x01);                                          
                LcdGotoXY(0,0);
                LcdPrintStr("Temperature Set ");
                LcdGotoXY(1,0);
                LcdPrintStr("      -    C    ");
                LcdGotoXY(1,10);                                                
                LcdWriteData(0xdf);                        

                LcdGotoXY(1,4);                                                 // 在液晶上填充温度的下限值        
                LcdPrintNum2(AlarmTL);        
                LcdGotoXY(1,7);                                                 // 在液晶上填充温度的上限值
                LcdPrintNum2(AlarmTH);

                LcdGotoXY(1,5);                                                 // 光标定位到第1行第5列
                LcdWriteCmd(0x0f);                                // 光标闪烁
               
                DelayMs(10);                                                  // 去除按键按下的抖动
                while(!KeySet_P);                                         // 等待按键释放
                DelayMs(10);                                                  // 去除按键松开的抖动

                /*设置温度的下限值****************************************************************/
                while(KeySet_P)                                                // “设置键”没有被按下,则一直处于温度下限的设置
                {
                        if(KeyDown_P==0)                                // 判断 “减按键“ 是否被按下               
                        {
                                if(AlarmTL>0)                                        // 只有当温度下限值大于0时,才能减1
                                        AlarmTL--;
                                LcdGotoXY(1,4);                                 // 重新刷新显示更改后的温度下限值        
                                LcdPrintNum2(AlarmTL);                  
                                LcdGotoXY(1,5);                                // 重新定位闪烁的光标位置
                                DelayMs(350);                                        // 延时
                        }
                        if(KeyUp_P==0)                                  // 判断 “加按键“ 是否被按下
                        {
                                if(AlarmTL<99)                           // 只有当温度下限值小于99时,才能加1
                                        AlarmTL++;
                                LcdGotoXY(1,4);                                  // 重新刷新显示更改后的温度下限值
                                LcdPrintNum2(AlarmTL);
                                LcdGotoXY(1,5);                                // 重新定位闪烁的光标位置
                                DelayMs(350);                                        // 延时
                        }        
                }

                LcdGotoXY(1,8);
                DelayMs(10);                                                  // 去除按键按下的抖动
                while(!KeySet_P);                                         // 等待按键释放
                DelayMs(10);                                                  // 去除按键松开的抖动

                /*设置温度的上限值****************************************************************/        
                while(KeySet_P)                                          // “设置键”没有被按下,则一直处于温度上限的设置
                {
                        if(KeyDown_P==0)                                // 判断 “减按键“ 是否被按下
                        {
                                if(AlarmTH>0)                                  // 只有当温度上限值大于0时,才能减1                        
                                        AlarmTH--;
                                LcdGotoXY(1,7);                           // 重新刷新显示更改后的温度上限值
                                LcdPrintNum2(AlarmTH);
                                LcdGotoXY(1,8);                                // 重新定位闪烁的光标位置
                                DelayMs(350);                                        // 延时
                        }
                        if(KeyUp_P==0)                                   // 判断 “加按键“ 是否被按下
                        {
                                if(AlarmTH<99)                                 // 只有当温度上限值小于99时,才能加1
                                        AlarmTH++;
                                LcdGotoXY(1,7);                                // 重新刷新显示更改后的温度上限值         
                                LcdPrintNum2(AlarmTH);
                                LcdGotoXY(1,8);                                // 重新定位闪烁的光标位置
                                DelayMs(350);                                        // 延时
                        }                                                                 
                }

                /*将液晶显示改为设置湿度的页面****************************************************/
                LcdWriteCmd(0x01);                                          
                LcdGotoXY(0,0);
                LcdPrintStr("  Humidity Set  ");
                LcdGotoXY(1,0);
                LcdPrintStr("      -   %RH   ");               

                LcdGotoXY(1,4);                                                 // 在液晶上填充湿度的下限值        
                LcdPrintNum2(AlarmHL);        
                LcdGotoXY(1,7);                                                 // 在液晶上填充湿度的上限值
                LcdPrintNum2(AlarmHH);

                LcdGotoXY(1,5);                                                 // 光标定位到第1行第5列
               
                DelayMs(10);                                                  // 去除按键按下的抖动
                while(!KeySet_P);                                         // 等待按键释放
                DelayMs(10);
               
                /*设置湿度的下限值****************************************************************/
                while(KeySet_P)                                                 // “设置键”没有被按下,则一直处于湿度下限的设置
                {
                        if(KeyDown_P==0)                                // 判断 “减按键“ 是否被按下
                        {
                                if(AlarmHL>0)                                         // 只有当湿度下限值大于0时,才能减1
                                        AlarmHL--;
                                LcdGotoXY(1,4);                                // 重新刷新显示更改后的湿度下限值         
                                LcdPrintNum2(AlarmHL);
                                LcdGotoXY(1,5);                                // 重新定位闪烁的光标位置
                                DelayMs(350);
                        }
                        if(KeyUp_P==0)                                  // 判断 “加按键“ 是否被按下
                        {
                                if(AlarmHL<99)                          // 只有当湿度下限值小于99时,才能加1
                                        AlarmHL++;
                                LcdGotoXY(1,4);                                  // 重新刷新显示更改后的湿度下限值
                                LcdPrintNum2(AlarmHL);
                                LcdGotoXY(1,5);                          // 重新定位闪烁的光标位置
                                DelayMs(350);                                        // 延时
                        }        
                }

                LcdGotoXY(1,8);
                DelayMs(10);                                                  // 去除按键按下的抖动
                while(!KeySet_P);                                         // 等待按键释放
                DelayMs(10);                                                  // 去除按键松开的抖动
               
                /*设置湿度的上限值****************************************************************/
                while(KeySet_P)                                           // “设置键”没有被按下,则一直处于湿度上限的设置
                {
                        if(KeyDown_P==0)                                 // 判断 “减按键“ 是否被按下
                        {
                                if(AlarmHH>0)                                  // 只有当湿度上限值大于0时,才能减1
                                        AlarmHH--;
                                LcdGotoXY(1,7);                                  // 重新刷新显示更改后的湿度上限值
                                LcdPrintNum2(AlarmHH);
                                LcdGotoXY(1,8);                           // 重新定位闪烁的光标位置
                                DelayMs(350);
                        }
                        if(KeyUp_P==0)                                         // 判断 “加按键“ 是否被按下
                        {
                                if(AlarmHH<99)                                // 只有当湿度上限值小于99时,才能加1
                                        AlarmHH++;
                                LcdGotoXY(1,7);                                 // 重新刷新显示更改后的湿度上限值        
                                LcdPrintNum2(AlarmHH);
                                LcdGotoXY(1,8);                                 // 重新定位闪烁的光标位置
                                DelayMs(350);                                        // 延时
                        }        
                }

                /*将液晶显示改为设置光照的页面****************************************************/
                LcdWriteCmd(0x01);                                          // 设置界面的显示框架
                LcdGotoXY(0,0);
                LcdPrintStr("   light Set    ");
                LcdGotoXY(1,0);
                LcdPrintStr("        %   ");
                LcdGotoXY(1,4);                                                                // 显示当前的报警值
                LcdPrintNum1(AlarmLG);                                

                LcdGotoXY(1,6);                                                                 // 光标定位到第1行第6列
                DelayMs(10);                                                                  // 去除按键按下的抖动
                while(!KeySet_P);                                                         // 等待按键释放
                DelayMs(10);
               
                while(KeySet_P)                                                                 // “设置键”没有被按下,则一直处于光强下限的设置
                {
                        if(KeyDown_P==0)                                                // 判断 “减按键“ 是否被按下
                        {
                                if(AlarmLG>1)                                                        // 只有gAlarmLG大于1才能减1                                                               
                                        AlarmLG--;                                
                                LcdGotoXY(1,4);                                                // 液晶光标定位
                                LcdPrintNum1(AlarmLG);                // 刷新改变后的报警值
                                LcdGotoXY(1,6);
                                DelayMs(200);                                                        // 延时一下
                        }
                        if(KeyUp_P==0)                                                  // 判断 “加按键“ 是否被按下
                        {
                        if(AlarmLG<99)                                                        // 只有gAlarmLG小于99才能加1
                                        AlarmLG++;                                
                                LcdGotoXY(1,4);                                                // 液晶光标定位
                                LcdPrintNum1(AlarmLG);                // 刷新改变后的报警值
                                LcdGotoXY(1,6);
                                DelayMs(200);                                                        // 延时一下
                        }        
                }

                /*完成设置,退出前的处理**********************************************************/
                LcdWriteCmd(0x0C);                                                          // 取消光标闪烁
                LcdShowInit();                                                                                // 液晶显示为检测界面的

                DelayMs(10);                                                                                  // 去除按键按下的抖动
                while(!KeySet_P);                                                                         // 等待按键释放
                DelayMs(10);                                                                                  // 去除按键松开的抖动

                Sector_Erase(0x2000);                                                         // 存储之前必须先擦除
                EEPROM_Write(0x2000,AlarmTL);                        // 把温度下限存入到EEPROM的0x2000这个地址
                EEPROM_Write(0x2001,AlarmTH);                        // 把温度上限存入到EEPROM的0x2001这个地址
                EEPROM_Write(0x2002,AlarmHL);                        // 把湿度下限存入到EEPROM的0x2002这个地址
                EEPROM_Write(0x2003,AlarmHH);                        // 把湿度上限存入到EEPROM的0x2003这个地址
                EEPROM_Write(0x2004,AlarmLG/10);        // 把光照报警值存入到EEPROM的0x2004和0x2005这两个地址
                EEPROM_Write(0x2005,AlarmLG%10);
               
                EA=1;
        }        
}

各位大佬帮小弟解答一下吧,这程序是别人给我的,我看不太懂

%XW@2052S6H`PMPIR1}M2]H.png (84.98 KB, 下载次数: 44)

%XW@2052S6H`PMPIR1}M2]H.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2021-5-26 09:26 | 只看该作者
仿真正常说明电路原理没错,查硬件连接和软件延时。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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