资源描述
.. -
单片机原理与应用技术
课程设计
基于51单片机的多功能计算器
院 系 :
机电工程学院
专业〔班级〕:
电子信息工程1班
XX:
学号:
20134081006
指导教师:
邵海龙
职称:
讲师
完成日期:
2015 年 9月22日
评定成绩:
关键词:单片机;液晶显示;计算器;
目 录
引言………………………………………………………………………………………….3
1 单片机及其应用……………………………………………………………………...3.
1.1单片机介绍………………………………………………………………………………3
1.2单片机的应用……………………………………………………………………………4
1.3 STC89C52单片机…………………………………………………………………………4
2 液晶屏LCD1602原理及应用…………………………………………………….... 5
2.1液晶屏LCD1602介绍及工作原理…………………....…………………………………..5
2.2 液晶屏LCD1602的功能及应用…………………………………………………………5
3 设计思路、仿真及调试……………………………………………………………...7
3.1设计方法…………………………………………………………………………………7
3.2硬件设计……………………………………………………………………. ………….7
复位电路……………………………………………………………………….....7
液晶屏LCD1602显示电路…...…………………………………………………8
4*4键盘的设计……………………………………………………………….....9
多功能计算器的总电路............................................10
3.3软件设计……………………………………………………………………………………10
3.4软件仿真…………………………………………………………………………………17
3.5硬件调试……………………………………………………………………..…………..18
4 完毕语…………………………………………………….. …………………………..18
辞…………………………………………………………..……………………………...18
参考文献………………………………………………………..………………………….19
1 单片机及其应用
1.1单片机介绍
单片机〔Microcontrollers〕是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能
1.2单片机的应用
STC89C52 是STC公司推出的一款超强抗干扰,加密性强,在线可编程,高速,低功耗CMOS 8位单片机。片含 8k bytes 的可反复擦写Flash只读程序存储器和256 bytes 的随机数据存储器〔RAM〕,器件采用STC公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容, 片置通用8位中央处理器 〔CPU〕和Flash存储单元, 功能强大的STC89C52单片机适合于许多较为复杂控制应用场合。
1.3 STC89C52单片机
3.2 STC89C52外部构造及特性
其外形封装有两种方式:双列直插式40脚封装〔DIP〕和方形44脚封装 〔PLCC〕,直插式40 脚封装〔DIP〕和外部总线构造如图2和图3所示:
图3.1 STC89C52引脚排列图3.2外部总线
STC89C52的 4 个 8 位I/O口的功能说明如下:
〔1〕P0口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1〞时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低 8 位地址/数据复用。在这种模式下,P0具有部上拉电阻。在flash 编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
〔2〕P1口:P1口是一个具有部上拉电阻的8位双向 I/O口,p1输出缓冲器能驱动4个TTL 逻辑电平。对P1端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入〔P1.0/T2〕和定时器/计数器 2 的触发输入〔P1.1/T2EX〕。在 flash 编程和校验时,P1口接收低8位地址字节。
〔3〕P2口:P2口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P2端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。在访问外部程序存储器或用 16 位地址读取外部数据存储器〔例如执行MOVX DPTR〕时,P2口送出高八位地址。在这种应用中,P2口使用很强的部上拉发送 1。在使用8 位地址〔如 MOVX RI〕访问外部数据存储器时,P2 口输出 P2 锁存器的容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。
〔4〕P3口:P3口是一个具有部上拉电阻的8位双向I/O口,p2 输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。在 flash 编程和校验时,P3 口也接收一些控制信号。P3 口亦作为AT89C52特殊功能〔第二功能〕使用,如下所示:
l P3.0 RXD(串行输入口)
l P3.1 TXD(串行输出口)
l P3.2 INTO(外部中断0 输入口)
l P3.3 INT1(外部中断 1 输入口)
l P3.4 TO(定时器 0 外部输入)
l P3.5 TI(定时器 1 外部输入)
l P3.6 WR(外部数据存储器写选通信号)
l P3.7(外部数据存储器读选通信号)
3.3 STC89C52部组成
STC89C52单片机在一块芯片中集成了 CPU、RAM、ROM、定时器/计数器、看门狗和多种功能的 I/O 口设备的等,相当于一台计算机所需要的根本功能部件。
STC89C52单片机包含的具体局部如下:
一个8 位 CPU。
一个片振荡器及时钟电路。
8KB Flash 程序存储器。
256 B RAM 数据存储器。
三个16 位定时器/计数器。
可寻址 64KB 的外部数据存储器和 64KB 的外部程序存储器空间的控制电路。 32 条可编程的 I/O线〔4组8 位并行 I/O端口〕。
一个可编程全双工串口通信。
8 个中断源、两个优先级嵌套中断构造。
STC89C52单片机的框图如图3.3所示,各功能部件由部总线连接在一起。
图3.3STC89C52单片机框图
2 液晶屏LCD1602原理及应用
2.1液晶屏LCD1602介绍
LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全一样的,因此HD44780写的控制程序可以很方便地应用于市面上大局部的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚)
2.2 液晶屏LCD1602的功能及应用
5.2.1 1602LCD液晶显示屏
1602LCD显示屏是一种工业字符型液晶,所谓1602是指显示的容为16*2,即可以显示两行,每行16个字符,目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全一样的,因此基于HD44780写的控制程序可以很方便地应用于市面上大局部的字符型液晶。1602液晶模块部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母“A〞的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A〞。
表5.1 管脚功能表
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源〔+5V〕
3
V0
液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高〔比照度过高时会产生“鬼影〞,使用时可以通过一个10K的电位器调整比照度〕。
4
RS
RS为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。
5
R/W
R/W为读写信号线,高电平(1)时进展读操作,低电平(0)时进展写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
底4位三态、 双向数据总线 0位〔最低位〕
8
DB1
底4位三态、 双向数据总线 1位
9
DB2
底4位三态、 双向数据总线 2位
10
DB3
底4位三态、 双向数据总线 3位
11
DB4
高4位三态、 双向数据总线 4位
12
DB5
高4位三态、 双向数据总线 5位
13
DB6
高4位三态、 双向数据总线 6位
14
DB7
高4位三态、 双向数据总线 7位〔最高位〕〔也是busy flag〕
15
BLA
背光电源正极
16
BLK
背光 电源负极
表5.2存放器选择控制表
RS
R/W
操作说明
0
0
写入指令存放器〔去除屏等〕
0
1
读busy flag〔DB7〕,以及读取位址计数器〔DB0~DB6〕值
1
0
写入数据存放器〔显示各字型等〕
1
1
从数据存放器读取数据
3 设计思路、仿真及调试
3.1设计方法
本电路设计采用STC89C51单片机为核心,利用晶振产生频率为1HZ的时钟脉冲信号,利用液晶屏LCD1602显示计算器,通过对STC89C51单片机的编程控制液晶屏LCD1602的显示。显示计算和简易计算的信息同在LCD1602.
3.2硬件设计
本系统以STC89C51单片机为核心,本系统选用12MHZ的晶振,使单片机有合理的运行速度。起振电容30pf对振荡器的频率上下,振荡器的稳定性和起振的快速性影响较适宜,复位电路为按键高电平复位。
为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一局部,复位电路的根本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延迟才撤销复位,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。当单片机的复位引脚出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。所以复位引脚的电容大一点没多大关系,顶多是复位时间长一点;但如果电容太小,高电平持续时间太短,那么单片机无常复位,就不能工作,电容通常取10UF或22UF,铝电解电容即可。
单片机的复位电路在刚接通电时,刚开场电容是没有电的,电容的电阻很低,通电后,5V的电源通过电阻给电解电容进展充电,电容两端的电会由0V慢慢的升到4V左右〔此时间很短一般小于0.3秒〕,正因为这样,复位脚由低电位升到高电位,引起了部电路的复位工作;当按下复位键时,电容两端放电,电容又回到0V了,于是又进展了一次复位工作。电路图如图5.1。
图5.1 复位电路
液晶屏LCD1602显示电路
其功能如下
多功能计算器的总电路............................................14
3.3软件设计
程序如下:
#include<reg51.h>
#define lcd1602_DATAPINS P0
#define uint unsigned int
#define uchar unsigned char
sbit lcd1602_E=P2^7;
sbit lcd1602_RS=P2^6;
sbit lcd1602_RW=P2^5;
uchar code digit[]={"0123456789+-x/=."};
uchar code key_code[]={0xd7,0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb,0x7e,0x7d,0x7b,0x77,0xb7,0xe7 };
uchar code str[]=" Input Data: ";
uchar key;
void delay1ms(uchar c) //误差 0us
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void lcdwrite(uchar )
{
lcd1602_E=0;
lcd1602_RS=0;
lcd1602_RW=0;
lcd1602_DATAPINS=;
delay1ms(1);
lcd1602_E=1;
delay1ms(5);
lcd1602_E=0;
}
void lcdwritedata(unsigned char dat)
{
lcd1602_E=0;
lcd1602_RS=1;
lcd1602_RW=0;
lcd1602_DATAPINS=dat;
delay1ms(1);
lcd1602_E=1;
delay1ms(5);
lcd1602_E=0;
}
void init()
{
lcdwrite(0x38);
lcdwrite(0x0c);
lcdwrite(0x06);
lcdwrite(0x01);
lcdwrite(0x80);
}
void key_scan()
{
uchar scan1,scan2,keycode,i;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0)
{ //判断是否按键
delay1ms(15); //延时消陡
scan1=P1;
if((P1&0xf0)!=0xf0)
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2;
}
for(i=0;i<16;i++)
{
if(keycode==key_code[i])
{ //查表得键值
key=i;
}
}
}
else{
P1=0xff; //P1口写1,输入状态
}
}
void main()
{
uchar i;
uchar x,y,sign=0;
uchar flag;
int a,b;
P1=0xff; //写1,读状态
delay1ms(15);
init();
lcdwrite(0x80);
for(i=0;i<16;i++)
{
lcdwritedata(str[i]);
delay1ms(10);
}
lcdwrite(0xc0);
delay1ms(5);
//lcdwritedata('0');
while(1)
{
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
delay1ms(15);
if((P1&0xf0)!=0xf0)
{
key_scan();
if(key<=9)
{
if(sign==0)
{
lcdwritedata(digit[key]);
if(x==0)
a=key;
if(x==1)
a=a*10+key;
if(x==2)
a=a*10+key;
x++;
}
else
{
lcdwritedata(digit[key]);
if(y==0)
b=key;
if(y==1)
b=b*10+key;
if(y==2)
b=b*10+key;
y++;
}
delay1ms(200);
}
if(key==15)
{
lcdwritedata(digit[key]);
delay1ms(200);
}
if((key==10)||(key==11)||(key==12)||(key==13)||(key==14))
{
if(key==10)
{
sign++;
flag=1;
lcdwritedata(digit[key]);
delay1ms(200);
}
else if(key==11)
{
sign++;
flag=2;
lcdwritedata(digit[key]);
delay1ms(200);
}
else if(key==12)
{
sign++;
flag=3;
lcdwritedata(digit[key]);
delay1ms(200);
}
else if(key==13)
{
sign++;
flag=4;
lcdwritedata(digit[key]);
delay1ms(200);
}
else if(key==14)
{
sign=0;
lcdwritedata(digit[key]);
delay1ms(200);
switch(flag)
{
case 1:a=a+b;break;
case 2:a=a-b;break;
case 3:a=a*b;break;
case 4:a=a/b;break;
}
if(a>0&&a<10)
{
lcdwritedata(digit[a%10]);
}
if(a>9&&a<100)
{
lcdwritedata(digit[a/10]);
lcdwritedata(digit[a%10]);
}
if(a>99&&a<1000)
{
lcdwritedata(digit[a/100]);
lcdwritedata(digit[a/10%10]);
lcdwritedata(digit[a%10]);
}
if(a>999&&a<10000)
{
lcdwritedata(digit[a/1000]);
lcdwritedata(digit[a%1000/100]);
lcdwritedata(digit[a%1000/10%10]);
lcdwritedata(digit[a%10]);
}
}
}
}
}
}
}
3.4软件仿真
在硬件设计完成后,利用软件进展仿真,以尽可能减少做板子的次数,这次我采用了protues软件进展仿真
如图多功能计算器的的显示
3.5硬件调试……………………………………………………………………..…………..16
4 完毕语
在用单片机实现多功能计算的设计中使用了STC89C51,LCD1602及其4*4键盘的使用,在设计过程中我通过在网上和图书馆查阅资料,收集了相关的单片机和液晶屏LCD1602显示方面的资料,通过这些资料的学习,我了解了单片机的根本构造和单片机在生活和生产中发挥的作用:液晶屏的原理和使用。本次课程设计完成的主要工作和任务如下:对设计方案的理论研究,单片机的合理选型,硬件电路的设计,元器件的焊接,软件的编写和调试,。通过设计多功能计算器的过程中,我掌握了单片机的根本原理及其各种应用,对他的各种硬件接口与软件设计方法有较深入的认识。
辞
首先要感学校给我提供了做这个系统的时机,感学校的各位领导和教师一直以来对我的教诲和帮助。
其次感教师,给我进展了很多的辅导,不仅在技术上给了我很大帮助,也在系统需求和设计方面给予了我很大帮助。教师的谆谆教诲,使我受益匪浅。教师屡次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。教师一丝不苟的作风,严谨的态度,踏踏实实的精神,不仅授我以文,而且教我做人,给以终生受益无穷之道。我对教师的感谢之情是无法用言语表达的。
还要感我的同学,是你们在我平时设计和论文中与我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进展下去,没有你们的帮助我不可能这样顺利地结稿,在此表示深深的意。
参考文献
[1] 胡汉才.单片机原理及系统设计[M] .:清华大学,2002.
[2] 王守中. 51单片机开发入门与典型实例[M].:人民邮电,2007.
[3] 雪丽. 单片机原理及接口技术[M].:化学工业,2005.
[4] 薛均义,彦斌.MCS-51系列单片微型计算机及其应用.:交通大学,2005.
[5] 唐颖,程菊花,任条娟.单片机原理与应用及C51程序设计[M].:大学,2008.
[6] 电子线路设计实验测试第二版.[M]:华中科大, 20012.1-40
[7] 健.实用声光电及无线电遥控电路300例.[J]:中国电力,2008.90-100
[8] 浩,高静.怎样用万用电表检测电子元器件修订本.[J] :人民邮电,2009.32-66
[9] 全新实用电路集粹编辑委员会编著.全新实用电路集粹. [M]:机械工业,2006.56-74
[10] 王新贤.通用集成电路速查手册第二版.[M] 科学技术,22-57
. . word.zl-
展开阅读全文