单片机简易计算器课程设计

上传人:pu****.1 文档编号:505515492 上传时间:2024-01-31 格式:DOC 页数:19 大小:111KB
返回 下载 相关 举报
单片机简易计算器课程设计_第1页
第1页 / 共19页
单片机简易计算器课程设计_第2页
第2页 / 共19页
单片机简易计算器课程设计_第3页
第3页 / 共19页
单片机简易计算器课程设计_第4页
第4页 / 共19页
单片机简易计算器课程设计_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《单片机简易计算器课程设计》由会员分享,可在线阅读,更多相关《单片机简易计算器课程设计(19页珍藏版)》请在金锄头文库上搜索。

1、课 程 设 计题 目 名 称 简易计算器设计 课 程 名 称 单片机原理及应用 学 生 姓 名 班 级 学 号 2018年 6 月20日整理为word格式目录一 设计目的2二 总体设计及功能介绍2三 硬件仿真图3四 主程序流程图4五 程序源代码4六 课程设计体会17整理为word格式一 设计目的本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUES仿真。二 总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机,实现对计算器

2、的设计。具体设计及功能如下: 由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED显示数据和结果; 另外键盘包括数字键(09)、符号键(+、-、)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘; 执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。整理为word格式三 硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就

3、可以确定是哪个键被按下。整理为word格式四 主程序流程图 程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图五 程序源代码#include #include #include /* isdigit()函数 */#include /* atoi()函数 */#define uchar unsigned char#整理为word格式define uint unsigned intuchar operand19, operand29; /* 操作数 */uchar

4、 operator; /* 操作符 */void delay(uint);uchar keyscan();void disp(void);void buf(uint value);uint compute(uint va1,uint va2,uchar optor);uchar code table = 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff; /* 字符码表 */uchar dbuf8 = 10,10,10,10,10,10,10,10; /* 显示缓存 */* 延时函数 */ void delay(uint z)uin

5、t x,y;for(x=z;x0;x-) for(y=110;y0;y-);/* 键盘扫描程序 将按键转化为字符并作为输出 $,#分别表示清零键和没有键按下 */uchar keyscan() uchar skey; /* 按键值标记变量 */* 扫描键盘第1行 */ P1 = 0xfe; while(P1 & 0xf0) != 0xf0) /* 有按键按下 */ delay(3); /* 去抖动延时 */ while(P1 & 0xf0) != 0xf0) /* 仍有键按下 */ switch(P1) /* 识别按键并赋值 */ case 0xee: skey = 7; break; cas

6、e 0xde: skey = 8; break; case 0xbe: skey = 9; break; case 0x7e: skey = /; break; 整理为word格式default: skey = #; while(P1 & 0xf0) != 0xf0) /* 等待按键松开 */ ; /* 扫描键盘第2行 */ P1 = 0xfd; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) switch(P1) case 0xed: skey = 4; break; case 0xdd: skey = 5; bre

7、ak; case 0xbd: skey = 6; break; case 0x7d: skey = *; break; default: skey = #; while(P1 & 0xf0) != 0xf0) ; /* 扫描键盘第3行 */ P1 = 0xfb; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) 整理为word格式switch(P1) case 0xeb: skey = 1; break; case 0xdb: skey = 2; break; case 0xbb: skey = 3; break; ca

8、se 0x7b: skey = -; break; default: skey = #; while(P1 & 0xf0) != 0xf0) ; /* 扫描键盘第4行 */ P1 = 0xf7; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) switch(P1) case 0xe7: skey = $; break; case 0xd7: skey = 0; break; case 0xb7: skey = =; break; case 0x77: skey = +; break; default: skey = #

9、; while(P1 & 0xf0) != 0xf0) ; return skey;整理为word格式void main() uint value1, value2, value; /* 数值1,数值2,结果 */ uchar ckey, cut1 = 0, cut2 = 0; /* ckey键盘输入字符 */ uchar operator; /* 运算符 */ uchar i, bool = 0;init: /* goto语句定位标签 */ buf(0); /* 初始化 */ disp(); value = 0; cut1 = cut2 = 0; bool = 0; for(i = 0;i 9;i+) operand1i = 0; operand2i = 0; /* 初始化 */ w

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号