资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
単课设报告木福建工程学院软件学院题目班级名学号物联网2班简单的整形计算器指导老师:日 期: 2013年 12月 24日目录1 摘要 32 设计要求 32.1 功能需求 32.2 设计要求 33 硬件设计及描述 错误!未定义书签。3.1 总体描述 错误!未定义书签。3.2 系统总体框图 43.3 Proteus 电路图错误!未定义书签。3.4 各部分硬件介绍 54 软件设计流程及描述 错误!未定义书签。4.1 程序流程图 错误!未定义书签。4.2 函数模块及功能 错误!未定义书签。5 功能实现(功能介绍+照片) 86 心得体会 97 源程序 91摘要通过本课程设计使学生进一步巩固单片机原理与技术的基本概念、理论,分 析问题的基本方法;增强学生的软件编程实现能力和解决实际问题的能力,使学 生能有效的将理论和实际紧密结合,拓展学生在工程实践方面的专业知识和相关 技能。2 设计要求分别对键盘输入检测模块;LCD显示模块;算术运算模块;并用Visio画系统 方框图,keil与protues仿真分析其结果。2.1 功能需求现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数 值显示;(3)加、减、乘、除四则运算。针对上述功能,计算器软件程序要完成以下模块的设计:(1)键盘输入检测 模块;(2) LCD显示模块;(3)算术运算模块。2.2 设计要求本系统选用AT89C51单片机为主控机。通过扩展必要的外围接口电路,实现 对计算器的设计,具体设计如下:(1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分 析后,最后采用LCD显示数据和结果。(2)采用键盘输入方式,键盘包括数字键(09)、符号键(+、-、X、F)、 清除键(onc)和等号键( = ),故只需要16个按键即可。(3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过CD显示出 来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次 键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结 果。3、主体设计部分:3.1 系统总体框图图 3.1 系统总体框图3.2、算术运算程序流程图:图 3.2 算术运算程序流程图3.3、系统总流程图:开始图3.3系统总流程图参数初始化1r一的值”一1F根据运算符进 行相应的运算把数值给a和b根据运算符和 值进行运算彳 结果打数 导出 3.1f把结果显示在液晶1602 中判断是否清屏4、各部分硬件介绍(一)、总体硬件设计:本设计选用AT89C51单片机为主控单元;显示部分:采用LCD静态显示;按键部分:采用4*4键盘;用LCD1602为4*4键盘扫描IC,读取输入的键值。 总体设计效果如下图:uETT-OnUl图4.41总体设计效果如下图(二人LCD显示模块:令字或写数据以使LCD实现不同的功能或显示相应数据。(三)排阻作用第一个是为了加大传感器驱动电流。第二个只有在用P0口时才需要排阻作为上拉电阻(四)键盘接口电路:计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方 式,在这种情况下,编程会很简单,但是会占用大量的E/O 口资源,因此在很多 情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O线 作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一 个按键。这样键盘上按键的个数就为4X4个。这种行列式键盘结构能有效地提高 单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图1所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。图4.44矩阵键盘模块(五) AT89C51简介AT89C51 是一种带 4K 字节 FLASH 存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位 微处理器,俗称 单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片 机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL 高密度非易失 存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚 相兼容。由于将多功能8位CPU和闪烁 存储器组合在单个芯片中,ATMEL的 AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单 片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。口D 1器s:s? 口 口口 口口口PDE1 KTALZF_ST也.主F 1 J33P 2FIT占Fit.石PjLSTp 1F 1 .TPEHRLEZ1FaJZIRXDF3-irrxD PHlfTTD P3Z41WTTF3.nn 也吏工Lps.rrTTErm m 口 1 z 3 + 七_F F HNZH m2 产 p 尸pEL D.图 4.45 AT89C51功能说明:外部中断0调用函数,计时开始并实时显示定时计数器跳变的时间及按键的判断。5、功能实现(功能介绍+照片)5.1、加法功能:5.2、减法功能:22-11=11图5.2减法功能5.3、乘法功能:11*22=242 o UJ二UJ Q LLl IZ)cilojm 寸 ggr- CL Cf LU QQDDOQOQ图5.3乘法功能5.4、除法功能:图5.4除法功能6 、心得体会通过本次课程设计让我更加了解了单片机各模块的功能,包括 数码管显示,4*4 键盘,独立按键。实验过程让我更加了解并进一 步掌握了中断,定时计数,4*4 键盘输入等程序编写。以及掌握了通 过 Proteus 构造自己所需要的外围电路,进行仿真实验。通过此次课 程设计,初步掌握了使单片机多个模块进行工作的原理和方法。7 源程序#include#include#define int8 unsigned char#define int16 unsigned intsbit EN=P2人3; /LCD 定义引脚sbit RS=P2A4;sbit RW=P2A0;sbit busy=P0A7;/矩阵键盘键值表char code num=7,8,9,*,4,5,6,/,1,2,3,-,c,0,=,+;char code num1=0,1,2,3,4,5,6,7,8,9;static char ckey; /当前按键字符long a,b;前后两数char flag;/是否有符号键按下char f;判断按下的是什么符号键(+,-,*,/)long result;/ 运算结果static intl6 c=0;字符显示位置void delay_ms(int8 z); / 延迟函数void wait_busy(); 忙等待void write_cmd(int8 cmd);/ 写指令void write_data(int8 dat);/ 写数据void Initialize_LCD(); /LCDl602 初始化void LCD_ShowString(int8 r, int8 c,int8 *str); /在指定位置显示字符串void keyboard。;/键盘按键扫描void digit_a();/加减乘除处理void digit_b();/a和b运算的结果在1602上显示void digit_c();把输入的数存入到a和b/名称:lcd1602液晶屏控制与显示程序/延时void delay_ms(int8 z) / 延迟函数int8 y;for(z;z0;z-)for(y=0;y110;y+);/忙等待void wait_busy() doP0=0XFF;RS=0;RW=1;EN=0;delay_ms(1);EN=1;while(busy=1);/写指令/void write_cmd(int8 cmd)P0=cmd;RS=0;RW=0;EN=0;wait_busy();EN=1;/ /写数据/ void write_data(int8 dat) P0=dat;RS=1;RW=0;EN=0;wait_busy();EN=1;/ /LCD1602 初始化/ void Initialize_LCD()write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x80);write_cmd(0x01);a=0;b=0;flag=0;result=0;c=0;ckey=0;/ /在指定位置显示字符串/ void LCD_ShowString(int8 r, int8 c,int8 *str) int8 i=0;code int8 DDRAM=0X80,0XC0; write_cmd(DDRAMr | c);for(i=0;stri & i16;i+) write_data(stri);for(;i16;i+) write_data( );/键盘按键扫描/void keyboard()int16 h_code,l_code,key_code;P3=0xf0;h_code=P3;h_code=h_code&0xf0;delay_ms(200);P3=0x0f;l_code=P3;l_code=l_code&0x0f;delay_ms(200);key_code=h_code|l_code;if(key_code!=0xFF)switch(key_code)case 0xee: LCD_ShowString(0,c+,7);ckey=num0;digit_c(); break; /输入字符7case 0xde: LCD_ShowString(0,c+,8);ckey=num1;digit_c(); break;/输入字符8case 0xbe: LCD_ShowString(0,c+,9
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号