📄 project2.c
字号:
#include "SPCE061V004.H"
#include "IO_bit.h"
#define dout IOB3
#define dclk IOB2
#define din IOB1
#define load IOB0
#define n0 IOA2
#define n1 IOA3
#define n2 IOA4
#define n3 IOA5
#define n4 IOA6
#define n5 IOA7
#define n6 IOA8
#define n7 IOA9
#define n8 IOA10
#define n9 IOA11
#define a0 IOB8
#define a1 IOB9
#define a2 IOB10
#define a3 IOB11
#define a4 IOB12
#define a5 IOB13
unsigned int n;
unsigned int key;
unsigned int data;
int a;
unsigned int x;
/////////////////////////////////////////读键值并返回.
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);
}
//////////////////////////////////按地址向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_init()
{ shjz_ch452(0x0001,0x0002);
shjz_ch452(0x0023,0x0004);
shjz_ch452(0x0080,0x0005);
}
///////////////////////////////////////////////////////////
void disp1(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=0;i<3;i++)
{data1=data%10;
data=data/10;
if(i==1) shjz_ch452(data1|0x80,a[1]); //在第2个数码管上显示0.
else shjz_ch452(data1,a[i]);
}
}
////////////////////////////////////////////////////////
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<6;i++)
{data1=data%10;
shjz_ch452(data1,a[i]);
data=data/10;
}shjz_ch452((0x80|data),0xe);//在第2个数码管上显示0.
}
////////////////////////////////////////////////////////////////////////
void AD(void)
{ float tem;
unsigned int buff;
buff=*P_ADC_LINEIN_Data;//开始转换
while(!(*P_ADC_MUX_Ctrl&0x8000));
buff=*P_ADC_LINEIN_Data;
tem=buff*3.3/0xffc0;
x=(unsigned int)(tem*100);
disp2(x);
}
//////////////////////////////////////////////////////////
////////////////////////////////////////////////////
void key1(void)
{
a=28,n=46;
data=150;
ch452_init();
disp1(150);
*P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2); //并行送N值
*P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8); //并行送A值
}
void key2(void) ///步进加100KHZ
{ unsigned int i;
for(i=0;i<10000;i++);
{ *P_Watchdog_Clear=1;
for(i=0;i<10000;i++);}
a=a+10;
data++;
if(a>31) {a=a-32;n=n+1;}
if((a==22)&&(n==109)) {n=28;a=46;data=150;}
disp1(data); //显示频率
*P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2); //并行送N值
*P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8); //并行送A值
}
void key3(void) ////步进减100KHZ
{ unsigned int i;
for(i=0;i<10000;i++);
{ *P_Watchdog_Clear=1;
for(i=0;i<10000;i++);}
a=a-10;
data--;
if(a<0) {a=a+32;n=n-1;}
if((a==18)&&(n==46)) {n=109;a=12;data=350;}
disp1(data); //显示频率
*P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2); //并行送N值
*P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8); //并行送A值
}
void key4(void)
{ AD();
}
void key5(void) ////步进加1MHZ
{ unsigned int i;
for(i=0;i<10000;i++);
{ *P_Watchdog_Clear=1;
for(i=0;i<10000;i++);}
a=a+4;
n=n+3;
data=data+10;
if(a>31) {a=a-32;n=n+1;}
if((a==16)&&(n==112)) {n=46;a=28;data=150;}
disp1(data); //显示频率
*P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2); //并行送N值
*P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8); //并行送A值
}
void key6(void) ////步进减1MHZ
{ unsigned int i;
for(i=0;i<10000;i++);
{ *P_Watchdog_Clear=1;
for(i=0;i<10000;i++);}
a=a-4;
n=n-3;
data=data-10;
if(a<0) {a=a+32;n=n-1;}
if((a==24)&&(n==43)) {n=109;a=12;data=350;}
disp1(data); //显示频率
*P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2); //并行送N值
*P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8); //并行送A值
}
////////////////////////////////////////////////////
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(0x80,0x9);
shjz_ch452(0x00,0x8);
//disp2(0);
*P_ADC_MUX_Ctrl=C_ADC_CH2; //LINE_IN-------IOA0
*P_ADC_Ctrl= C_ADCE; //
while(1)
{
*P_Watchdog_Clear=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -