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

📄 main.c

📁 基于51的计算器,在周立功实验箱上测试通过,是单片机课程设计题
💻 C
字号:
//*********************************************
//	作者:龙海
//	单位:四海农科所
//	功能:实现计算器功能
//
//
//*********************************************
#include <reg52.h>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char code tab[4][4] = {{1,2,3,13},{4,5,6,14},{7,8,9,15},{10,11,12,16}};
unsigned char code disbcode[]={0x04,0x08,0x10,0x20};
unsigned char buf[]={0,10,10,10};
unsigned int show=0;
unsigned int dat1=0;
unsigned int dat2=0;
unsigned int sum=0;
unsigned char wx=0;
unsigned char fuhao=0;
sbit clk = P0^0;
sbit din = P0^1;

	
		//***********************************
		//延时10毫秒;
		//***********************************
		 void delay()
		 {
		 	unsigned int i = 7000;
			while(i!=0)
				i--;
		 } 

		 //**********************************
		 //	 键盘扫描程序
		 //
		 //**********************************

		 char kbscan(void)
		 {
		 	unsigned char hang,lie,key;
			if(P2!=0xf0)
			{
				delay();
				if(P2!=0xf0)
				{
					switch(P2&0xf0)
					{
						case 0x70:hang = 0;break;
						case 0xb0:hang = 1;break;
						case 0xd0:hang = 2;break;
						case 0xe0:hang = 3;break;
					}
					P2 = 0x0f;
					switch(P2&0x0f)
					{
						case 0x07:lie = 0;break;
						case 0x0b:lie = 1;break;
						case 0x0d:lie = 2;break;
						case 0x0e:lie = 3;break;
					}
					P2 = 0xf0;
					while(P2 != 0xf0);
					key = tab[hang][lie];
				}	
			}
			else 
				key = 0;
			return(key);
		}

		 //***********************************
		 //	向164发送数据
		 //
		 //***********************************
		 void send(unsigned char da)
		{
			unsigned char temp,i;
			clk=0;
			for(i=0;i<8;i++)
			{
				temp = da;
				if((temp&(0x80>>i))!=0)
					din=1;
				else din=0;
					clk=1;
				clk=0;
			}
		}
		//**************************************
		// 2毫秒定时中断
		//**************************************

		void time0(void) interrupt 1
		{
			TH0 = 0xec;
			TL0 = 0x78;
			P0 = 0x00;
			send(dispcode[buf[wx]]);
			P0 = disbcode[wx];
			wx++;
			if(wx==4)
				wx=0;
			buf[0]=show%10;
			buf[1]=show%100/10;
			buf[2]=show%1000/100;
			buf[3]=show/1000;
			if(show<10)
				buf[1]=10;
			if(show<100)
				buf[2]=10;
			if(show<1000)
				buf[3]=10;

					
		}

		//*********************************
		//
		//
		//*********************************
		main()
		{
			unsigned char cnt=0;
			P0 = 0x00;
			P2 = 0xf0;
			TCON = 0x00;
			TMOD = 0x01;
			TH0 = 0xec;
			TL0 = 0x78;
			IE = 0x82;
			TR0 = 1;   
			
			while(1)   
			{
				cnt = kbscan();				
				if(12<cnt&&cnt<17)
				{					
					if(fuhao == 0)
					{
						fuhao = cnt;
					}
					else
					{						
						switch(fuhao)
						{
							case 13: sum=dat1+dat2;break;
							case 14: sum=dat1-dat2;break;
							case 15: sum=dat1*dat2;break;
							case 16: sum=dat1/dat2;break;
						}
						show=sum;
						dat1=sum;
						dat2=0;
						sum =0;
						fuhao=cnt;
					}
					cnt=0;
				}
				else if(0<cnt&&cnt<11)
				{
					if(fuhao==0)
					{	
						dat1=dat1*10+(cnt-1);
						show=dat1;
					}
					else
					{
						dat2=dat2*10+(cnt-1);
						show=dat2;
					}
					cnt=0;	
				}
				else if(cnt==11)
				{
					dat1=0;
					dat2=0;
					sum=0;
					fuhao=0;
					cnt=0;
					show=0;
				}
			 	else if(cnt==12)
				{
					switch(fuhao)
					{
						case 13: sum=dat1+dat2;break;
						case 14: sum=dat1-dat2;break;
						case 15: sum=dat1*dat2;break;
						case 16: sum=dat1/dat2;break;
					}
					cnt=0;
					show=sum;
				}
				else cnt=0;		 
			}	 
			
		}

⌨️ 快捷键说明

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