资源简介
矩阵键盘有数字键、加、减、乘、除、等于、清屏键。通过输入数字和运算符号进行简单计算,按下等于键将计 算的值输出到数码管显示(最大显示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
相关资源
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
- 基于51单片机的多通道数据采集范围控
- ADC0832ADC0809DAC0832三种芯片程序,c程序
- 基于51单片机的直流电机转速控制及显
- 高速公路快速放行提示系统
- 光敏电阻传感器模块4线制
- 基于AT89S52单片机简易计算器的设计
- 51单片机_DS1302时钟芯片_共阴数码管
- 基于51单片机的教室智能照明控制系统
- 基于单片机的智能低电阻测量仪
- 电动车智能充电桩全套
- 五路循迹智能小车
- 基于51单片机的交通灯设计
- 51 教室智能灯 控制系统
- 51单片机125Khz ID卡读卡程序
- 51单片机课程设计内含50多个课程设计
- 51单片机实现蜂鸣器的简易歌曲播放器
- 基于51单片机的智能十字路口交通灯系
- 51单片机编写的标准modbus协议通信模版
- SIM900A通过51单片机拨打电话程序
- at89c51单片机外文翻译
- CW2015 51单片机程序
- 基于51单片机的超声波测距技术实现含
- 基于51单片机射频密码锁设计门禁刷卡
- 基于51单片机的十字路口交通灯Protu
- 32x16LED汉子点阵显示屏
- 收发短信,短信控制LED51单片机例程
评论
共有 条评论