⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 C
字号:
/*-----------------------------------------------------*
*工 程 名:	                                
*硬件连接:                                
*程序描述: SD-HC08 模板生成                            
*/
/*[头文件]*/
#include "GP32C.h"                //映像寄存器地址头文件
#include "DJC.H"
void Delay_ms(unsigned char i);
void PWMInit(unsigned int Period);     //PWM初始化
void PWMconf(unsigned int Period);      //PWM设置
/*[主函数]*/

void main(){
	unsigned char Kb;
	DDRD=0xff;
	DDRB=0xff;
	PTB=0x0f;
	asm("CLI");
	while(1){
		Kb=KB_Scan();
		if(Kb==0xff)Kb=KB_ScanD();
		PTB=~Kb;
		PTD=0x0;
		if(Kb==0xff){
			operate(Kb);
		}
	}
}

void Delay_ms(unsigned char i)	//延时ims
  {  unsigned char j;
     unsigned char u;
     for(j=0;j<i;j++)
         for(u=0;u<=250;u++) ;
  }
  
const unsigned int tone_feq[]= {	
	262,294,330,349,392,440,494,0,0,0,
	523,558,660,698,784,880,988,0,0,0,
	1046,1175,1318,1397,1568,1760,1976,0
};

void operate(unsigned char KB_valve){
	unsigned int tone;
	tone=tone_feq[KB_valve];
	PWMconf(tone);
	T1SC&=~(1<<TSTOPBit);
	Delay_ms(20);
	T1SC|=(1<<TSTOPBit);
}

void PWMconf(unsigned int Period){
      unsigned int Duty; 
      Duty=2457600/Period;
      PWMInit(Duty);
      Duty=Duty/2;
      T1SC|=(1<<5);        //停止定时器1计数器计数
      T1CH0H = (Duty>>8);  //设置高字节
      T1CH0L = Duty;       //设置低字节
      T1SC|=(1<<TSTOPBit);       //允许定时器1计数器计数     
        Delay_ms(10);      //延时10ms
}

void PWMInit(unsigned int Period)
{    
    unsigned int Temp=Period;
    //不允许溢出中断,不启动计数,分频因子=1,置位TSTOP,TRST
    T1SC =0b01100000;        
    //[设置PWM周期]
    T1MODH = (Temp>>8);     
    T1MODL = Period;      
    //[初始化设置PWM脉宽为0]
    T1CH0H = 0x00;
    T1CH0L = 0x00;
    //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
    T1SC0  = 0b00011110; 
}    


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -