浙江科技学院1602液晶显示计算器.docx

上传人:b****6 文档编号:7842705 上传时间:2023-01-26 格式:DOCX 页数:16 大小:271.45KB
下载 相关 举报
浙江科技学院1602液晶显示计算器.docx_第1页
第1页 / 共16页
浙江科技学院1602液晶显示计算器.docx_第2页
第2页 / 共16页
浙江科技学院1602液晶显示计算器.docx_第3页
第3页 / 共16页
浙江科技学院1602液晶显示计算器.docx_第4页
第4页 / 共16页
浙江科技学院1602液晶显示计算器.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

浙江科技学院1602液晶显示计算器.docx

《浙江科技学院1602液晶显示计算器.docx》由会员分享,可在线阅读,更多相关《浙江科技学院1602液晶显示计算器.docx(16页珍藏版)》请在冰豆网上搜索。

浙江科技学院1602液晶显示计算器.docx

浙江科技学院1602液晶显示计算器

 

浙江科技学院

1602液晶显示计算器

摘要

本设计由51单片机作为核心,4*4矩阵键盘作为输入,利用51单片机控制LCD1602,实现加减乘除运算。

一、外观介绍:

清零

0

=

+

1

2

3

-

4

5

6

*

7

8

9

/

 

二、电路仿真:

 

P0.0~P0.7引脚接lcd的D0-D7,P3口接矩阵键盘。

单片机的P2.7、P2.5、P2.6脚分别接到LCD的RS、R/W、E管。

 

三、显示电路,LCD1602A的引脚详细介绍:

采用LCD1602A来显示,要求能显示两行。

它的

引脚分别接到单片机的P0.0~P0.7引脚;RS、R/W、E管脚分别接到单片机的P2.4、P2.0、P2.3。

具体连接见后面的电路图。

 

以下是1602的16进制ASCII码表

 

三、矩阵键盘扫描电路

P3口的P3.0,P3.1,P3.2和P3.3四根线作为按键的行输出线,用P3.4,P3.5,P3.6和P3.7作为按键的列输入线。

依次给某一行低电平,再判断哪一列是低电平。

于是就判断出哪行和哪列导通。

对于不同的组合可以确定所有按键位置,将位置赋值到一个变量中,以供使用。

具体来说:

假如按下的是数字5键(编号6——位于第二行第二列),首先置第一行为低电平其他7位为高电平P0=0xfe,再检测高四位的电平(P0=P&0xf0),因为列没有一条与第一行相导通,所以P0的高位还是高电平的。

然后再换第二行P0=0xfd,同理检测高四位(P0=P&0xf0)得出P0=0xd0,则5键所在位置为第二行第二列,然后num赋值为6。

 

四、程序

分析可知共分为七个模块:

键盘扫描部分,定义各个位置上的键值部分,延迟部分,存贮部分,液晶显示部分,运算部分,动态显示部分。

主程序流程图如下:

五、程序

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitlcden=P2^7;

sbitrs=P2^6;

sbitrw=P2^5;

sbitbusy=P0^7;

chari,j,temp,num,num_1;

longa,b,c;

floata_c,b_c;

ucharflag,fuhao;

ucharcodetable[]={

7,8,9,0,

4,5,6,0,

1,2,3,0,

0,0,0,0};

ucharcodetable1[]={

7,8,9,0x2f-0x30,

4,5,6,0x2a-0x30,

1,2,3,0x2d-0x30,

0x01-0x30,0,0x3d-0x30,0x2b-0x30};

voiddelay(ucharz)

{

uchary;

for(z;z>0;z--)

for(y=0;y<110;y++);

}

voidcheck()

{

do{

P0=0xFF;

rs=0;

rw=1;

lcden=0;

delay

(1);

lcden=1;

}while(busy==1);

}

voidwrite_com(ucharcom)

{

P0=com;

rs=0;

rw=0;

lcden=0;

check();

lcden=1;

}

voidwrite_date(uchardate)

{

P0=date;

rs=1;

rw=0;

lcden=0;

check();

lcden=1;

}

voidinit()

{

num=-1;

lcden=1;

write_com(0x01);

write_com(0x38);

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;

fuhao=0;

}

voidkeyscan()

{

P3=0xfe;

if(P3!

=0xfe)

{

delay(20);

if(P3!

=0xfe)

{

temp=P3&0xf0;

switch(temp)

{

case0xe0:

num=0;

break;

case0xd0:

num=1;

break;

case0xb0:

num=2;

break;

case0x70:

num=3;

break;

}

}

while(P3!

=0xfe);

if(num==0||num==1||num==2)

{

if(j!

=0)

{

write_com(0x01);

j=0;

}

if(flag==0)

{

a=a*10+table[num];

}

else

{

b=b*10+table[num];

}

}

else

{

flag=1;

fuhao=4;

}

i=table1[num];

write_date(0x30+i);

}

P3=0xfd;

if(P3!

=0xfd)

{

delay(5);

if(P3!

=0xfd)

{

temp=P3&0xf0;

switch(temp)

{

case0xe0:

num=4;

break;

case0xd0:

num=5;

break;

case0xb0:

num=6;

break;

case0x70:

num=7;

break;

}

}

while(P3!

=0xfd);

if(num==4||num==5||num==6&&num!

=7)

{

if(j!

=0)

{

write_com(0x01);

j=0;

}

if(flag==0)

{

a=a*10+table[num];

}

else

{

b=b*10+table[num];

}

}

else

{

flag=1;

fuhao=3;

}

i=table1[num];

write_date(0x30+i);

}

P3=0xfb;

if(P3!

=0xfb)

{

delay(5);

if(P3!

=0xfb)

{

temp=P3&0xf0;

switch(temp)

{

case0xe0:

num=8;

break;

case0xd0:

num=9;

break;

case0xb0:

num=10;

break;

case0x70:

num=11;

break;

}

}

while(P3!

=0xfb);

if(num==8||num==9||num==10)

{

if(j!

=0)

{

write_com(0x01);

j=0;

}

if(flag==0)

{

a=a*10+table[num];

}

else

{

b=b*10+table[num];

}

}

elseif(num==11)

{

flag=1;

fuhao=2;

}

i=table1[num];

write_date(0x30+i);

}

P3=0xf7;

if(P3!

=0xf7)

{

delay(5);

if(P3!

=0xf7)

{

temp=P3&0xf0;

switch(temp)

{

case0xe0:

num=12;

break;

case0xd0:

num=13;

break;

case0xb0:

num=14;

break;

case0x70:

num=15;

break;

}

}

while(P3!

=0xf7);

switch(num)

{

case12:

{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}

break;

case13:

{

if(flag==0)

{

a=a*10;

write_date(0x30);

P1=0;

}

elseif(flag==1)

{

b=b*10;

write_date(0x30);

}

}

break;

case14:

{j=1;

if(fuhao==1){write_com(0x80+0x4f);

write_com(0x04);

c=a+b;

while(c!

=0)

{

write_date(0x30+c%10);

c=c/10;

}

write_date(0x3d);

a=0;b=0;flag=0;fuhao=0;

}

elseif(fuhao==2){write_com(0x80+0x4f);

write_com(0x04);

if(a-b>0)

c=a-b;

else

c=b-a;

while(c!

=0)

{

write_date(0x30+c%10);

c=c/10;

}

if(a-b<0)

write_date(0x2d);

write_date(0x3d);

a=0;b=0;flag=0;fuhao=0;

}

elseif(fuhao==3){write_com(0x80+0x4f);

write_com(0x04);

c=a*b;

while(c!

=0)

{

write_date(0x30+c%10);

c=c/10;

}

write_date(0x3d);

a=0;b=0;flag=0;fuhao=0;

}

elseif(fuhao==4){write_com(0x80+0x4f);

write_com(0x04);

i=0;

c=(long)(((float)a/b)*1000);

while(c!

=0)

{

write_date(0x30+c%10);

c=c/10;

i++;

if(i==3)

write_date(0x2e);

}

if(a/b<=0)

write_date(0x30);

write_date(0x3d);

a=0;b=0;flag=0;fuhao=0;

}

}

break;

case15:

{write_date(0x30+table1[num]);flag=1;fuhao=1;}

break;

}

}

}

main()

{

init();

while

(1)

{

keyscan();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1