项目14—利用LCD1602实现计算器
LCD1602在项目11中已经介绍过,这里不再做过多解释。
我们利用矩阵按键,AT89C51单片机,以及排阻和LCD1602.
仿真图如下:
我们将过程排在LCD1602的第一行,结果排在第二行。
程序我们分为三部分
main.c 主函数
#include<reg51.h>
#include<lcd1602.c>
#include<key.c>
void main()
{lcd1602_init();lcd1602_clear();while(1){display();}
}
key.c 定义按键
#define uchar unsigned char
uchar k_scan[] = {0xef,0xbf,0xdf,0x7f};
uchar k_all[] =
{ ~0x82,~0x11,~0x12,~0x14,~0x21,~0x22,~0x24,~0x41,~0x42,~0x44,~0x88,~0x48,~0x28, ~0x18,~0x81,~0x84
};
uchar mode,m1,m,k,n,k1,k2,n4;
uchar n1,n2;
int n3;
unsigned char key()
{unsigned char i,j;for(i = 0;i <= 3;i++) {P1 = k_scan[i]; if(P1 != k_scan[i]){delay(15000);if(P1 != k_scan[i]){for(j = 0;j <= 15;j++){if(P1 == k_all[j]){return j;}}}}while(P1 != k_scan[i]); }return 88;
}
void display()
{k = key();if(k <= 9){ if(mode == 0)//输入第一个数{ if(m1 == 0){n1 = k;goto_xy(1,0);display_num0(n1);}if(m1 == 1){k1 = k ;goto_xy(1,1);display_num0(k);} }if(mode == 1)//输入第二个数{if(m1 == 0){n2 = k;goto_xy(1,8);display_num0(n2);}if(m1 == 1){k2 = k ;goto_xy(1,9);display_num0(k);} }m1++;if(m1 >= 2)m1 = 0;k = 88;}if(k == 10)//加键{goto_xy(1,5);display_string("+");mode = 1;m1 = 0;n = 1;k = 88;}if(k == 11)//减键{goto_xy(1,5);display_string("-");mode = 1;m1 = 0;n = 2;k = 88;}if(k == 12)//乘{goto_xy(1,5);display_string("*");mode = 1;m1 = 0;n = 3; k = 88;}if(k == 13)//除{goto_xy(1,5);display_string("/");mode = 1;m1 = 0;n = 4;k = 88;} if(k == 14) //清零键{n1 = 0;n2 = 0;n = 0;mode = 0;m1 = 0;k = 88;lcd1602_clear();} if(k == 15)//等于{if(k1 != 0)n1 = n1*10+k1;else n1 = n1;if(k2 != 0)n2 = n2*10+k2;else n2 = n2;goto_xy(2,0);display_string("=");if(n == 1){n3 = n1 + n2;goto_xy(2,1);if(n3 < 10)display_num0(n3);if((n3 >= 10)&&(n3 < 100))display_num1(n3);if(n3 >= 100){display_num0(n3 / 100);display_num1(n3 % 100);}}if(n == 2){n3 = n1 - n2;goto_xy(2,1);if(n1 >= n2){if(n3 < 10)display_num0(n3);if(n3 >= 10)display_num1(n3);}else if(n1 < n2){n3 = 0 - n3;display_string("-");if(n3 < 10)display_num0(n3);if(n3 >= 10)display_num1(n3);}}if(n == 3){n3 = n1 * n2;goto_xy(2,1);if(n3 < 10)display_num0(n3);if((n3 >= 10)&&(n3 < 100))display_num1(n3);if((n3 >= 100)&&(n3 < 1000)){display_num0(n3 / 100);display_num1(n3 % 100);}if((n3 >= 1000)&&(n3 < 10000)){display_num1(n3 / 100);display_num1(n3 % 100);}}if(n == 4){n3 = n1 / n2;n4 = n1 % n2;if(n4 != 0){display_string("NAN");}else{if(n2 == 0){display_string("Nan");}else{if(n3 < 10)display_num0(n3);if(n3 >= 10)display_num1(n3);} }}k = 88; }
}
LCD1602.C 显示
void display_num1(uchar y)
{ write_data((y / 10) + 0x30);write_data((y % 10) + 0x30);
}
void display_num0(uchar x)
{write_data(x + 0x30);
}
void goto_xy(uchar x,uchar y)
{if(x == 1)write_command(0x80 + y);if(x == 2)write_command(0x80 + 0x40 + y);
}
就可以得到一个计算器。
运行结果如下:
项目14—利用LCD1602实现计算器相关推荐
- 如何在我们项目中利用开源的图表(js chart)
最近觉得应该把自己在技术上的一些心得记录在博客里面跟大家分享,一起讨论,一起成长! 这篇随笔主要为介绍chart在项目中的运用,因为在我们看到一些开源的chart时候,是使用纯js 或者建立在一些插件 ...
- 如何充分利用开源项目_5个技巧:在开源项目中利用以用户为中心的设计
如何充分利用开源项目 当我刚开始在开放技术学院 (OTI)工作时,我始终受到以下问题的挑战:"为什么UX设计师为什么要在开源组织工作?" 在我看来,事实是几乎所有设计和可用性工作本 ...
- python神奇时钟项目_怎么在Python项目中利用Pygame绘制一个时钟
怎么在Python项目中利用Pygame绘制一个时钟 发布时间:2020-11-30 14:24:30 来源:亿速云 阅读:54 作者:Leah 怎么在Python项目中利用Pygame绘制一个时钟? ...
- php base64怎么加密,怎么在php项目中利用base64进行加密解密
怎么在php项目中利用base64进行加密解密 发布时间:2020-12-19 14:55:49 来源:亿速云 阅读:76 作者:Leah 怎么在php项目中利用base64进行加密解密?很多新手对此 ...
- java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序
在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...
- spring mvc项目中利用freemarker生成自定义标签
2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...
- IOS开发基础之汽车品牌项目-14
IOS开发基础之汽车品牌项目-14 // // ViewController.m // 16-汽车品牌展示02 // // Created by 鲁军 on 2021/2/3. //#import & ...
- 利用LCD1602显示超声波测距
利用LCD1602显示超声波测距 介绍 一.需要的器件 二.原理 工程代码 一. LCD1602 二.超声波测距及主程序 运行图 介绍 一.需要的器件 51单片机:任意一款都可以,我这里使用的是STC ...
- Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能
Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能 需求:在pdf中鼠标滑动选中一段文字,将选中文字展示到input框中(pdf在iframe中) 完成效果: 关于pdf的引用:我是直接 ...
最新文章
- Google智能生态链的演进路径
- 满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...
- ubuntu server 下使用subversion的总结【原创】
- jQuery学习之路(1)-选择器
- LDA(latent dirichlet allocation)的应用
- python手写lfw数据集转pair.txt形式
- C#——SqlParameter的使用方法及注意事项
- arduino超声波测距接线图详细_Arduino:超声波传感器+测距
- 杨三角超强组织能力11-12讲
- 会议室预定小程序[叮当会议]
- C++俄罗斯方块源码(Qt版)
- 性能服务器主板开机进bios,台式机华硕主板开机就进入bios?
- matlab第二章实训总结,matlab实训小结
- java静态网页_【屌炸天源码分享】《企业网站html静态网页模板》
- Python Re正则表达式
- 陈天桥向私服取经 盛大免费放手一搏
- rk3568适配温控风扇
- 软件测试(开发)的V模型都包括哪些阶段,具体都做了些什么?
- 主线剧情-番外02-设备树详解
- SfN2019中与植入式肢体运动脑机接口有关的成果