按键和主函数程序如下:
主函数:
void main()
{
key1=0;
key2=0;
flay=0;
init_DS1302(); //初始化1302
init_12864(); //初始化液晶
init_DS(); //初始化DS18B20
while(1)
{
key_jianzhi();
key_kongzhi();
if(flay==0)
{ //正常显示
dislay_xianshi();
}
//思路 每进一层 清除KEY1 KEY3 KEy4 KEY2作为保留返回
if(flay==1)
{ //设置界面一 闹钟+时间选择
dislay_shezhi_jiemian();
}
if(flay==2) //设置界面二 时间设置
{
dislay_shezhi_shijian();
}
if(flay==3) //设置界面二 闹钟
{
dislay_shezhi_naozhong_di();
}
}
}
按键函数如下:
#include"keyboard.h"
#include"dislay.h"
#include"12864.h"
char key1; //由K1和K2控制 K1++ K2--
char key2; //由K3和K4控制 K3++ K4--
uchar xz_1; // 第一界面的选择指向变量 用来控制》符号的上下选择
uchar xz_2; // 第二界面 时间的选择变量
uchar xz_3; // 第二界面 闹钟的选择变量
char flay; //时间设置选项
// bit flay_nz;
bit nz_off;
bit zisuo=0;
void key_jianzhi() //传递按键键值
{
if(k1==0) //按键一
{
delay1(5);
if(k1==0)
{
shuapin();
while(!k1);
key1++;
}
}
if(k2==0) //按键二
{
delay1(5);
if(k2==0)
{
shuapin();
while(!k2 );
flay--; //控制层数返回
if(flay<0)
{
flay=0; //自锁清零
zisuo=0;
key1=0;
}
}
}
if(k3==0) //按键3
{
delay1(5);
if(k3==0)
{
shuapin();
while(!k3 );
key2++;
}
}
if(k4==0) //按键4
{
delay1(5);
if(k4==0)
{
shuapin();
while(!k4 );
key2--;
if(key2<0)
key2=0;
}
}
}
void key_kongzhi()
{
/////////////////////////////第一层控制
if(zisuo==0)
{
if(key1==1)
{
flay=1;
zisuo=1;
key1=0;
}
}
//////////////////////////////第二层 选择
if(flay==1)
{
if( key2==0)
{
xz_1=0;
if( key1 > 5 ); //这里有问题 按一次 flay直接到>5了 不可能啊
{
key1=0;
flay=2;
}
}
if(key2==1)
{
xz_1=2;
}
}
目前遇到的问题主要在:
if(zisuo==0)
{
if(key1==1)
{
flay=1;
zisuo=1;
key1=0;
}
}
//////////////////////////////第二层 选择
if(flay==1)
{
if( key2==0)
{
xz_1=0;
if( key1 > 5 ); //这里有问题 按一次 flay直接到>5了 不可能啊
{
key1=0;
flay=2;
}
}
我的愿意是 按2次K1 flay=2 但是现在按下K1 flay 直接=2了 完全没有道理啊~ key1>5是用来测试的~ |