📄 isd4004_v08.c
字号:
//保留了除IOB0、IOB1、IOB3的其它位值,不改变MISO的值
//按键读取当时状态!
#define Port_IOA_Data (unsigned int*)0x7000 //portA data
#define Port_IOA_Buffer (unsigned int*)0x7001 //portA buffer
#define Port_IOA_Dir (unsigned int*)0x7002 //portA direction
#define Port_IOA_Attrib (unsigned int*)0x7003 //portA attribution
#define Port_IO_RL (unsigned int*)0x7004 //portA last data latch
#define Port_IOB_Data (unsigned int*)0x7005 //portB data
#define Port_IOB_Buffer (unsigned int*)0x7006 //portB buffer
#define Port_IOB_Dir (unsigned int*)0x7007 //portB direction
#define Port_IOB_Attrib (unsigned int*)0x7008 //portB attribution
#define Port_Feed_Back (unsigned int*)0x7009 //portB.4 portB.5 SFC
#define Port_TimerA_Data (unsigned int*)0x700A //timer A data
#define Port_TimerA_Ctrl (unsigned int*)0x700B //timer A control
#define Port_TimerB_Data (unsigned int*)0x700C //timer B data
#define Port_TimerB_Ctrl (unsigned int*)0x700D //timer B control
#define Port_TimeBaseSetup (unsigned int*)0x700E //time base configuration
#define Port_INT_Ctrl (unsigned int*)0x7010 //interrupt control
#define Port_INT_Clear (unsigned int*)0x7011 //Interrupt clear register
#define Port_Watchdog_Clear (unsigned int*)0x7012 //clear watchdog
#define SS_0 0xFFF7
#define SS_1 0x0008
#define SCLK_0 0xFFFE
#define SCLK_1 0x0001
#define MOSI_0 0xFFFD
#define MOSI_1 0x0002
#define SS_SCLK_MOSI_0 0xFFF4
#define SS_SCLK_1 0x0009
//#include "SPCE061.H"
void Delay()
{
int i=0;
for(i=0;i<1800;i++)
{
*Port_Watchdog_Clear=0x0001;
}
}
//===============================================================================================
//POWER UP 命令
//===============================================================================================
void poweron()
{
int i=0;
int m=0x0000;
int j=0x0000;
*Port_IOB_Dir|=0x000b; //ss,IOB3,输出;sclk,IOB0,输出;MOSI,IOB1,输出;MISO,IOB2,输入;
*Port_IOB_Attrib|=0x000f;
*Port_IOB_Data&=0xfff0;
m=0x0020;
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0; //ss=0,片选;sclk=0,时钟低电平
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
*Port_IOB_Data|=SS_1; //ss=1,不片选;sclk=1,时钟高电平
Delay();
}
//===============================================================================================
//POWERDOWN
//===============================================================================================
void powerdown()
{
int i=0;
int m=0x0000;
int j=0x0000;
m=0x0040;
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0; //ss=0,片选;sclk=0,时钟低电平
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
*Port_IOB_Data|=SS_1; //ss=1,不片选;sclk=1,时钟高电平
Delay();
}
//===============================================================================================
//STOP
//===============================================================================================
void stop()
{
int i=0;
int m=0x0000;
int j=0x0000;
m=0x0030;
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0; //ss=0,片选;sclk=0,时钟低电平
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
*Port_IOB_Data|=SS_1; //ss=1,不片选;sclk=1,时钟高电平
Delay();
}
//===============================================================================================
//PLAY
//===============================================================================================
void play(int a)
{
int i=0;
int m=0x0000;
int j=0x0000;
//===============================================================================================
//SET PLAY 命令
//===============================================================================================
// *Port_IOB_Data&=0xfff7; //ss=0,片选
m=0x00e0;
for(i=0;i<16;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0;
j=a&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
a=a>>1;
}
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0;
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
*Port_IOB_Data|=SS_1;
*Port_Watchdog_Clear=0x0001;
//===============================================================================================
//PLAY 命令
//===============================================================================================
m=0x00f0;
// *Port_IOB_Data&=0xfff7;
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0;
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
*Port_IOB_Data|=SS_1;
*Port_Watchdog_Clear=0x0001;
}
//===============================================================================================
//REC
//===============================================================================================
void rec()
{
int i=0;
int m=0x0000;
int j=0x0000;
int a=0x0047;
}
//===============================================================================================
//MC
//===============================================================================================
void mc()
{
int i=0;
int m=0x0000;
int j=0x0000;
int a=0x0047;
}
//===============================================================================================
//RINT
//===============================================================================================
void rint()
{
int i=0;
int m=0x0000;
int j=0x0000;
int r=0,e=0,k=0;
m=0x0030;
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0;
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
// *Port_IOB_Data|=SS_1;
*Port_Watchdog_Clear=0x0001;
//读出数据
for(i=0;i<2;i++)
{
*Port_IOB_Data&=SCLK_0;
k=*Port_IOB_Data&0x0004;
k=k>>2;
e|=k;
e=e<<1;
*Port_IOB_Data|=SCLK_1;
}
for(i=0;i<16;i++)
{
*Port_IOB_Data&=SCLK_0;
k=*Port_IOB_Data&0x0004;
k=k>>2;
r|=k;
r=r<<1;
*Port_IOB_Data|=SCLK_1;
}
}
//===============================================================================================
//
//===============================================================================================
int main()
{
/* int i=0;
int m=0x0000;
int j=0x0000;
int r=0,e=0,k=0;
poweron();
play(0x0000);
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
Delay();
m=0x0030;
for(i=0;i<8;i++)
{
*Port_IOB_Data&=SS_SCLK_MOSI_0;
j=m&0x0001;
j=j<<1;
*Port_IOB_Data|=j;
*Port_IOB_Data|=SCLK_1; //sclk=1,时钟高电平;时钟上升沿,传入数据
m=m>>1;
}
// *Port_IOB_Data|=SS_1;
*Port_Watchdog_Clear=0x0001;
//读出数据
for(i=0;i<2;i++)
{
*Port_IOB_Data&=SCLK_0;
k=*Port_IOB_Data&0x0004;
k=k>>2;
e|=k;
e=e<<1;
*Port_IOB_Data|=SCLK_1;
}
for(i=0;i<16;i++)
{
*Port_IOB_Data&=SCLK_0;
k=*Port_IOB_Data&0x0004;
k=k>>2;
r|=k;
r=r<<1;
*Port_IOB_Data|=SCLK_1;
}*/
unsigned int t=0,I_Key=0;
//设置A口为带下拉电阻的输入
*Port_IOA_Dir=0x0000;
*Port_IOA_Attrib=0x0000;
*Port_IOA_Data=0x0000;
while(1)
{
t=*Port_IOA_Data;
I_Key=t&0xffff; //获取A口输入的键值
switch(I_Key)
{
case 0x0000: break; //无键按下
case 0x0001:
{poweron();
play(0x0047);} // I_Key 1
break;
case 0x0002:stop(); // I_Key 2
break;
case 0x0004: // I_Key 3
case 0x0008: // I_Key 4
case 0x0010: // I_Key 5
case 0x0020: // I_Key 6
case 0x0040: // I_Key 7
case 0x0080: // I_Key 8
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -