广西科技大学单片机课程设计简易计算器Word文档格式.docx
《广西科技大学单片机课程设计简易计算器Word文档格式.docx》由会员分享,可在线阅读,更多相关《广西科技大学单片机课程设计简易计算器Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
随着时间推移电容两端电压升高,即造成RST上的电压降低,当低至阈值电压时,即完成复位过程。
2)单片机晶振电路工作原理
晶振是晶体振荡器的简称。
它用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。
晶振在数字电路的基本作用是提供一个时序控制的标准时刻。
数字电路的工作是根据电路设计,在某个时刻专门完成特定的任务,如果没有一个时序控制的标准时刻,整个数字电路就会成为“聋子”,不知道什么时刻该做什么事情了。
晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。
如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。
电路中,为了得到交流信号,可以用RC、LC谐振电路取得,但这些电路的振荡频率并不稳定。
在要求得到高稳定频率的电路中,必须使用石英晶体振荡电路。
石英晶体具有高品质因数,振荡电路采用了恒温、稳压等方式以后,振荡频率稳定度可以达到10^(-9)至10^(-11)。
广泛应用在通讯、时钟、手表、计算机……需要高稳定信号的场合。
石英晶振不分正负极,外壳是地线,其两条不分正负
3)按键电路
通常所用的按键为轻触机械开关,正常情况下按键的接点是断开的,当我们按压按钮时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而机械触点在闭合及断开的瞬间均伴随有一连串的抖动,按键的时序如下图2所示,抖动时间的长短由按键的机械特性及操作人员按键动作决定,一般为5ms~20ms;
按键稳定闭合时间的长短是由操作人员的按键按压时间长短决定的,一般为零点几秒至数秒不等。
一次完整的击键过程,包含以下5个阶段:
1.等待阶段:
此时按键尚未按下,处于空闲阶段。
2.前沿(闭合)抖动阶段:
此时按键刚刚按下,但按键信号还处于抖动状态,这个时间一般为5~20ms。
为了确保按键操作不会误动作,此时必须有个前沿消抖动延时。
3.键稳定阶段:
此时抖动已经结束,一个有效的按键动作已经产生。
系统应该在此时执行按键功能;
或将按键所对应的键值记录下来,待按键释放时再执行。
4.后沿(释放)抖动阶段:
一般来说,考究一点的程序应该在这里再做一次消抖延时,以防误动作。
但是,如果前面“前沿抖动阶段”的消抖延时时间取值合适的话,可以忽略此阶段。
5.按键释放阶段:
此时后沿抖动已经结束,按键已经处于完全释放状态,如果按键是采用释放后再执行功能,则可以在这个阶段进行按键操作的相关处理。
七段数码管的特性及其使用
4)51单片机引脚
1、主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
2、外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin18):
片内振荡电路的输出端
3、控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
芯片实物图片芯片引脚功能
4、可编程输入/输出引脚(32根)
AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
每一根引脚都可以编程,比如用来控制电机、交通灯、霓虹灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能,尽情发挥你的想象力吧,实现你想要的:
)强大无比。
。
PO口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
5)74HC245的作用:
信号功率放大。
第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2~9脚“A”信号输入输出端,A1=B1、、、、、、A8=B8,A1与B1是一组,如果DIR=“1”G=“0”则A1输入B1输出,其它类同。
如果DIR=“0”G=“0”则B1输入A1输出,其它类同。
第11~18脚“B”信号输入输出端,功能与“A”端一样,不在描述。
第19脚G,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
第10脚GND,电源地。
第20脚VCC,电源正极。
74HC04的作用:
6位反相器。
第7脚GND,电源地。
第14脚VCC,电源正极。
信号由A端输入Y端反相输出,A1与Y1为一组,其它类推。
例:
A1=“1”则Y1=“0”、A1=“0”则Y1=“1”,其它组功能一样。
6)74HC573
74HC573有20个脚是一个8数据锁存器。
主要用于数码管、按键等等的控制
每个脚的作用如下·
2,3,4,5,6,7,8,9脚是数据的输入脚从D0到D7
11脚作用为:
连接这个脚此IC为高电压激活
连接1脚为低电压激此芯片
19,18,17,16,15,14,13,12这几个脚是数据的输出脚
10是接地
20是电源
数据的进和出没有逻辑关系
7)1602LCD主要技术参数:
显示容量:
16×
2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×
4.35(W×
H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压
11
D4
4
RS
数据/命令选择
12
D5
5
R/W
读/写选择
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
表10-13:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
三 硬件设计
3.1电路原理图
4.1程序流程图
(a)主程序流程(b)显示中断流程图(c)计算子程序流程图
4.2程序清单
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharkeyshu=16,k1,js,k2;
floatjieguo=0;
uchara[20],b[20];
ucharcodetable[]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
'
+'
-'
*'
/'
='
.'
};
sbitRS=P2^1;
sbitRW=P2^2;
sbitEN=P2^3;
sbitLE=P2^7;
sbitCE=P2^4;
sbitP20=P2^0;
//-------------延时-------------
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;
i<
101;
i++);
}
//----------忙检查---------------
ucharBusy_Check()
ucharLCD_Status;
RS=0;
RW=1;
EN=1;
DelayMS
(1);
LCD_Status=P0;
EN=0;
returnLCD_Status;
//-------------写LCD命令-----------
voidWrite_LCD_Comand(ucharcmd)
while(Busy_Check()&
0x80);
RW=0;
P0=cmd;
voidWrite_LCD_Data(uchardat)
while((Busy_Check()&
0x80)==0x80);
RS=1;
P0=dat;
//--------------LCD初始化-------------
voidInitialize_LCD()
Write_LCD_Comand(0x38);
Write_LCD_Comand(0x01);
Write_LCD_Comand(0x06);
Write_LCD_Comand(0x0C);
/*ucharcodekeycodetable[]=
{
0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,
0x42,0x44,0x48,0x81,0x82,0x84,0x88
};
*/
ucharkeys_scan()//扫描键盘
uchartemp;
LE=1;
CE=1;
P0=0x20;
DelayMS
(2);
LE=0;
P0=0X0FF;
CE=0;
temp=P0;
if((temp&
0x0ff)!
=0x0ff)
{
DelayMS
(1);
if((temp&
{
switch(temp)
{
case0x0FE:
keyshu=1;
break;
case0x0fd:
keyshu=2;
case0x0fb:
keyshu=3;
case0x0f7:
keyshu=4;
case0x0ef:
keyshu=9;
case0x0df:
keyshu=10;
case0x0bf:
keyshu=11;
case0x7f:
keyshu=12;
}
}
}
P0=0x01;
keyshu=5;
keyshu=6;
keyshu=7;
keyshu=8;
keyshu=13;
keyshu=0;
keyshu=14;
keyshu=15;
}
voidjscl()//计算并显示函数
{
uchari,j,n;
floats;
longints1,s2,a1,b1,temp1;
a1=b1=1;
s1=s2=0;
s=0;
if(k2!
=0)
for(j=0;
j<
k1+1;
j++)//存放第一操作数
{for(i=0;
k1-j;
i++)
a1=a1*10;
s1=s1+a[j]*a1;
a1=1;
for(j=k1+1;
k2+1;
j++)//存放第二操作数
k2-j;
b1=b1*10;
s2=s2+a[j]*b1;
b1=1;
if(js==10)//判断是什么运算,并执行运算
{s=s1+s2;
if(js==11)
{s=s1-s2;
if(js==12)
{s=s1*s2;
if(js==13)
{s=s1/s2;
jieguo=s;
else
s=jieguo;
temp1=(longint)(s);
//以下部分处理结果
n=0;
while(temp1)
{b[n]=temp1%10;
temp1=temp1/10;
n++;
for(i=n;
i>
0;
i--)//在液晶上显示结果
Write_LCD_Data(table[b[i-1]]);
voidmain()
uchari,j;
P20=1;
Initialize_LCD();
while
(1)
keys_scan();
/*keyshu=keys_scan();
if(keyshu==15)//计算机初始化
Write_LCD_Comand(0x01);
i=0;
for(j=0;
20;
j++)
a[j]=b[j]=0;
k1=k2=0;
elseif(keyshu<
10)
Write_LCD_Data(table[keyshu]);
a[i]=keyshu;
DelayMS(500);
keyshu=16;
i++;
elseif((9<
keyshu)&
&
(keyshu<
14))
k1=i-1;
js=keyshu;
keyshu=16;
elseif(keyshu==14)
DelayMS(300);
if(i==0)
k2=0;
else
k2=i-1;
Write_LCD_Comand(0x80+0x40);
//第二行第一个单元显示
jscl();
五 系统仿真及调试
5.1仿真各个部件
LCD屏幕
2*8键盘
51单片机
扩展输入口PD74HC245
5.2仿真调试结果
加法
减法
乘法
除法
六 总结和愿望
两周多的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
在这次设计过程中,体现出自己单独设计单片机的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
致谢
在此感谢我们的刘青正老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;
老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;
这次模具设计的每个实验细节和每个数据,都离不开老师您的细心指导。
而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。
参考资料:
1)求实科技.单片机典型模块设计实例导航.北京:
人民邮电出版社,2004.5
2)任致程,凌红武.电子制作工艺技巧.北京:
人民邮电出版社,1999
3)王彦朋.大学生电子设计与应用.北京:
中国电力出版社.2007.3
4)胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,2004
5)李晓林.电子工业出版社单片机原理与接口技术(第二版)北京2011.2……
实物图