📄 zg60.c
字号:
#include "SPCE061V004.H"
#include "unSPMACRO.h"
#define uchar unsigned char
#define uint unsigned int
#define Qdshj 200
#define ljshj 8
#define Ref 2 //参考电压2伏
static int Address[10] = {0x3f00, 0x8600, 0xdb00, 0xcf00, 0xe600, 0xed00, 0x7d00, 0x8700, 0xff00, 0xef00};
//共阴接法'0''1''2''3''4''5''6''7''8''9'的代码
void delay(void);
void delaylong(void);
void keyprocess1(void);
void keyprocess2(void);
uchar keyflag;
static uchar keyswitch=1,keyvalue,flag,counter=0,shi=0,bai=0,dat=0,biao;
void key()///////////////////判断按键////////////////////
{ static uchar keycounter;
*P_IOA_Data|=0xff00;
keyvalue=*P_IOA_Data;
keyvalue=~keyvalue;
keyvalue=keyvalue&0xff00;
if(!keyvalue)
{
keycounter=0;
keyflag=0;
return;
}
if(keyflag)//////////////////判断是否已经按下,假如已经按下则跳出ket()
{
keycounter++;
if(Qdshj==keycounter)
{
keycounter-=ljshj;
keyprocess();
}
else
{return;}
}
else
{
delay();
*P_IOA_Data=*P_IOA_Data|0xff00;
keyvalue=*P_IOA_Data;
keyvalue=~keyvalue;
keyvalue=keyvalue&0xff00;
if(!keyvalue)
{
keycounter=0;
keyflag=0;
return;
}
keyflag=1;
keyprocess();
}
}
void keyprocess() ////////////////按键处理///////////////
{
switch(keyvalue)
{
case 0x0100: /////////////////单步加一键
counter++;
biao=0x3f00;
if(counter>9)
{counter=0;
shi++;}
if(shi>9)
{shi=0;}
break;
case 0x0200://///////////////////单步减一键
counter--;
biao=0x3f00;
if(counter==0xffff)
{counter=9;
shi--;}
if(shi==0xffff)
{shi=9;}
break;
case 0x0400:///////////////////开扫描
//flag=1;
INT_IRQ();
break;
case 0x8000:///////////////关扫描
// flag=0;
INT_OFF();
break;
case 0x1000: //设定个位数值预置值
counter++;
biao=0x7100;
if(counter>9)
{counter=0;}
break;
case 0x0800: ///十位预置值
shi++;
biao=0x7100;
if(shi>9)
{shi=0;}
break;
default : break;
}
delay();
}
////////////////////中断服务程序//////////////////////////////
void IRQ5(void) __attribute__ ((ISR));
void IRQ5(void){
counter++;
if(counter>9)
{shi++;
counter=0;}
*P_INT_Clear=C_IRQ5_2Hz;
}
///////////////////////////////////////////////////////////
void delay()
{
int j=100;
do{j=j-1;}while(j>1);
}
void delaylong()
{
int i=20000;
do{i=i-1;}while(i>1);
}
void main(void)
{
unsigned int i;
i=dat;
*P_IOA_Attrib = 0x0000; //初始化IOA0~IOA15端口
*P_IOA_Dir = 0x00ff;
*P_IOA_Data = 0xffff;
*P_IOB_Attrib = 0xffff; //初始化IOB0~IOB1端口
*P_IOB_Dir = 0xffff;
*P_IOB_Data = 0x3f0e;
*P_INT_Ctrl=C_IRQ5_2Hz;//Setup interrupt
INT_OFF();
// for(;;)
// {
key();
/* switch(flag)////////////////扫描判断/////////
{
case 1:
counter++;
if(counter>9)
{counter=0;
shi++;}
if(shi>9)
{shi=0;}
delaylong();
delaylong();
break;
case 0:
break;
default: break;
}*/
//////////////////////////////////////////
dat=shi*10+counter;
*P_IOB_Data=Address[counter];
*P_IOB_Data|=0x0008;
delay();
*P_IOB_Data=Address[shi];
*P_IOB_Data|=0x0004;
delay();
*P_IOB_Data=biao;
*P_IOB_Data|=0x0001;
delay();
*P_IOB_Data=dat<<8;
*P_IOB_Data|=0x0040;
delay();
/*DAC()
{*/
// __asm("int off"); //disable interrupt
*P_DAC_Ctrl=C_DA1_Direct; //Latch to extect directly
if(i!=dat)
*P_DAC1=dat*700
; //output 实现精度为0.001V
//}
*P_Watchdog_Clear = 0x0001;
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -