📄 projcect.c
字号:
#include "SPCE061V004.H"
#include "IO_bit.h"
#define dout IOB3
#define dclk IOB2
#define din IOB1
#define load IOB0
unsigned int a=10; //分贝值
unsigned int b=0x25a0; //DAC的值
unsigned int key,x1;
//////////////////////////////////按地址向CH452送数据.
void shjz_ch452(unsigned int ldata,unsigned int hdata)
{ unsigned int i;
for(i=0;i<8;i++)
{ dclk=0;
if(ldata&0x0001) din=1;
else din=0;
dclk=1;
ldata=ldata>>1;
}
for(i=0;i<4;i++)
{dclk=0;
if(hdata&0x0001) din=1;
else din=0;
dclk=1;
hdata=hdata>>1;
}
load=0;
load=1;
}
////////////////////////////////////////CH452初始化
ch452_init()
{ shjz_ch452(0x0001,0x0002);
shjz_ch452(0x0023,0x0004);
shjz_ch452(0x0080,0x0005);
}
/////////////////////////////////////////读键值并返回.
unsigned int readkey(void)
{unsigned int key=0,i,com=0x0700;
for(i=0;i<6;i++)
{ if(com&0x01) din=1;
else din=0;
dclk=0;
dclk=1;
com>>=1;
}
load=0;
load=1;
key=key|dout;
dclk=1;
dclk=0;
for(i=0;i<6;i++)
{ key<<=1;
key=key|dout;
dclk=1;
dclk=0;
}
key=key&0x007f;
return(key);
}
/////////////////////////////////////////数据显示
void disp1(unsigned int data )
{unsigned int i,a[8]={0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf};
unsigned int data1;
ch452_init();
for(i=2;i<4;i++)
{
data1=data%10;
shjz_ch452(data1,a[i]);
data=data/10;
if(data==0) break;
}
shjz_ch452(0x0d,0x09);
shjz_ch452(0x0b,0x08);
}
void disp2(unsigned int data)
{unsigned int i,data1;
unsigned int a[8]={0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf};
//b[8]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89};
//显示0.,1.,2.,3.,4. 9.
ch452_init();
for(i=4;i<7;i++)
{data1=data%10;
shjz_ch452(data1,a[i]);
data=data/10;
}
shjz_ch452((0x80|data),0xf);//在第1个数码管上显示0.
}
////////////////////////////////////////////AD转换
void AD(void)
{ unsigned int i,buff;
float tem;
*P_ADC_MUX_Ctrl= C_ADC_CH1;
*P_ADC_Ctrl= C_ADCE;
buff=*P_ADC_LINEIN_Data;//开始转换
while(!(*P_ADC_MUX_Ctrl&0x8000));
buff=*P_ADC_LINEIN_Data;
*P_ADC_Ctrl=0x0002;//关AD转换
tem=buff*3.3/0xffc0;
x1=(unsigned int)(tem*1000);
disp2(x1);
}
////////////////////////////////////////////////
void key1(void)
{ unsigned int i;
disp1(10);
*P_DAC1=0x25a0;
for(i=0;i<1000;i++);
for(i=0;i<1000;i++);
}
void key2(void)
{ unsigned int i;
a=a+6;
b=b+0x0bc0;
if(a>58) a=10 ,b=0x25a0;
disp1(a);
*P_DAC1=b;
for(i=0;i<1000;i++);
for(i=0;i<1000;i++);
}
void key3(void)
{ unsigned int i;
a=a-6;
b=b-0x0bc0;
if(a<10) a=58,b=0x7fa;
disp1(a);
*P_DAC1=b;
for(i=0;i<1000;i++);
for(i=0;i<1000;i++);
}
void key4(void)
{unsigned int i;
AD();
for(i=0;i<1000;i++);
for(i=0;i<1000;i++);
}
////////////////////////////////////////////////
void IRQ3(void)__attribute__((ISR));
void IRQ3(void)
{
if(*P_INT_Ctrl&C_IRQ3_EXT2)
{
shjz_ch452(0x0,0x7);
key = readkey();
switch(key)
{case 0x0040:key1();break;
case 0x0041:key2();break;
case 0x0042:key3();break;
case 0x0043:key4();break;
/* case 0x0044:key5();break;
case 0x0045:key6();break;
case 0x0046:key7();break;
case 0x0047:key8();break;
case 0x0048:key9();break;
case 0x0049:key10();break;
case 0x004a:key11();break;
case 0x004b:key12();break;
case 0x004c:key13();break;
case 0x004d:key14();break;
case 0x004e:key15();break;
case 0x004f:key16();break;*/
default:break;
}
*P_INT_Clear=C_IRQ3_EXT2;
}
else if(*P_INT_Ctrl&C_IRQ3_EXT1)
*P_INT_Clear=C_IRQ3_EXT1;
else
*P_INT_Clear=C_IRQ3_KEY;
}
main()
{ hardware();
ch452_init();
shjz_ch452(0x0d,0x09);
shjz_ch452(0x0b,0x08);
shjz_ch452(0x00,0x0a);
shjz_ch452(0x00,0x0b);
*P_DAC1=0x0bc0;
*P_DAC_Ctrl=C_DA1_Direct ;
while(1)
*P_Watchdog_Clear=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -