}
void keyscan() 功能设定 {
if(s1==0) 判断K1键是否按下 {
delayxms(1); if(s1==0) {
while(!s1);
s1num++; 功能键按下次数记录 switch(s1num) {
case 1: 调秒 TR0=0;
write_data(0x8e,0x00);取消写保护 write_data(0x8e,0x80); write_data(0x80,0x00); break;
case 2: 调分
write_data(0x8e,0x00); write_data(0x82,0x00); break;
case 3: 调时
write_data(0x8e,0x00); write_data(0x84,0x00); break;
case 4: 清零 s1num=0;
write_data(0x8e,0x80);禁止写 TR0=1; break; } } } }
void changetime() 调整时间 {
if(s1num!=0) 只有功能键被按下后,加和减键才有效 {
if(s2==0) 加键 { delayxms(1); if(s2==0) {
while(!s2); switch(s1num) {
case 1: 若功能键第一次被按下 miao++; 则调整秒加1 if(miao==60) 若满60后清零 miao=0;
write_data(0x80,(miao10*16+miao)); 将调整后的秒写入1302(BCD码的转换) break;
case 2: 若功能键第二次被按下 fen++; 则调整分加1
if(fen==60) 若满60后清零 fen=0;
write_data(0x82,(fen10*16+fen)); 将调整后的分写入1302 break;
case 3: 若功能键第三次被按下 shi++; 则调整时加1
if(shi==24) 若满24后清零 shi=0;
write_data(0x84,(shi10*16+shi)); 将调整后的时写入1302 break; } } }
if(s3==0) 减键 {
delayxms(1); if(s3==0) {
while(!s3); switch(s1num) {
case 1: miao--;
if(miao==-1) miao=59;
write_data(0x80,(miao10*16+miao)); break; case 2: fen--;
if(fen==-1) fen=59;
write_data(0x82,(fen10*16+fen));
break; case 3: shi--;
if(shi==-1) shi=23;
write_data(0x84,(shi10*16+shi)); break; } } } } }
void init() {
TMOD=0x01; TH0=0; TL0=0; EA=1; ET0=1; TR0=1; }
void display() {
switch(s4num) {
case 1:
display1(); break;
case 2:
display2(); break; case 3:
display3(); break; } }
void key4() {
if(s4==0) {
delayxms(1); if(s4==0) {
s4num++;
显示调整 显示时分秒 显示年月日 显示秒表 k4键
if(s4num>3) s4num=0; } } }
void main() {
char i,j; uchar ddd; init(); while(1) {
keyscan(); changetime(); get_time(); key4();
if(s4num!=0) {display();}
for(j=0;j<8;j++) {
ddd=SMG[display_buffer[j]]; for(i=0;i<8;i++) {
DISPLAY_CLK=0;
if((ddd&0x80)==0x80) {
DISPLAY_DAT=1; } else {
DISPLAY_DAT=0; }
ddd<<=1;
DISPLAY_CLK=0; DISPLAY_CLK=1; } }
delayxms(1000); } }
参考文献
[1] 王平.单片机应用设计与制作.[M].北京:清华大学出版社,2012.
相关推荐: