参考程序
I2CDelay(); I2C_SCL = 1; //拉高SCL if(I2C_SDA == 0) //读取SDA 的值 dat &= ~mask; //为0 时,dat 中对应位清零 else dat |= mask; //为1 时,dat 中对应位置1 I2CDelay(); I2C_SCL = 0; //再拉低SCL,以使从机发送出下一位 } I2C_SDA = 0; //8 位数据发送完后,拉低SDA,发送应答信号 I2CDelay(); I2C_SCL = 1; //拉高SCL I2CDelay(); I2C_SCL = 0; //再拉低SCL 完成应答位,并保持住总线 return dat; }/*************************************** Keyboard.h ***************************************/ #ifndef _KEY_BOARD_H #define _KEY_BOARD_H
#ifndef _KEY_BOARD_C extern unsigned char SetVal; #endif
void KeyAction();//按键处理,手动运行 #endif /*************************************** KEYBOARD.C ***************************************/ #define _KEY_BOARD_C #include "config.h" #include "keyboard.h" #include "Lcd1602.h" #include "main.h"
unsigned char SetVal=25;//设定初始值 /**************************************** 函数功能:按键处理,手动运行 入口参数:无 *****************************************/ void KeyAction() { if(AK_KEY==0)//LCD1602背光控制 { delayms(10); if(AK_KEY==0) { LCD1602_AK=!LCD1602_AK; while(!AK_KEY); }
} if(MA_KEY==0) { delayms(10); if(MA_KEY==0) { if(staSystem==E_AUTO) { staSystem=E_MANUAL; AUTO_LED=OFF; MANUAL_LED=ON; } elseif(staSystem==E_MANUAL) { staSystem=E_AUTO; AUTO_LED=ON; MANUAL_LED=OFF; } while(!MA_KEY); } } if(staSystem==E_MANUAL)//手动工作状态 { if(UP_KEY==0){PUMP=ON;PUMP_LED=ON;}//手动开 elseif(DN_KEY==0){PUMP=OFF;PUMP_LED=OFF;}//手动关} } elseif(staSystem==E_AUTO)//自动状态 { if(UP_KEY==0) { delayms(10); if(UP_KEY==0) { if(SetVal<100) SetVal++; //设置+ while(!UP_KEY); } } if(DN_KEY==0) { delayms(10); if(DN_KEY==0) { if(SetVal>0) SetVal--; //设置- while(!DN_KEY); } } } } |
Powered by Discuz! X3.4
© 2001-2023 Discuz! Team.