【单片机期中测试】5.LCD1602实现简单计算器

该程序通过C语言实现了与1602液晶显示器的交互,并结合4*4矩阵键盘进行输入操作。程序中包含了按键扫描、液晶初始化、延时函数等关键模块,支持基本的加减乘除运算。当用户在矩阵键盘上选择数字和运算符后,液晶屏会显示运算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

main.c如下

#include<reg52.h>
#include"1602.h"
#include"delay.h"
#define uc unsigned char
uc a=0,b=0,c=0,d=0,h=0,l=0,m=0,flag=0,s;     //a,b:两项;c:+-*/; d:运算结果
void delay(uc c1)
{  uc a1,b1;
	for(;c1>0;c1--)
		for(a1=38;a1>0;a1--)
			for(b1=130;b1>0;b1--);
} 
void main()
{

 LCD_Init();           //初始化液晶
 DelayMs(20);          //延时有助于稳定
 LCD_Clear();          //清屏

  	while(1)
	{
		P1=0x0F;
		if(P1!=0x0F)
		   {
		    
			P1=0x0F; 
			switch(P1)	// 行判断
			{
				case 0x0E: h=0;break;				
				case 0x0D: h=1;break;				
				case 0x0B: h=2;break;				
				case 0x07: h=3;break;				
				 
			}
		   
		P1=0xF0;			 
			switch(P1)	 // 列判断
			{
				case 0xE0: l=0;break;				
				case 0xD0: l=1;break;				
				case 0xB0: l=2;break;				
				case 0x70: l=3;break;	
			}		  
		m=h*4+l;

		if(m>=0&&m<=9)
		{		
				if(flag==0)
				{
					LCD_Clear();          //清屏
					LCD_Write_Com(0x80) ;
					a=m;
					LCD_Write_Data(a+'0') ;
				
				}
				else	              
				{	LCD_Write_Com(0x83) ;
					b=m;
					LCD_Write_Data(b+'0') ;
			
				}        
		}
		if(m>9&&m<14)
		{
			flag=1;
			c=m;
				LCD_Write_Com(0x82) ;
				switch(m)
				{
				case 10:s=0x2B;break;
				case 11:s=0x2D;break;
				case 12:s=0x2A;break;
			    case 13:s=0x2F;break;
				}
				LCD_Write_Data(s) ;
			
			
		}
		if(m==15) 
		{
         a=0,b=0,c=0,d=0,flag=0;
		   LCD_Write_String(0,0,"                ");
			 LCD_Write_String(0,1,"        ");
		 }
		if(m==14)
		{ 	 
			switch(c)
			{
				case 10:d=a+b;break;
				case 11:if(a>b) d=a-b; else d=b-a;break;
				case 12:d=a*b;break;
				case 13:d=a/b;break;
			}
			LCD_Write_Com(0xc0) ;
		   	LCD_Write_Data('=');
			LCD_Write_Data(d/10+'0') ;
			LCD_Write_Data(d%10+'0') ;
				c=0,flag=0;		 	
		}
		delay(1);
		P1=0xf0;
		while(P1!=0xf0)
		{
			delay(1);
			P1=0xf0;		
		}
		delay(1);
		}
	  }	
}

如果需要 1602.c 和 delay.c 的话可问老师

接线:
LCD1602数据线接P0
其他按照LCD1602.c的引脚定义连接
4*4矩阵键盘接P1(注意正反)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为梦而生~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值