首页资源分类嵌入式处理器其它 > 基于protuse简单计算器设计

基于protuse简单计算器设计

已有 445025个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:简单计算器protuse

    分    享:

    文档简介

    基于protuse的单片机简单计算器设计

    文档预览

     课程论文 题 目: 简单计算器设计 课程名称: 基于89C51Proteus 学生姓名: 熊中天 学生学号: 1113010139 系 别: 电气信息工程学院 专 业: 自动化 年 级: 2012级 任课教师: 电气信息工程学院制 2013年10月 基于AT89C51单片机的简单计算器 学生: 指导老师: 电气信息工程学院自动化专业 本次课程设计是以AT89C51单片机为核心实现一个简单的计算器,它的结构简单,外部主要由3*4独立键盘和一个LCD显示屏构成。内部由一块AT89C51单片机构成,通过软件编程可实现加、减、乘、除以及清除结果的运算。 简单计算器的电路包括三个部分:LCD1602电路、键盘扫描电路、单片机微控制电路。 1:关键芯片的介绍 (1):LMO16L显示器 LCD显示器,它是利用液晶经过处理后能改变光线的传递方向的特性实现信息的显示。液晶显示器按功能分为三类:笔段式液晶显示器、字符型液晶显示器、图像点阵式液晶显示器。前两种可以显示数字、字符和符号等,而图形点阵式液晶显示器还可以显示汉字和任意图行,达到图文并茂的效果,本次实验采用LM016L显示器。 LM016L采用标准的14脚接口,其中: 第1脚:VSS为电源地; 第2脚:VDD接5V电源正极; 第4脚:RS为寄存器选择,高电平为1时选择数据寄存器、低电平0时选择指令寄存器; 表一 RS RW 操作说明 0 0 写入指令寄存器(清除屏幕) 0 1 读busyflag(DB7),以及读取位址计数器(DB0~BD6)值 1 0 写入数据寄存器(显示各字型等) 1 1 从数据寄存器读取数据 第5脚:RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作; 第6脚:E端为使能端; 第7~14脚:D0~D7为8位双向数据端。 (2):键盘 键盘是由若干个按键组成,是向系统提供操作人员的干预命令及数据的接口设备。在单片机应用系统中,为了控制系统的工作状态,以及相系统中输入数据时,键盘是不可缺少的输入设备,它是实现人机对话的纽带。键盘按其结构分为编码键盘和非编码键盘两种方式。 编码键盘——通过硬件方法产生键码,能自动识别按下的键,并产生键码值,以并行或串行的方式发送给CPU,接口简单,速度快,但硬件电路复杂。非编码键盘——通过软件的方法产生键码,不需要专用硬件,结构简单,成本低,但速度不如编码键盘。 2:硬件电路设计 本设计外围电路大致可分为四部分 1. 振荡电路; 2. 复位电路; 3. 键盘电路; 4. 显示电路; (1):振荡电路设计 振荡电路如图1所示 图1 图中X1分别接单片机的19和18号脚。时钟有内部电路产生,定时器件为石晶体和电容组成的并联谐振回路,电容C1、C2的取1Pf,X1的取值为12MHz。 (2):复位电路设计 复位电路如图2所示. 图2 图中的RST接单片机的9号脚,当按下按钮按下去时单片机复位。其中电阻R2为1KΩ,电容C3为电解性电容取值为16V/22UF。Vcc接5V电压。 (3):键盘电路设计 键盘电路如图3所示 图3 本实验中键盘电路设计采用4*4行列矩阵式键盘,以P3.0~P3.3作为行线,以P3.4~P3.7作为列线。P3.0行线上的键盘表示“7”“8”“9”“/”,P3.1行线上的键盘表示“4”“5”“6”“*”,P3.2行线上的键盘表示“1”“2”“3”“-”,P3.3行线上的键盘表示“ON/C”“0”“=”“+”。 (4):显示电路设计 显示电路如图4所示 图4 本实验采用LM016L液晶显示器来显示输出数据。通过D0~D7引脚向LCD写指令或写数据以使LCD实现不同的功能或显示相应数据。 3:软件设计    主程序图如下图一所示; 4:Proteus仿真结果与分析 (1):取a等于4,b等于4,加法运算得c等于8; (2):取a等于4,b等于4,乘法运算得c等于16; 图6 图7 附录 #include //头文件 #define uint unsigned int // #define uchar unsigned char sbit lcden=P2^3; //定义引脚 sbit rs=P2^4; sbit rw=P2^0; sbit busy=P0^7; char i,j,temp,num,num_1; long a,b,c; //a,第一个数 b,第二个数 c,得数 float a_c,b_c; uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号 uchar code table[]={ 7,8,9,0, 4,5,6,0, 1,2,3,0, 0,0,0,0}; uchar code table1[]={ 7,8,9,0x2f-0x30, 4,5,6,0x2a-0x30, 1,2,3,0x2d-0x30, 0x01-0x30,0,0x3d-0x30,0x2b-0x30}; void delay(uchar z) // 延迟函数 { uchar y; for(z;z>0;z--) for(y=0;y<110;y++); } void check() // 判断忙或空闲 { do{ P0=0xFF; rs=0; //指令 rw=1; //读 lcden=0; //禁止读写 delay(1); //等待,液晶显示器处理数据 lcden=1; //允许读写 }while(busy==1); //判断是否为空闲,1为忙,0为空闲 } void write_com(uchar com) // 写指令函数 { P0=com; //com指令付给P0口 rs=0; rw=0; lcden=0; check(); lcden=1; } void write_date(uchar date) // 写数据函数 { P0=date; rs=1; rw=0; lcden=0; check(); lcden=1; } void init() //初始化 { num=-1; lcden=1; //使能信号为高电平 write_com(0x38); //8位,2行 write_com(0x0c); //显示开,光标关,不闪烁*/ write_com(0x06); //增量方式不移位 显竟獗暌贫 柚? write_com(0x80); //检测忙信号 write_com(0x01); //显示开,光标关,不闪烁 num_1=0; i=0; j=0; a=0; //第一个参与运算的数 b=0; //第二个参与运算的数 c=0; flag=0; //flag表示是否有符号键按下, fuhao=0;} // fuhao表征按下的是哪个符号

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。