📄 jisuanji.txt
字号:
#define P_IOA_Data (volatile unsigned int *)0x7000
#define P_IOA_Dir (volatile unsigned int *)0x7002
#define P_IOA_Attrib (volatile unsigned int *)0x7003 // 属性
#define P_IOB_Data (volatile unsigned int *)0x7005
#define P_IOB_Dir (volatile unsigned int *)0x7007
#define P_IOB_Attrib (volatile unsigned int *)0x7008 // 属性
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
void Delay(void);
unsigned int anjian=0xffff,iob,key,r3,i,key,key1,address,add_data=0x0000;
unsigned int a[16]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x0077,0x007c,0x0039,0x005e,0x0079,0x0071};
unsigned int b[4]={0xfff7,0xfffb,0xfffd,0xfffe} ;
unsigned int buffer[5]={0x0073,0x0000,0x0000,0x0000,0x0000};
unsigned int data[5]={0x0000,0x0000,0x0000,0x0000,0x0000};
unsigned int add[3]={0x0000};
unsigned int flag=0x0000;
int main(void)
{
*P_IOA_Dir=0xffff; //设置IOA口为同相低电平输出
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0x003f;
*P_IOB_Dir=0x000f; //设置IOB口为同相低电平输出4\5为悬浮输入
*P_IOB_Attrib=0x000f;
*P_IOB_Data=0x0000;
i=0;
while(1)
{
disp();
clear();
getkey();
write();
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void disp(void)
{ for(iob=0;iob<4;iob++)
{
*P_IOB_Data=b[iob] ;
switch(iob)
{
case 0: *P_IOA_Data=buffer[0];Delay();break;
case 1: *P_IOA_Data=buffer[1];Delay();break;
case 2: *P_IOA_Data=buffer[2];Delay();break;
case 3: *P_IOA_Data=buffer[3];Delay();break;
default:break;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
clear()//////////////////////////////////清屏子程序,
{
for(iob=0;iob<4;iob++)
{
*P_IOB_Data=b[iob]; //扫描4个led端口,显示黑屏代码
*P_IOA_Data=0x0000;
*P_Watchdog_Clear=0x0001;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
int getkey( )
{//1
for(iob=0;iob<4;iob++)
{//2 *
*P_IOB_Data=b[iob] ;
*P_Watchdog_Clear=0x0001;
while((*P_IOB_Data&0x0030)^0x0030)
{//3
key =*P_IOB_Data;
Delay1(); //延时15ms
key1=*P_IOB_Data;
if(key1 ==key)
{//4
key=key&0x0030;
key1=key1&0x0030;
b[iob]&=0x000f;
key1^=b[iob];
*P_Watchdog_Clear=0x0001;
switch(key1)
{//5
case 0x002e :anjian=0; break;
case 0x002d :anjian=1; break;
case 0x002b :anjian=2; break;
case 0x0027 :anjian=3; break;
case 0x001e :sure(); break;
case 0x001d :(flag=0x0003,buffer_data(),clear_data());break;
case 0x001b :(flag=0x0002,buffer_data(),clear_data());break;
case 0x0017 :(flag=0x0001,buffer_data(),clear_data());break;
default:anjian=0xffff; break;
}//5
}//4
}//3
}//2
}//1
//////////////////////////////////////////////////////////////////////////////////////////////////////
write()
{
if(anjian != 0xffff)
{///////////////////////////////////////////////////////////////////////////////////////////
data[0]=data[1];
data[1]=data[2];
data[2]=data[3];
data[3]=anjian; //扫描按键数据送往数据缓冲区
////////////////////////////////////////////////////////////
buffer[0]=a[data[0]];
buffer[1]=a[data[1]];
buffer[2]=a[data[2]];
buffer[3]=a[data[3]];//输出数据送到缓冲区
/////////////////////////////////////////////////////////////
address=(data[0]*16*16*16)+(data[1]*16*16)+(data[2]*16)+data[3];
}
anjian=0xffff;
*P_Watchdog_Clear=0x0001;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
void Delay1(void)
{
unsigned int uiCount;
for(uiCount=0;uiCount<3000;uiCount++)
{*P_Watchdog_Clear=0x0001;}//清看门狗操作
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void Delay(void)
{
unsigned int uiCount;
for(uiCount=0;uiCount < 100; uiCount++)
{*P_Watchdog_Clear=0x0001;}//清看门狗操作
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
void cancell()
{
buffer[3]=buffer[2];
buffer[2]=buffer[1];
buffer[1]=buffer[0];
buffer[0]=0x003f;//输出数据送到缓冲区
///////////////////////////////////////////////////////////////////////////////////////////
data[3]=data[2];
data[2]=data[1];
data[1]=data[0];
data[0]=0x0000; //扫描按键数据送往数据缓冲区
//////////////////////////////////////////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void sure()
{ unsigned int *i,j;
//////////////////////////////////////////////
switch(flag)
{ case 0x0001 :jia() ; break;
case 0x0002 :jian(); break;
case 0x0003 :chu(); break;
default:anjian=0xffff; break;
}
//////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//加法功能键子程序
jia(void)
{ buffer_data();
add[2]=add[0]+add[1];
updata(add[2]);
}
jian(void)
{ buffer_data();
add[2]=add[0]-add[1];
updata(add[2]);
}
chu(void)
{ buffer_data();
add[2]=add[0]/add[1];
updata(add[2]);
}
updata(unsigned int j)
{
data[3]=j%10;
j=j/10;
data[2]=j%10;
j=j/10;
data[1]=j%10;
j=j/10;
data[0]=j%10;
///////////////////////
buffer[0]=a[data[0]];
buffer[1]=a[data[1]];
buffer[2]=a[data[2]];
buffer[3]=a[data[3]];//
}
////////////////////////////
clear_data(void)
{
data[0]=0x0000;
data[1]=0x0000;
data[2]=0x0000;
data[3]=0x0000;
////////////////////////////////////////////////////////////
buffer[0]=a[data[0]];
buffer[1]=a[data[1]];
buffer[2]=a[data[2]];
buffer[3]=a[data[3]];
}
////////////////////////////
buffer_data(void)
{
add_data=(data[0]*10*10*10)+(data[1]*10*10)+(data[2]*10)+data[3];
add[0]=add[1];
add[1]=add_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -