
支持最大八位的无符号长整型数值计算
#包括《iom16v.h》
#包括《macros.h》
//#包括《stdio.h》
#定义乌恰尔无符号字符
#定义uint无符号整数
#定义乌龙无符号长整型
#定义EA SREG |=位(7)
uchar temp,old,key_turn,flag=0;
乌龙数据=0,datB=0;
const uchar wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };
const uchar tab[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x 00 };
extern uchar dat[8]={0,0,0,0,0,0 };
extern uchar dat_right[]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a };
无效延迟(单位z)
{
while(z-);
}
空显示(乌恰尔z)
{
乌恰尔一世;
while(z -)
for(I=0;我《8;我)
{
PORTB=wela[I];
PORTD=tab[dat _ right[I]];
延迟(30);
PORTB=0XFF
}
}
void clean_junk()
{
uchar i,p=0;
for(I=0;我《8;我)
{
dat _ right[I]=0x0a;
}
for(I=0;我《8;我)
{
if(dat[I]》0)p=1;
if(p)dat _ right[I]=dat[I];
}
}
空的删除()
{
乌恰尔一世;
for(I=0;我《8;我)
{
dat[I]=0;
}
clean _ junk();
}
void disan_he()
{
乌龙一世;
I=dat[0]* 1e 7 dat[1]* 1 E6 dat[2]* 1 E5 dat[3]* 1 E4 dat[4]* 1 E3 dat[5]* 1 E2 dat[6]* 1e 1 dat[7];
if(flag)datB=I;
else datA=I;
flag=1;
delete();
}
void disan_fen()
{
dat[0]=datA/1e 7;
dat[1]=data000000/1000000;
dat[2]=data00000/100000;
dat[3]=data0000/10000;
dat[4]=data000/1000;
dat[5]=data00/100;
dat[6]=data0/10;
dat[7]=data;
flag=0;
}
无效移动()
{
乌恰尔一世;
if(temp)0 temp《0x0b》
{
for(I=0;我《8;我)
{
dat[I]=dat[I 1];
}
if(temp==0x0a){ dat[0]=0;temp=0;}
dat[7]=temp;temp=0;
}
}
清空()
{
乌恰尔一世;
flag=0;
for(I=0;我《8;我)
{
dat[I]=0;
}
temp=0;
旧=0;
数据=0;
datB=0;
}
void disan()
{
如果(温度)0temp《0x11》开关(温度)
{
case0x0e:clean();打破;
案例0x0b:old=temp;temp=0;disan _ he();打破;
案例0x0c:old=temp;temp=0;disan _ he();打破;
案例0x0d:old=temp;temp=0;disan _ he();打破;
案例0x 10:old=temp;temp=0;disan _ he();打破;
案例0x0f:开关(旧)
{
case0x0b:if(flag)disan _ he();datA=datA/datB;旧=0;temp=0;disan _ fen();打破;
case0x0c:if(flag)disan _ he();数据=数据*数据旧=0;temp=0;disan _ fen();打破;
case0x0d:if(flag)disan _ he();datA=datA-datB;旧=0;temp=0;disan _ fen();打破;
案例0x 10:if(flag)disan _ he();数据=数据datB旧=0;temp=0;disan _ fen();打破;
默认值:temp=0;旧=0;打破;
}破;
默认值:move();temp=0;打破;
}
//disan _ fen();delete();
}
void diskey()
{
uchar i,n;
const uchar code[]={0xFE,0xFD,0xFB,0xf 7 };
if(temp==0x 00)for(I=0;我《4;我)
{
门户=代码[I];
temp=PINA;
if(~ temp0xf 0)I=6;
while(~PINA0xf0)显示(1);
PORTA=0xff
}
如果(温度)0x10开关(温度)
{
案例0x ee:temp=0x 07;打破;
案例0x de:temp=0x 08;打破;
案例0x be:temp=0x 09;打破;
案例0x7E:temp=0x0b;打破;
/////////////////////////
案例0x ed:temp=0x 04;打破;
案例0x DD:temp=0x 05;打破;
案例0x BD:temp=0x 06;打破;
案例0x7D:temp=0x0c;打破;
//////////////////////////
案例0xEB:temp=0x 01;打破;
案例0x db:temp=0x 02;打破;
案例0x bb:temp=0x 03;打破;
案例0x7B:temp=0x0d;打破;
////////////////////////
案例0xe 7:temp=0x0e;打破;
案例0xd 7:temp=0x0a;打破;
案例0xb 7:temp=0x0f;打破;
案例0x 77:temp=0x 10;打破;
/////////////////////////
默认值:temp=0x00打破;
}
disan();
}
void main()
{
MCU CSR |=1《JTD;//禁用jtag功能
MCU CSR |=1《JTD;//再次禁用jtag功能生效
DDRC=0x ff;
DDRB=0x ff;
DDRD=0x ff;
DDRA=0X0F;
while(1)
{
显示器(1);
diskey();
clean _ junk();
}
}









