📄 main.c
字号:
/*-----------------------------------------------------*
*工 程 名:
*硬件连接:
*程序描述: SD-HC08 模板生成
*/
/*[头文件]*/
#include "GP32C.h" //映像寄存器地址头文件
#include "KB.h"
void PWMInit(unsigned int); //PWM初始化
void PWMconf(unsigned int); //PWM设置
void Delay_ms(unsigned char );
unsigned char KB1,KB2,KB3,KB4,KB5,KB6,i,KB_valve1,KB_valve2;
//DDRA=0xFF;PTA=0xFF;
/*[主函数]*/
void main()
{
while(1)
{
KB_Init();
T1SC0=0x0e;
KB_valve1=KB_Scan1();
KB_valve2=KB_Scan2();
if((KB_valve1!=0xff)||(KB_valve2!=0xff)) //有键按下
{
KB1=KB_valve1;
KB2=KB_valve2;
KB1&=0b00001000;
KB2&=0b00001000;
if(KB1==0||KB2==0) //L或H按下
{
KB3=KB5=KB_valve1;
KB4=KB6=KB_valve2;
KB3&=0b00010000;
KB4&=0b00010000;
KB5&=0b00100000;
KB6&=0b00100000;
if(KB3==0||KB4==0) //L按下
{
if((KB_valve1==0xE6)||(KB_valve2==0xE6))PWMconf(262);
if((KB_valve1==0xDE)||(KB_valve2==0xDE))PWMconf(294);
if((KB_valve1==0xBE)||(KB_valve2==0xBE))PWMconf(330);
if((KB_valve1==0xE5)||(KB_valve2==0xE5))PWMconf(349);
if((KB_valve1==0xDD)||(KB_valve2==0xDD))PWMconf(392);
if((KB_valve1==0xBD)||(KB_valve2==0xBD))PWMconf(440);
if((KB_valve1==0xE3)||(KB_valve2==0xE3))PWMconf(494);
}
if(KB5==0||KB6==0) //H按下
{
if((KB_valve1==0xEE)||(KB_valve2==0xEE))PWMconf(1046);
if((KB_valve1==0xD6)||(KB_valve2==0xD6))PWMconf(1175);
if((KB_valve1==0xBE)||(KB_valve2==0xBE))PWMconf(1318);
if((KB_valve1==0xED)||(KB_valve2==0xED))PWMconf(1397);
if((KB_valve1==0xD5)||(KB_valve2==0xD5))PWMconf(1568);
if((KB_valve1==0xBD)||(KB_valve2==0xBD))PWMconf(1760);
if((KB_valve1==0xEB)||(KB_valve2==0xEB))PWMconf(1976);
}}
else
{
switch(KB_valve1)
{
case 0xEE: PWMconf(523);break;
case 0xDE: PWMconf(558);break;
case 0xBE: PWMconf(660);break;
case 0xED: PWMconf(698);break;
case 0xDD: PWMconf(784);break;
case 0xBD: PWMconf(880);break;
case 0xEB: PWMconf(988);break;
default : T1SC|=(1<<5);break;
}}}}}
void Delay_ms(unsigned char i)
{ unsigned char j;
unsigned char u;
for(j=0;j<i;j++)
for(u=0;u<=250;u++) ;
}
void PWMconf(unsigned int Hz)
{
unsigned int Period,Duty;
Period=2457600/64/Hz;
PWMInit(Period);
Duty=Period/1.2;
T1SC|=(1<<5); //停止定时器1计数器计数
//[设置PWM脉宽]
T1CH0H = (Duty>>8); //设置高字节
T1CH0L = Duty; //设置低字节
T1SC&=~(1<<5); //允许定时器1计数器计数
Delay_ms(190); //延时100ms
}
/*PWMconf:PWM初始化设置--------------------------------*
* 功 能:PWM脉冲周期、占空比的设置 *
* 参 数:rate=脉宽时钟数,cyc=脉冲周期时钟数 *
* 返 回:无 *
*-----------------------------------------------------*/
void PWMInit(unsigned int Period)
{
unsigned int Temp=Period;
//不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST
T1SC = 0x36;
//[设置PWM周期]
T1MODH = (Temp>>8);
T1MODL = Period;
//[初始化设置PWM脉宽为0]
T1CH0H = 0x00;
T1CH0L = 0x00;
//设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
T1SC0 = 0x1E;
//允许定时器1计数寄存器计数
T1SC &= 0xDF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -