📄 key_1.c
字号:
#include "2407A.h"
void initial(); /*初始化子程序 */
void timerint(); /*定时器3初始化子程序 */
void pwminitial(); /*PWM初始化子程序 */
unsigned int CMPR=0X4A9C; /*设置PWM周期变量 */
unsigned int TPER=0X9538;
unsigned int key; /*设置Timer1周期变量 */
void inline disable()
{
asm(" SETC INTM"); /*禁止所有中断*/
}
void inline enable()
{
asm(" CLRC INTM"); /*开放所有中断 */
}
void initial()
{
asm(" SETC SXM"); /*抑制符号位扩展 */
asm(" SETC OVM"); /*根据遇到溢出的情况,累加器被设置为它的最大正值或负值 */
asm(" SETC CNF"); /*B0被设置为程序存储空间 */
*SCSR1=0X87FE; /*clock=fin;使能ADC、SCI、SPI、CAN、EVA、EVB模块*/
*WDCR=0X06f;
*WDKEY=0X5555;
*WDKEY=0XAAAA; /*disable watch dog*/
*IMR=0X0002; /*允许INT2中断*/
*IFR=0XFFFF; /*清除全部中断标志*/
WSGR=0X00; /*禁止所有等待状态*/
*MCRA=*MCRA|0X0040; /*IOPA6端口设置为基本功能,PWM1 */
*MCRC=*MCRC&0XFF00; /*IOPE端口设置为一般的I/O功能 */
*PEDATDIR=*PEDATDIR&0X00FF; /*IOPE端口设置为输入方式*/
*PEDATDIR=*PEDATDIR&0XFF00; /*IOPE端口设置为输入方式*/
}
void timerint()
{
*EVBIMRA=*EVBIMRA|0X0080; /*允许定时器1的周期中断*/
*EVBIFRA=*EVBIFRA|0Xffff; /*清除定时器1周期中断标志*/
*T3CON=0X170C; /*Timer3为连续增计数模式,预分频值为128,使用内部时钟*/
*T3PER=0XA424; /*Timer3的周期寄存器的值根据400ms延时和预分频值确定*/
*T3CNT=0X00; /*Timer3的计数器清零 */
}
void pwminitial()
{
*ACTRA=0X0001; /*PWM1高有效*/
*DBTCONA=0X00; /*不使能死区控制*/
*CMPR1=CMPR; /*设置CMPR1,以确定输出占空比*/
*T1PER=TPER; /*设置Timer1周期寄存器,以确定PWM周期*/
*COMCONA=0X8200; /*使能比较操作*/
*T1CON=0X1000; /*Timer1为连续增计数模式,预分频值为1,使用内部时钟,Timer1比较使能*/
}
void main()
{
disable();
initial();
timerint();
pwminitial();
enable();
*T3CON=*T3CON|0X0040; /*启动Timer3*/
*T1CON=*T1CON|0X0040;
while(1)
{
asm(" nop");
}
}
void interrupt T3_INT()
{
unsigned int flag;
flag=*EVBIFRA&0X0080;
if(flag==0x0080)
{
*T3CNT=0X00; /*reset timer3 */
*EVBIFRA=*EVBIFRA|0X0080; /*clearn flag */
key=*PEDATDIR&0X00FF;
switch(key) /*键盘顺序改变 */
{
case 247: /*do 00000001*/
*CMPR1=0X4A9C;
*T1PER=0X9538; /*F=261.5Hz,T=3.82ms 0.0128*/
*T1CON=*T1CON|0X0040; /*启动Timer1 */
break;
case 251: /*re 00000010*/
*CMPR1=0X429A;
*T1PER=0X8534; /*F=293.4Hz,T=3.41ms */
*T1CON=*T1CON|0X0040;
break;
case 253: /*mi 00000100*/
*CMPR1=0X3B60;
*T1PER=0X76C0; /*F=328.9Hz,T=3.04ms */
*T1CON=*T1CON|0X0040;
break;
case 254: /*fa 00001000*/
*CMPR1=0X37DC;
*T1PER=0X6FB8; /*F=349.2Hz,T=2.86ms*/
*T1CON=*T1CON|0X0040;
break;
case 127: /*so 00010000*/
*CMPR1=0X319C;
*T1PER=0X6338; /*F=393Hz,T=2.54ms*/
*T1CON=*T1CON|0X0040;
break;
case 191: /*la 00100000*/
*CMPR1=0X2C56;
*T1PER=0X58AC; /*F=440Hz,T=2.27ms*/
*T1CON=*T1CON|0X0040;
break;
case 223: /*si 01000000*/
*CMPR1=0X37A6;
*T1PER=0X4F4C; /*F=492.1Hz,T=2.03ms */
*T1CON=*T1CON|0X0040;
break;
case 239: /*!do 10000000*/
*CMPR1=0X251C;
*T1PER=0X4A38; /*F=525.2Hz,T=1.9ms*/
*T1CON=*T1CON|0X0040;
break;
default :*T1CON=*T1CON&0XFFBF; /*STOP Timer1 */
}
enable(); /*open interrupt*/
return; /*interrupt back */
}
else
{
enable();
return;
}
}
void interrupt nothing( )
{
enable();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -