加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的计算器【3位,8255,数码管】(仿真)

16小时前
288
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

1、能实现三位数的加减乘除。

2、键盘输入计算数据,数码管显示输入值。

3、使用8255扩展接线驱动数码管和键盘。

define PA XBYTE[0x70ff]//定义8255端口
#define PB XBYTE[0x71ff]
#define PC XBYTE[0x72ff]
#define PD XBYTE[0x73ff]

unsigned int a=0,b=0; //输入
unsigned char fuhao=0;//符号
unsigned int c=0;//结果
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
unsigned char disp[]={0,0,0,0,0,0,0,0};

void delay(unsigned int i)//延时
{
	while(i--);
}
unsigned char key=0;
unsigned char key_scan()//按键检测
{
unsigned char i,j,k=0;
i=0;
j=0;
PD=0X81;
PC=0x0f;
k=PC;
if(k!=0x0f) //检测有无按下
{
 switch(k)//检测行
 {
  case 0x0e:i=3;break;
  case 0x0d:i=2;break;
  case 0x0b:i=1;break;
  case 0x07:i=0;
 }
 PD=0X88;
 PC=0xf0;
 k=PC;
 switch(k)//检测列
 {
  case 0xe0:j=13;break;
  case 0xd0:j=9;break;
  case 0xb0:j=5;break;
  case 0x70:j=1;
 }
}
  if(key!=i+j)
  {
  	key=i+j;
	return key;
  }
  else
  	return 0;
}

void main()//主函数
{
	unsigned char i;
	unsigned int m=0;
	PD=0x80;
	while(1)
	{
		//显示
		if(fuhao<5)
		{
		PA=0;
		PB=0XFE;
		PA=smgduan[a%1000/100];
		delay(100);

		PA=0;
		PB=0XFD;
		PA=smgduan[a%100/10];
		delay(100);

		PA=0;
		PB=0XFB;
		PA=smgduan[a%10];
		delay(100);

		PA=0;
		PB=0XF7;
		switch(fuhao)//符号
		{
			case 1:PA=0x01;break;
			case 2:PA=0x40;break;
			case 3:PA=0x08;break;
			case 4:PA=0x80;break;
			default:PA=0;
		}
		delay(100);

		PA=0;
		PB=0XEF;
		PA=smgduan[b%1000/100];
		delay(100);

		PA=0;
		PB=0XDF;
		PA=smgduan[b%100/10];
		delay(100);

		PA=0;
		PB=0XBF;
		PA=smgduan[b%10];
		delay(100);
		}
		else//显示结果
		{
			PA=0;
			PB=0XEF;
			PA=smgduan[c%1000/100];
			delay(100);

			PA=0;
			PB=0XDF;
			PA=smgduan[c%100/10];
			delay(100);

			PA=0;
			PB=0XBF;
			PA=smgduan[c%10];
			delay(100);
		}
		//==================================================
		i=key_scan();//检测
		if((i>0)&&(i<11))//输入数值
  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱