⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jisuanqi.c

📁 51单片机的c语言编程 基于avr amtel16控制数码管
💻 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 + -