📄 jisuanqi.c
字号:
#include <avr/io.h>
#include <naoki/delay.h>
unsigned char outb=0x00;
int a,b,c,d,flag1,flag2,ch=0;
unsigned int display[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff};
unsigned char scan_key()
{
unsigned char input=-1;
unsigned char temp,temp1,temp2;
PORTA=0x0f;
DDRA=0xf0;
delay_ms(50);
temp1=PINA;
PORTA=0xf0;
DDRA=0x0f;
delay_ms(50);
temp2=PINA;
temp=temp1|temp2;
switch(temp)
{
case 0xeb:input=0;break;//0
case 0x77:input=1;break;//1
case 0x7b:input=2;break;//2
case 0x7d:input=3;break;//3
case 0xb7:input=4;break;//4
case 0xbb:input=5;break;//5
case 0xbd:input=6;break;//6
case 0xd7:input=7;break;//7
case 0xdb:input=8;break;//8
case 0xdd:input=9;break;//9
case 0x7e:input=10;break;//A
case 0xbe:input=11;break;//B
case 0xde:input=12;break;//C
case 0xee:input=13;break;//D
case 0xe7:input=14;break;//*
case 0xed:input=15;break;//#
default:break;
}
return input;
}
void scan_print()
{
unsigned int mode=0;
unsigned char i;
for(i=0;i<255;i++)
{
switch(++mode)
{
case 1:
PORTC=0x01;
PORTB=display[a];
delay_ms(5);
break;
case 2:
if(outb==0x02)
{
PORTC=0x02;
PORTB=display[b];
delay_ms(50);
}
else
{
PORTC=0x01;
PORTB=display[a];
delay_ms(50);
}
break;
default:
mode=0;
break;
}
}
}
int main()
{
PORTA=0xf0;
DDRB=0xff;
DDRA=0x0f;
DDRC=0xff;
PORTC=0x01;
PORTB=display[0];
a=b=c=d=0;
flag1=flag2=0;
unsigned char key;
int n;
while(1)
{
scan_print();
key=scan_key();
if(key!=-1)
{
if(flag1&&!flag2&&key>=0&&key<=9)
{
b=a;
a=key;
flag2=1;
outb=0x02;
}
if(!flag1&&key>=0&&key<=9)
{
a=key;
flag1=1;
outb=0x00;
}
if(flag1&&(key==10||key==11))
{
ch=key;
c=b*10+a;
a=b=0;
flag1=flag2=0;
outb=0x00;
}
if(key==14)
{
a=b=c=d=0;
flag1=flag2=0;
ch=0;
outb=0x00;
}
if(flag1&&key==15&&ch)
{
d=b*10+a;
if(ch==10&&(c+d)<100&&(c+d)>-1)
{
a=(c+d)%10;
b=(int)(c+d)/10;
outb=b?0x02:0x00;
}
if(ch==11&&(c-d)<100&&(c-d)>-1)
{
a=(c-d)%10;
b=(int)(c-d)/10;
outb=b?0x02:0x00;
}
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -