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

📄 测试.c

📁 做的一个简易的计算器
💻 C
字号:
#include <reg51.h>


sbit P3_4=0xb4;
sbit P3_5=0xb5;
sbit P3_6=0xb6;
sbit P3_7=0xb7;

unsigned char flag_j,flag_i;
unsigned char i,j;					//键盘循环变量
unsigned char show_i,show_j;		//显示循环变量
unsigned char show_mid;
unsigned char show_temp;
unsigned char show_flag;
unsigned char show_key;				//显示区变量
unsigned int flag;					//连续+运算标志
unsigned char key;					//键盘标志
unsigned char count;				//运算法则标志
unsigned long num,num1,num2;		//运算中间变量
unsigned long long_num;	//显示传递值
unsigned long count1,count2;		//真正运算量
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,
                   			 0x92,0x82,0xF8,0x80,0x90};

void ScanKeys(void);				//键盘扫描模块
void Initial(void);					//初始化模块
void DealWith(void);				//运算模块
void DealWith_J(void);				//解决减法得负数问题

void main(void)
{
	Initial();
	while(1)
	{
		ScanKeys();
		if(show_flag==1)
		{
				show_temp=0x01;
				long_num=num;
			for(show_i=0;show_i<8;show_i++)
			{
				show_mid=long_num%10;
				if((flag_i==1)&&(flag_j==show_i))
				{
					P0=show_temp;
					P2=0xbf;					
				}
				else 
				{
					P0=show_temp;
					P2=table[show_mid];
				}
				long_num=long_num/10;
				for(show_j=0;show_j<30;show_j++)
				;
				show_temp=show_temp<<1;
			}
			show_flag=0;
	   	}
	}
}

void Initial(void)							//寄存器参变量等初始化
{
	num=00000000;
	flag_j=0;
	flag_i=0;
	num1=0;
	num2=0;
	count=0;
	count1=0;
	count2=0;
	flag=0;
	show_flag=0;
	TMOD=0x01;
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
	ET0=1;
	EA=1;
	TR0=1;
}

void timer_0(void) interrupt 1				//1。5ms中断实现数码显示
{
	show_flag=1;
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
}

void DealWith(void)							//扫描结果运算处理
{
	if(count==1) 	
	{
		if(flag_i==1)
		{
			if(count1>count2)
			{
				num=count1-count2;
				DealWith_J();
			}
			else
			{
				num=count2-count1;
				flag_i=0;
			}
		}
		else 
			num=count1+count2;
	}
	if(count==2)
	{
		if(flag_i==1)
		{
			num=count1+count2;
			DealWith_J();
		}
		else
		{
			if(count1<count2)
			{
				num=count2-count1;
				DealWith_J();			
			}
			else
			num=count1-count2;
		}
	}
	if(count==3)
	{
		num=count1*count2;
		if(flag_i==1)
			DealWith_J();
	}
	if(count==4)
	{
		num=count1/count2;
		if(flag_i==1)
			DealWith_J();
	}
	if(num>=99999999)
		num=99999999;
	num1=0;
	num2=0;
	count1=num;
}

void DealWith_J(void)
{
	unsigned long dealwith_num;
	dealwith_num=num;
	flag_i=1;
	flag_j=0;
	for(;;)
	{
		dealwith_num/=10;
		flag_j++;
		if(dealwith_num==0)
		break;
	}
}

void ScanKeys(void)							//键盘扫描
{
	unsigned char temp;
	P3=0xff;
	P3_4=0;
	temp=P3;
	temp&=0x0f;
	if(temp!=0x0f)
	{
		for(i=0;i<5;i++)
			for(j=0;j<100;j++)
			;
		temp=P3;
		temp&=0x0f;
		if(temp!=0x0f)
		{
			switch(temp)
			{
				case 0x0e: key=7; break;
				case 0x0d: key=4; break;
				case 0x0b: key=1; break;
				case 0x07: key=10;break;
			}
		}
		temp=P3;
		
		if((key>0)&&(key<10))
		{
			if(count==0)
			{
				num1=num1+key;
				num=num1;
				count1=num;
				num1*=10;
			}
			if(count!=0)
			{
				num2=num2+key;
				num=num2;
				count2=num;
				num2*=10;
			}
		}
		if(key==10)
		{
			Initial();
		}
		temp&=0x0f;
		while(temp!=0x0f)
		{
			temp=P3;
			temp&=0x0f;
		}
	}

	P3=0xff;
	P3_5=0;
	temp=P3;
	temp&=0x0f;
	if(temp!=0x0f)
	{
		for(i=0;i<5;i++)
			for(j=0;j<100;j++)
			;
		temp=P3;
		temp&=0x0f;
		if(temp!=0x0f)
		{
			switch(temp)
			{
				case 0x0e: key=8; break;
				case 0x0d: key=5; break;
				case 0x0b: key=2; break;
				case 0x07: key=0; break;
			}
		}
		temp=P3;

		if((key>=0)&&(key<10))
		{
			if(count==0)
			{
				num1=num1+key;
				num=num1;
				count1=num;
				num1*=10;
			}
			if(count!=0)
			{
				num2=num2+key;
				num=num2;
				count2=num;
				num2*=10;
			}
		}
		temp&=0x0f;
		while(temp!=0x0f)
		{
			temp=P3;
			temp&=0x0f;
		}
	}


	P3=0xff;
	P3_6=0;
	temp=P3;
	temp&=0x0f;
	if(temp!=0x0f)
	{
		for(i=0;i<5;i++)
			for(j=0;j<100;j++)
			;
		temp=P3;
		temp&=0x0f;
		if(temp!=0x0f)
		{
			switch(temp)
			{
				case 0x0e: key=9; break;
				case 0x0d: key=6; break;
				case 0x0b: key=3; break;
				case 0x07: key=11;break;
			}
		}
		temp=P3;

		if((key>0)&&(key<10))
		{
			if(count==0)
			{
				num1=num1+key;
				num=num1;
				count1=num;
				num1*=10;
			}
			if(count!=0)
			{
				num2=num2+key;
				num=num2;
				count2=num;
				num2*=10;
			}
		}
		if(key==11)
		{
			flag=0;
			DealWith();
			count=0;
			P1=table[count];
		}
		temp&=0x0f;
		while(temp!=0x0f)
		{
			temp=P3;
			temp&=0x0f;
		}
	}

	P3=0xff;
	P3_7=0;
	temp=P3;
	temp&=0x0f;
	if(temp!=0x0f)
	{
		for(i=0;i<5;i++)
			for(j=0;j<100;j++)
			;
		temp=P3;
		temp&=0x0f;
		if(temp!=0x0f)
		{
			switch(temp)
			{
				case 0x0e: key=12;break;
				case 0x0d: key=13;break;
				case 0x0b: key=14;break;
				case 0x07: key=15;break;
			}
		}
		temp=P3;

		if(key==12)	
		{
			flag++;
			if(flag>1)
				DealWith();
			count=4;
		}
		if(key==13)	
		{
			flag++;
			if(flag>1)
				DealWith();
			count=3;
		}
		if(key==14)
	 	{			
			flag++;
			if(flag>1)
				DealWith();
			count=2;
		}
		if(key==15)	
		{
			flag++;
			if(flag>1) 
				DealWith();
			count=1;
		}
		P1=table[count];
		temp&=0x0f;
		while(temp!=0x0f)
		{
			temp=P3;
			temp&=0x0f;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -