题目要求:
1、根据开发板设计10以内的加法计算器,用LED数码管显示数字和计算结果。(必做)。
2、根据开发板设计100以内的计算器,用LED数码管显示数字和计算结果,要求可实现加法、减法、乘法和除法的整型运算(选作)。
备注:做了第2题可不做第1题
选做第2题.功能实现如附件视频所示。
/*根据题目要求,设计计算器,51单片机矩阵按键的S4,S8,S12,S16分别代表着+,-,*,/;而S13键表示为清零;S1,S2,S3代表着1,2,3;S5,S6,S7代表着4,5,6;S9,S10,S11代表着7,8,9。如下排列所示:
1 2 3 +
4 5 6 -
7 8 9 *
清零 0 = /
*/
#include<reg51.h>
typedef unsigned char u8; //对数据类型进行声明定义
typedef unsigned int u16;
sbit LSA=P2^2; //74HC138译码器数码管位选
sbit LSB=P2^3;
sbit LSC=P2^4;
#define GPIO_KEY P1
#define GPIO_DIG P0
u16 KeyValue; //用来存放读取到的键值
u16 keyflag,i; //用来判断按下的数字还是运算符或清空键
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40}; //显示0~F、负号‘-’
u16 wei[8]={0}; //用来存放每一位数码管数字的数组
void delay(u16 i)//延时函数
{
while(i--);
}
void display() //扫描显示动态数码管
{
LSA=0; LSB=0; LSC=0; GPIO_DIG=smgduan[wei[7]];delay(50); GPIO_DIG=0x00; //消隐
LSA=1; LSB=0; LSC=0; GPIO_DIG=smgduan[wei[6]];delay(50); GPIO_DIG=