2、a16.h>flashunsignedcharled_7[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x40};//字型码,后3位为“A”,“b”,“-”flashunsignedcharposition[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};unsignedchardis_buff[8];//显示缓冲区,存放要显示的8个字符的段码值unsignedcharkey_disbuff[8];unsignedchark
3、ey_stime_counter,key_stime_ok1,sign;unsignedcharposit;bitkey_stime_ok;unsignedcharcount=0;flashunsignedintt[9]={0,956,865,759,716,638,568,506,470};flashunsignedchard[9]={0,105,116,132,140,157,176,198,209};#defineMax_note32flashunsignedcharmusic[Max_note]={1,2,1,2,1,2,3,2,5,2,5,
4、2,5,4,5,2,6,2,6,2,6,2,8,2,5,4};unsignedcharnote_n;unsignedintint_n;bitplay_on;interrupt[TIM1_COMPA]voidtimer1_compa_isr(void)//音乐播放中断{if(!play_on){note_n=0;int_n=1;play_on=1;}else{if(--int_n==0){TCCR1B=0x08;if(note_n5、n++;int_n=int_n*music[note_n];note_n++;TCCR1B=0x09;}elseplay_on=0;}}}voiddisplay(void)//8位LED数码管动态扫描函数{PORTC=0xff;PORTA=led_7[dis_buff[posit]];PORTC=position[posit];if(++posit>=8)posit=0;}#defineNo_key255#defineK1_11#defineK1_22#defineK1_33#defineK2_14#defineK2_25#defineK2_36#d
6、efineK3_17#defineK3_28#defineK3_39#defineK4_110#defineK4_20#defineK4_311#defineKey_mask0bunsignedcharread_keyboard()//键盘输入子程序{staticunsignedcharkey_state=0,key_value,key_line;unsignedcharkey_return=No_key,i;switch(key_state){case0:key_line=0b;for(i=1;i<=4;i++)//扫描键盘{PORTB=~key_
7、line;//输出行线电平PORTB=~key_line;//必须送2次!!!(注1)key_value=Key_mask&PINB;//读列电平if(key_value==Key_mask)key_line<<=1;//没有按键,继续扫描else{key_state++;//有按键,停止扫描break;//转消抖确认状态}}break;case1:if(key_value==(Key_mask&PINB))//再次读列电平,{switch(key_line
8、key_value)//与状态0的相同,确认按键{//键盘编码,返回编码值case0b:ke
9、y_return=K1_1;break;case0b:key_return=K1_2;break;case0