资源简介
矩阵键盘有数字键、加、减、乘、除、等于、清屏键。通过输入数字和运算符号进行简单计算,按下等于键将计 算的值输出到数码管显示(最大显示8位),计算结果超过8位则输出符号“-”。清屏键用于结束此次运算并清除数码管显示。(计算值-32768~32767)

代码片段和文件信息
/**************************************************
项目名称:矩阵键盘简易计算器
作 者:Horse
日 期:2020/4/7
项目功能:矩阵键盘有数字键、加、减、乘、除、等于、清屏键。
通过输入数字和运算符号进行简单计算,按下等于键将计
算的值输出到数码管显示(最大显示8位),计算结果
超过8位则输出符号“-”。清屏键用于结束此次运算并
清除数码管显示。(计算值-32768~32767)
**************************************************/
#include “reg52.h“
typedef unsigned char u8;
typedef unsigned int u16;//对数据类型进行声明定义
#define GPIO_DIG P0
#define GPIO_KEY P1
sbit Dula=P2^6;
sbit Wela=P2^7;//定义锁存使能端口
u8 KeyValueKey_num;//定义KeyValue变量和Key_num存放按键值
u8 Flag_num_keypress=0;//定义数字按键
u8 Flag_cal=0;//定义运算标志位
u8 code Table_wei[]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f};//数码管的位选
u8 code Table_duan[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f
0x770x7c0x390x5e0x790x710x000x40};// 显示段码值0~F和符号‘ ‘、‘-‘
u8 Table_display[8]={1616161616161616};//显示数组
/**************************************************
函数名称:Delay(u16 i)
函数作用:延时
函数输入:u16类型的参数i
函数输出:无
作 者:Horse
**************************************************/
void Delay(u16 i)
{
while(i--);
}
/**************************************************
函数名称:char* itoa(int numchar* strint radix)
函数作用:把整型数转换成字符串
函数输入:num:要转换的整数 str:转换后的字符串 radix:转换进制(281016进制)
函数输出:转换后的字符串
作 者:Horse
**************************************************/
char* itoa(int numchar* strint radix)
{
char temp; //临时变量,交换两个值时用到
char index[]=“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ“; //索引表
unsigned unum; //存放要转换的整数的绝对值转换的整数可能是负数
int i=0jk; //i用来指示设置字符串相应位,转换之后i其实就是字符串的长度;
//转换后顺序是逆序的,有正负的情况,k用来指示调整顺序的开始
//位置;j用来指示调整顺序时的交换。
//获取要转换的整数的绝对值
if(radix==10&&num<0)//要转换成十进制数并且是负数
{
unum=(unsigned)-num;//将num的绝对值赋给unum
str[i++]=‘-‘;//在字符串最前面设置为‘-‘号,并且索引加1
}
else
unum=(unsigned)num;//若是num为正,直接赋值给unum
//转换部分,注意转换后是逆序的
do
{
str[i++]=index[unum%(unsigned)radix];//取unum的最后一位,并设置为str对应位,指示索引加1
unum/=radix;//unum去掉最后一位
}while(unum);//直至unum为0退出循环
str[i]=‘\0‘;//在字符串最后添加‘\0‘字符,c语言字符串以‘\0‘结束。
//将顺序调整过来
if(str[0]==‘-‘)
k=1;//如果是负数,符号不用调整,从符号后面开始调整
else
k=0;//不是负数,全部都要调整
for(j=k;j<=(i-1)/2;j++)//头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1
{
temp=str[j];//头部赋值给临时变量
str[j]=str[i-1+k-j];//尾部赋值给头部
str[i-1+k-j]=temp;//将临时变量的值(其实就是之前的头部值)赋给尾部
}
return str;//返回转换后的字符串
}
/**************************************************
函数名称:Key_scan()
函数作用:按键扫描
函数输入:无
函数输出:无
作 者:Horse
**************************************************/
void Key_scan()
{
u8 a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Delay(1000);//延时大约10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0x0f;
switch(GPIO_KEY)
{
case(0x07): KeyValue=0;break;
case(0x0b): KeyValue=1;break;
case(0x0d): KeyValue=2;break;
case(0x0e): KeyValue=3;break;
}
//测试行
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0xe0): KeyValue=KeyValue;break;
case(0xd0): KeyValue=KeyValue+4;break;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 23711 2020-04-07 21:12 矩阵键盘简易计算器\Backup Of 矩阵键盘简易计算器.pdsbak
文件 1851 2020-03-04 19:37 矩阵键盘简易计算器\Backup Of矩阵键盘简易计算器.pdsbak
文件 23698 2020-04-08 16:03 矩阵键盘简易计算器\Last Loaded 矩阵键盘简易计算器.pdsbak
文件 23703 2020-04-08 16:10 矩阵键盘简易计算器\矩阵键盘简易计算器.pdsprj
文件 2199 2020-04-08 16:10 矩阵键盘简易计算器\矩阵键盘简易计算器.pdsprj.LAPTOP-RLDCULQ1.hp.workspace
文件 9627 2020-04-08 16:07 矩阵键盘简易计算器\程序\main.c
文件 22785 2020-04-08 16:08 矩阵键盘简易计算器\程序\main.LST
文件 16101 2020-04-08 16:08 矩阵键盘简易计算器\程序\main.OBJ
文件 13147 2020-04-08 16:08 矩阵键盘简易计算器\程序\template
文件 1006 2020-04-08 16:08 矩阵键盘简易计算器\程序\template.build_log.htm
文件 6602 2020-04-08 16:08 矩阵键盘简易计算器\程序\template.hex
文件 29 2020-04-08 16:08 矩阵键盘简易计算器\程序\template.lnp
文件 17688 2020-04-08 16:08 矩阵键盘简易计算器\程序\template.M51
文件 474 2018-03-19 17:20 矩阵键盘简易计算器\程序\template.plg
....... 138645 2020-04-08 16:10 矩阵键盘简易计算器\程序\template.uvgui.hp
文件 5320 2020-04-04 14:09 矩阵键盘简易计算器\程序\template.uvopt
文件 13847 2020-03-04 19:16 矩阵键盘简易计算器\程序\template.uvproj
文件 0 2018-03-19 17:18 矩阵键盘简易计算器\程序\template_uvproj.bak
文件 3934 2020-04-07 21:35 矩阵键盘简易计算器\简易计算器.png
目录 0 2020-04-08 16:10 矩阵键盘简易计算器\程序
目录 0 2020-04-08 16:10 矩阵键盘简易计算器
----------- --------- ---------- ----- ----
324367 21
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
评论
共有 条评论