微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大佬们求解,怎样才能让k2实现起停程序的功能

大佬们求解,怎样才能让k2实现起停程序的功能

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^2;
sbit beep=P3^7;
sbit K2 = P1^0;
uchar i;  
uchar song_Index=0,Tone_Index=0;
uchar*song_Tone,*song_Time;  
const LED_tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF};  
uint code Tone_tab[]={62018,62401,62491,62895,63184,63441,63506,63773,63965,64137,64215,64360,64488,64603,64654,64751,64836,64876,64948,65012,65067,65535};  
uchar code song1_Tone[]={11,9,11,14,12,14,12,11,11,7,8,9,8,7,8,11,9,11,14,13,12,14,11,11,7,8,9,6,7, 12,14,14,13,12,13,14,12,13,14,12,12,11,10,7,8,11,9,11,14,13,12,14,11,11,8,9,10,6,7,0xff};  
uchar code song1_Time[]={4,2,2,8,4,2,2,8,4,2,2,4,2,2,12,4,2,2,4,2,4,4,8,4,2,2,4,2,12,4,4,8,4,2,2,8,2,2,2,2,2,2,2,2,16, 4,2,2,4,2,4,4,8,4,2,2,4,2,12,0xff};  
uchar code song2_Tone[]={ 7,8,9,7,7,8,9,7,9,10,11,9,10,11, 11,12,11,10,9,7,11,12,11,10,9,7,7,4,7,7,4,7,0Xff};  
uchar code song2_Time[]={4,4,4,4,4,4,4,4,4,4,8,4,4,8,2,2,2,2,4,4,2,2,2,2,4,4,4,4,8,4,4,8,0xff};  
uchar code song3_Tone[]={ 7,7,7,8,9,9,9,9,10,11,12,12,11,10,9,11,11,8,9,7, 7,7,7,8,11,9,9,9,10,11,12,12,11,10,9,11,11,8,9,7,0xff};  
uchar code song3_Time[]={ 2,2,2,2,4,2,2,2,2,4,2,2,2,2,4,2,2,2,2,4, 2,2,2,2,4,2,2,2,2,4,2,2,2,2,4,2,2,2,2,5,0Xff};  

void delayms(uint ms)  {    uchar a;   while(ms--)   
{     
for(a=230;a>0;a--);   
}   
}     
void int0() interrupt 0   
{      
  delayms(100);  
   if(INT0==0)   
   {TR0=0;   song_Index++;   
   }   
   if(song_Index==1)   
   {      
   song_Tone=song2_Tone;     
   song_Time=song2_Time;     
   }      
   if(song_Index==2)     
   {      
   song_Tone=song3_Tone;      
   song_Time=song3_Time;}
   if(song_Index==3)   
   {     
   song_Tone=song1_Tone;      
   song_Time=song1_Time;     
   song_Index=0;     
   }     
   TR0=1;   
    i=0;     
        }
       
             
        void Timer0() interrupt 1      
        {         
        TH0=Tone_tab[Tone_Index]/256;   
         TL0=Tone_tab[Tone_Index]%256;   
          beep=~beep;   
           }     
     void display(void)     
           {P0=LED_tab[song_Index];   
            }     
     void int_init(void)   
                {     
                TMOD=0x01;   
                ET0=1;   
                EX0=1;   
                IT0=1;   
                EA=1;   
                TR0=0;   
                }
               
                  
                void main (void)      
                {
                 int_init();      
                 song_Tone=song1_Tone;      
                 song_Time=song1_Time;     
                 while(1)     
                 {        
                 display();   
                 Tone_Index=song_Tone[i];   
                 if(Tone_Index==0xFF)   
                 {   
                 i=0;   
                 TR0=0;   
                 }   
                 TR0=1;     
                 delayms(song_Time[Tone_Index]*60);   
                 TR0=0;   
                 i++;     
                  }   
                   }

描述不清,另外,中断中加了100ms的延时,这个要去掉。还有,没见你按键扫描的函数。

在计时器中断中扫描k2,若k2=0,让程序用while让程序死在这。

道理是懂得,可我不知道怎么写程序

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top