//break;case 6: //星期设置LCD_init();//清屏while(!(h==2))//再次按选择键就进入下个项目的设置{if(key_press()){h=key_scan(); //扫描并返回翻译后的键码if(h==1)time_data[1]++;//按一下小时加一if(time_data[1]==0x08)//一天24小时time_data[1]=1;}write_ds1302(write_add[2],time_data[2]);time_pro();//时间处理showweek();//显示星期} default:LCD_init();//清屏showmessage();break;} }}}write_ds1302(0x8e,0x80);//(wp位置1)加入写保护write_ds1302(0x80,0x00);//时钟开始LCD_init();//清屏SEI();}key.c:#include iom16v.h>#include macros.h>#include "delay.h"#define uchar unsigned char#define uintn月设置LCD_init();//清屏while(!(m==2))//再次按选择键就进入下个项目的设置{if(key_press()){m=key_scan(); //扫描并返回翻译后的键码if(m==1)time_data[2]++;//按一下月加一if(time_data[2]==0x13)//一年有12个月time_data[2]=1;}//BCD码处理if(time_data[2]==0x0a){time_data[2]=0x10;}if(time_data[2]==0x1a){time_data[2]=0x20;} write_ds1302(write_add[2],time_data[2]);time_pro();//时间处理showmonth();//显示月}//break;case 3: //日设置LCD_init();//清屏while(!(u==2))//再次按选择键就进入下个项目的设置{if(key_press()){u=key_scan(); //扫描并返回翻译后的键码if(u==1)time_data[3]++;//按一下日加一if(time_data[3]==0x32)//一个月最多有31天time_data[3]=1;}//BCD码处理if(time_data[3]==0x0a){time_data[3]=0x10;}if(time_data[3]==0x1a){time_data[3]=0x20;} if(time_data[3]==0x2a){time_data[3]=0x30;} write_ds1302(write_add[3],time_data[3]);time_pro();//时间处理showdaytime();//显示日}//break;case 4: //小时设置LCD_init();//清屏while(!(k==2))//再次按选择键就进入下个项目的设置{if(key_press()){k=key_scan(); //扫描并返回翻译后的键码if(k==1)time_data[4]++;//按一下小时加一if(time_data[4]==0x25)//一天24小时time_data[4]=1;}//BCD码处理if(time_data[4]==0x0a){time_data[4]=0x10;}if(time_data[4]==0x1a){time_data[4]=0x20;} write_ds1302(write_add[4],time_data[4]);time_pro();//时间处理showhour();//显示小时} //break; case 5: //分钟设置LCD_init();//清屏while(!(j==2))//再次按选择键就进入下个项目的设置{if(key_press()){j=key_scan(); //扫描并返回翻译后的键码if(j==1)time_data[5]++;//按一下分钟加一if(time_data[5]==0x5a)//一小时60分钟time_data[5]=0x00;}//BCD码处理if(time_data[5]==0x0a){time_data[5]=0x10;}if(time_data[5]==0x1a){time_data[5]=0x20;}if(time_data[5]==0x2a){time_data[5]=0x30;}if(time_data[5]==0x3a){time_data[5]=0x40;}if(time_data[5]==0x4a){time_data[5]=0x50;}if(time_data[5]==0x5a){time_data[5]=0x60;} write_ds1302(write_add[5],time_data[5]);time_pro();//时间处理showminute();//显示分钟} //break;case 6: //星期设置LCD_init();//清屏while(!(h==2))//再次按选择键就进入下个项目的设置{if(key_press()){h=key_scan(); //扫描并返回翻译后的键码if(h==1)time_data[1]++;//按一下小时加一if(time_data[1]==0x08)//一天24小时time_data[1]=1;}write_ds1302(write_add[2],time_data[2]);time_pro();//时间处理showweek();//显示星期} default:LCD_init();//清屏showmessage();break;} }}}write_ds1302(0x8e,0x80);//(wp位置1)加入写保护write_ds1302(0x80,0x00);//时钟开始LCD_init();//清屏SEI();}key.c:#include iom16v.h>#include macros.h>#include "delay.h"#define uchar unsigned char#define uint unsigned intuchar key_press()//判断按键是否被按下(按下返回1,没按下返回0){ uchar j;DDRD|=0X0F;//低四位为输出PORTD|=0X0F;//低四位输出低电平DDRD=0XF0;//低四位为输入j=PIND;//读一下输入寄存器j=0X0F;//屏蔽高四位if(j==0X0F)//如果j没变化,则返回0,否则返回1{return 0;}else{return 1;}}uchar key_scan()//按键扫描函数{ uchar key;delay(10);if(key_press())//有按键按下时key_press()的值为1{key=PIND;//读取PIND值key=0X0F;//去掉高4位switch(key)//开关语句,用于判断{case 0X0E://1110连接PD0的按键按下key=1;break;case 0X0D://1101连接PD1的按键按下key=2;break; case 0X0B://1011连接PD2的按键按下key=3;break;case 0X07://0111连接PD3的按键按下key=4;break;default://都不是时随便返回一个值key=16; }while(key_press());//在按键按下时执行完上边的程序后就执行此循环//当按键松开时就跳出循环,目的是按一下就执行一次程序}else//没有按下时随便返回一个值{key=16;}return key;}程序未完,完整代码下载: http://www.51hei.com/f/1302cc.rar
评论