1602液晶显示计算器电路图及程序.docx

上传人:b****6 文档编号:15529099 上传时间:2023-07-05 格式:DOCX 页数:19 大小:48.67KB
下载 相关 举报
1602液晶显示计算器电路图及程序.docx_第1页
第1页 / 共19页
1602液晶显示计算器电路图及程序.docx_第2页
第2页 / 共19页
1602液晶显示计算器电路图及程序.docx_第3页
第3页 / 共19页
1602液晶显示计算器电路图及程序.docx_第4页
第4页 / 共19页
1602液晶显示计算器电路图及程序.docx_第5页
第5页 / 共19页
1602液晶显示计算器电路图及程序.docx_第6页
第6页 / 共19页
1602液晶显示计算器电路图及程序.docx_第7页
第7页 / 共19页
1602液晶显示计算器电路图及程序.docx_第8页
第8页 / 共19页
1602液晶显示计算器电路图及程序.docx_第9页
第9页 / 共19页
1602液晶显示计算器电路图及程序.docx_第10页
第10页 / 共19页
1602液晶显示计算器电路图及程序.docx_第11页
第11页 / 共19页
1602液晶显示计算器电路图及程序.docx_第12页
第12页 / 共19页
1602液晶显示计算器电路图及程序.docx_第13页
第13页 / 共19页
1602液晶显示计算器电路图及程序.docx_第14页
第14页 / 共19页
1602液晶显示计算器电路图及程序.docx_第15页
第15页 / 共19页
1602液晶显示计算器电路图及程序.docx_第16页
第16页 / 共19页
1602液晶显示计算器电路图及程序.docx_第17页
第17页 / 共19页
1602液晶显示计算器电路图及程序.docx_第18页
第18页 / 共19页
1602液晶显示计算器电路图及程序.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

1602液晶显示计算器电路图及程序.docx

《1602液晶显示计算器电路图及程序.docx》由会员分享,可在线阅读,更多相关《1602液晶显示计算器电路图及程序.docx(19页珍藏版)》请在冰点文库上搜索。

1602液晶显示计算器电路图及程序.docx

1602液晶显示计算器电路图及程序

#include〈reg51。

h>

#include

#include

#include

unsignedcharcodeError[]={”error"};

unsignedcharcodeSystemerror[]={”systemerror"};

unsignedcharcodeLcd[]={"lcdcalculate"};

charstr[16];

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

sbitBF=P0^7;

/***********************

函数功能:

延时1ms

***********************/

voiddelay1ms()

{

unsignedchari,j;

for(i=0;i<10;i++)

for(j=0;j〈33;j++)

;

/************************

函数功能:

延时n毫秒

入口参数:

n

************************/

voiddelaynms(unsignedcharn)

unsignedchari;

for(i=0;i〈n;i++)

delay1ms();

/************************************

函数功能:

判断液晶模块的忙碌状态

返回值:

result。

result=1,忙碌;result=0,不忙。

************************************/

bitBusyTest(void)

bitresult;

RS=0;//根据规定,RS为低电平、RW为高电平时,可以读状态

RW=1;

E=1;//E=1,才允许读/写

_nop_();

_nop_();

_nop_();

_nop_();

result=BF;//将忙碌标志电平赋给result

E=0;

returnresult;

/*************************************

函数功能:

将模式设置指令或显示地址写入液晶模块

入口参数:

dictate

**************************************/

voidWriteInstruction(unsignedchardictate)

{

while(BusyTest()==1);//如果忙就等待

RS=0;//根据规定,RS和R/W同为低电平时,可以写入指令

RW=0;

E=0;

_nop_();

_nop_();

P0=dictate;//将数据送入P0口,即写入指令或地址

_nop_();

_nop_();

_nop_();

_nop_();

E=1;//E置高电平

_nop_();

_nop_();

_nop_();

_nop_();

E=0;

}

/*****************************************

函数功能:

指定字符显示的实际地址

入口参数:

x,y

*****************************************/

voidWriteAddress(unsignedcharx,unsignedchary)

unsignedchartemp;

if(x==0)

switch(y)

case0:

temp=0x00;break;

case1:

temp=0x01;break;

case2:

temp=0x02;break;

case3:

temp=0x03;break;

case4:

temp=0x04;break;

case5:

temp=0x05;break;

case6:

temp=0x06;break;

case7:

temp=0x07;break;

case8:

temp=0x08;break;

case9:

temp=0x09;break;

case10:

temp=0x0a;break;

case11:

temp=0x0b;break;

case12:

temp=0x0c;break;

case13:

temp=0x0d;break;

case14:

temp=0x0e;break;

case15:

temp=0x0f;break;

}

if(x==1)

{

switch(y)

{

case0:

temp=0x40;break;

case1:

temp=0x41;break;

case2:

temp=0x42;break;

case3:

temp=0x43;break;

case4:

temp=0x44;break;

case5:

temp=0x45;break;

case6:

temp=0x46;break;

case7:

temp=0x47;break;

case8:

temp=0x48;break;

case9:

temp=0x49;break;

case10:

temp=0x4a;break;

case11:

temp=0x4b;break;

case12:

temp=0x4c;break;

case13:

temp=0x4d;break;

case14:

temp=0x4e;break;

case15:

temp=0x4f;break;

}

WriteInstruction(temp|0x80);//显示位置的确定方法规定为“80H+地址码x"

/*****************************************

函数功能:

将数据(字符的标准ASCII码)写入液晶模块

入口参数:

y

*****************************************/

voidWriteData(unsignedchary)

while(BusyTest()==1);

RS=1;//RS为高电平,RW为低电平时,可以写入数据

RW=0;

E=0;

P0=y;//将数据送入P0口,即将数据写入液晶模块

_nop_();

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

E=0;//当E由高电平跳变成低电平时,液晶模块开始执行指令

/*****************************************

函数功能:

对LCD的显示模式进行初始化设置

*****************************************/

voidLcdInitiate(void)

{

delaynms(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间

WriteInstruction(0x38);//显示模式设置

delaynms(5);

WriteInstruction(0x38);

delaynms(5);

WriteInstruction(0x38);

delaynms(5);

WriteInstruction(0x0c);//显示模式设置:

显示开,无光标,光标不闪烁

delaynms(5);

WriteInstruction(0x06);//显示模式设置:

光标右移,字符不移

delaynms(5);

WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除

delaynms(5);

}

/***************************************

函数功能:

显示字符串

***************************************/

voiddisplay_error()

{

unsignedchari;

WriteAddress(0,0);

i=0;

while(Error[i]!

=’\0’)

{

WriteData(Error[i]);

i++;

delaynms(100);

}

voiddisplay_systemerror()

{

unsignedchari;

WriteAddress(0,0);

i=0;

while(Systemerror[i]!

=’\0’)

{

WriteData(Systemerror[i]);

i++;

delaynms(100);

}

voiddisplay_lcd()

{

unsignedchari;

WriteAddress(0,0);

i=0;

while(Lcd[i]!

=’\0’)

{

WriteData(Lcd[i]);

i++;

delaynms(100);

}

}

/***************************

函数功能:

按键判断

**************************/

bitjudge()

{

unsignedcharkeycode;

P1=0x0f;

keycode=P1;

if(keycode==0x0f)

return(0);

else

return

(1);

/*****************************

函数功能:

键盘扫描

*****************************/

unsignedcharscan()

{

unsignedcharkeycode,keyscan;

keyscan=0xef;

while(keyscan!

=0xff)

P1=keyscan;

keycode=P1;

if((keycode&0x0f)!

=0x0f)

break;

keyscan=(keycode<〈1)|0x0f;

keycode=~keycode;

return(keycode);

}

/*******************************

函数功能:

扫描键盘返回值

******************************/

unsignedcharKey_Num()

unsignedcharkeycode;

unsignedcharyong;

if(judge())

{

delaynms(20);

if(judge())

keycode=scan();

while(judge());

switch(keycode)

case0x11:

yong=’7’;break;

case0x12:

yong=’4’;break;

case0x14:

yong='1';break;

case0x18:

yong=0;break;

case0x21:

yong=’8';break;

case0x22:

yong=’5';break;

case0x24:

yong='2’;break;

case0x28:

yong='0';break;

case0x41:

yong=’9';break;

case0x42:

yong='6’;break;

case0x44:

yong='3’;break;

case0x48:

yong=’=’;break;

case0x81:

yong=’/';break;

case0x82:

yong='*’;break;

case0x84:

yong='—';break;

case0x88:

yong='+’;break;

default:

display_systemerror();

}

return(yong);

else

return(0xff);

}

/**************************************

itoa函数定义

*********************************/

unsignedcharitoa(longintnum)

{

unsignedchari,j,L;

unsignedchartemp[16];

for(i=0;num!

=0;i++)

temp[i]=num%10+48;

num=num/10;

L=i;

if(i>16)

{

display_systemerror();

}

for(j=0;j〈=L;j++)

{

str[j]=temp[i];

i-—;

return(L);

}

/*****************************************

函数功能:

主函数

****************************************/

voidmain()

{

longinta;

longintb;

unsignedcharflag;

unsignedcharsign;

unsignedchari,j,s,x;

unsignedcharnum;

unsignedcharfgh;

unsignedchartemp[16];

LcdInitiate();

display_lcd();

delaynms(20);

WriteInstruction(0x01);

flag=1;

while

(1)

num=Key_Num();

if(num!

=0xff)

{

if(fgh==1)

WriteInstruction(0x01);

fgh=0;

if((num!

='+')&&(num!

='-’)&&(num!

='*')&&(num!

=’/')&&(num!

='.’)&&(num!

=’=’))

{

if(flag==1)

{

a=a*10+num—48;

}

else

{

b=num-48+b*10;

}

if(num==0)

i=0;

flag=1;

a=0;b=0;

WriteInstruction(0x01);

}

if((num==’+’)||(num=='—’)||(num==’*')||(num=='/'))

{

flag=0;

switch(sign)

{

case'+’:

a=a+b;break;

case'-’:

a=a—b;break;

case'*’:

a=a*b;break;

case’/’:

{if(b!

=0)

{a=a/b;break;}

else

{

WriteInstruction(0x01);

flag=1;

WriteAddress(0,1);

display_error();

delaynms(40);

WriteInstruction(0x01);

break;

}

}

default:

break;

}

sign=num;

b=0;

}

if(num=='=')

{

flag=1;

switch(sign)

{

case'+':

a=a+b;

break;

case'—’:

a=a—b;

break;

case'*’:

a=a*b;

break;

case'/’:

a=a/b;

break;

default:

break;

}

temp[i]=num;

WriteAddress(0,i);

WriteData(num);

for(s=0;s<16;s++)

temp[s]=0;

s=0;

//WriteAddress(1,8);

//WriteData(a+48);

x=itoa(a);//函数转换

WriteAddress(1,1);

while(s<=x)

{

WriteData(str[s]);

s++;

delaynms(100);

}

sign=0;a=b=0;j=0;

for(s=0;s<16;s++)

str[s]=0;

s=0;

fgh=1;

i=0;

}

if(i<16)

if(num!

=’=’)

if((i==1)&&(temp[0]==’0'))//如果第一个字符是0,判读第二个字符

temp[0]=num;//如果是1—9数字,说明0没有用,则直接替换第一位0

WriteAddress(0,0);//输出数据

WriteData(num);

else

{

temp[i]=num;

WriteAddress(0,i);//输出数据

WriteData(num);

i++;//输入数值累加

}

else

{

i=0;

WriteInstruction(0x01);

}

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

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2