proteus矩阵按键计算机,单片机实现4*4矩阵式键盘计算器源程序+Proteus仿真

#include

#include

#include

unsigned char n;

float idata a,b;                                                                //两个操作数

void key_scan(void);                                        //键盘扫描

void init();                                                        //LCD初始化

void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);//字符串显示

void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);     //字符显示

void write_com(unsigned char com);

sbit lcden=P2^7;                                                        //读写控制输入端

sbit rw=P2^6;                                                                //读写控制端

sbit rs=P2^5;                                                                //指令与数据选择

sbit busy=P0^7;                                                        //LCD忙碌标识

void delay(unsigned int i)                                        //延时程序

{

unsigned int n;

for(n=0;n<=i;n++);

}

void main()

{

char idata temp[16];                                                //临时存储区

char i=0,j=0,fuhao;                                                //i,j分别为temp与LCD的数据指针

bit flag=0,dh=0,fh=0,xsd=0;

//flag=0:操作数1,flag=1:操作数2;dh=1时表示已输入等号;fh负号;xsd小数点

init();                                                                        //小数点

LCD_dsp_string(4,0,"Welcome!");

do

{

key_scan();

} while(n==17);                                                        //等待按键

write_com(0x01);                                                        //清屏

while(1)

{

key_scan();                                                        //等待按键

if((dh==1)&(flag==1)&(n!=17))                //一次计算完毕后执行

{

write_com(0x01);                                        //清屏

LCD_dsp_

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的计算器C语言程序,可以在51单片机实现,同时也可以在Proteus仿真中运行: ```c #include <reg51.h> // 51单片机头文件 sbit ADD=P3^0; // 加法按键 sbit SUB=P3^1; // 减法按键 sbit MUL=P3^2; // 乘法按键 sbit DIV=P3^3; // 除法按键 sbit CLR=P3^4; // 清零按键 sbit OK=P3^5; // 确认按键 unsigned char num1,num2; // 两个操作数 unsigned char op; // 操作符 unsigned char result; // 运算结果 void delay(unsigned int i) // 延时函数 { unsigned int j,k; for(j=i;j>0;j--) { for(k=110;k>0;k--); } } void display(unsigned char dat) // 数码管显示函数 { P2=dat; // 将数码管的值赋给P2口 delay(5); // 延时一段时间,使数码管显示刷新 } void main() { while(1) { if(ADD==0) // 加法按键按下 { op='+'; delay(10); // 延时去抖 while(ADD==0); // 等待按键释放 } else if(SUB==0) // 减法按键按下 { op='-'; delay(10); // 延时去抖 while(SUB==0); // 等待按键释放 } else if(MUL==0) // 乘法按键按下 { op='*'; delay(10); // 延时去抖 while(MUL==0); // 等待按键释放 } else if(DIV==0) // 除法按键按下 { op='/'; delay(10); // 延时去抖 while(DIV==0); // 等待按键释放 } else if(CLR==0) // 清零按键按下 { num1=0; num2=0; op=0; result=0; display(0xff); // 数码管全灭 delay(10); // 延时去抖 while(CLR==0); // 等待按键释放 } else if(OK==0) // 确认按键按下 { switch(op) // 根据操作符进行运算 { case '+': result=num1+num2; break; case '-': result=num1-num2; break; case '*': result=num1*num2; break; case '/': result=num1/num2; break; } num1=0; num2=0; op=0; display(result); // 显示运算结果 delay(10); // 延时去抖 while(OK==0); // 等待按键释放 } else // 数字键按下 { if(op==0) // 如果操作符为0,表示正在输入第一个操作数 { num1=num1*10+P1; // 将输入的数字累加到num1中 display(num1); // 显示num1 delay(10); // 延时去抖 while(P1!=0xff); // 等待按键释放 } else // 否则表示正在输入第二个操作数 { num2=num2*10+P1; // 将输入的数字累加到num2中 display(num2); // 显示num2 delay(10); // 延时去抖 while(P1!=0xff); // 等待按键释放 } } } } ``` 这个程序实现了简单的加减乘除计算,同时也有清零和确认功能。在程序中,通过检测按键的状态来进行相应的操作。同时,也使用了延时函数和数码管显示函数来实现计算器的基本功能。 在Proteus仿真中,可以使用51单片机模拟器来运行这个程序。将程序烧录到单片机中,然后将数码管和按键连接到相应的引脚上即可。在仿真中,可以通过按下按键来模拟输入数字和操作符,然后观察数码管的显示结果来验证计算器的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值