本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
这个按键检测的程序功能是按下功能选择键,所选位置光标闪烁;按下增加键时,LCD上显示的数增加,并将此数值写入DS1302中。这个程序的问题是功能键能正常工作,按下增加键时没反应。麻烦各位给小弟指点迷津。谢谢!
void keyscan(void )
{
uchar func_num;
P3=0xff;
//功能选择键,按下键时,所选位置光标闪烁
if(function==0)
{
delay(20);
if(function==0)
{
// WriteSet1302(0x81,0x80);//时钟暂停
flag=1;
func_num++;
while(!function);
if(func_num==1)
{
ReadValue = ReadSet1302(0x81); //从秒寄存器读数据
second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);//将读出数据转化
// WriteSet1302(0x81,0x80);//时钟暂停
write_com(0x80+0x40+10);
write_com(0x0f);
}
if(func_num==2)
{
ReadValue = ReadSet1302(0x83); //从分寄存器读
minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
// WriteSet1302(0x81,0x80);//时钟暂停
write_com(0x80+0x40+7);
write_com(0x0f);
}
if(func_num==3)
{
ReadValue = ReadSet1302(0x85); //从时寄存器读
hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
// WriteSet1302(0x81,0x80);//时钟暂停
write_com(0x80+0x40+4);
write_com(0x0f);
}
if(func_num==4)
{
func_num=0;
flag=0;
write_com(0x0c);
// WriteSet1302(0x81,0x00);//时钟开启
Set_DS1302(second,minute,hour,day,month,year,week);
}
}
//判断增加键是否按下
if(func_num!=0)
{
if(add==0)
{
delaynus(50);
if(add==0)
{
//add_num++;
while(!add);
if(func_num==1)
{
second++;
if(second==60)
second=0;
write_sfm(10,second);
write_com(0x80+0x40+10);
}
if(func_num==2)
{
minute++;
if(minute==60)
minute=0;
write_sfm(7,minute);
write_com(0x80+0x40+7);
}
if(func_num==3)
{
hour++;
if(hour==24)
hour=0;
write_sfm(4,hour);
write_com(0x80+0x40+4);
}
}
}
}
}
} |