📄 main.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 + -