51单片机实现计算器程序Word下载.docx
- 文档编号:20515562
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:16
- 大小:39.19KB
51单片机实现计算器程序Word下载.docx
《51单片机实现计算器程序Word下载.docx》由会员分享,可在线阅读,更多相关《51单片机实现计算器程序Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
};
ucharcodesz[]=
{
0x00,0x00,0xF0,0xF8,0x08,0x68,0xF8,0xF0,0x00,0x00,0x07,0x0F,0x0B,0x08,0x0F,0x07,//0
0x00,0x20,0x20,0x30,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,//1
0x00,0x30,0x38,0x08,0x88,0xF8,0x70,0x00,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x08,0x00,//2
0x00,0x30,0x38,0x88,0x88,0xF8,0x70,0x00,0x00,0x06,0x0E,0x08,0x08,0x0F,0x07,0x00,//3
0x00,0x00,0xF8,0xF8,0x00,0xE0,0xE0,0x00,0x00,0x03,0x03,0x02,0x02,0x0F,0x0F,0x02,//4
0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,//5
0x00,0xC0,0xE0,0x78,0x58,0xC8,0x80,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,//6
0x00,0x08,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x0E,0x0F,0x01,0x00,0x00,0x00,//7
0x00,0x70,0xF8,0xC8,0x88,0xF8,0x70,0x00,0x00,0x07,0x0F,0x08,0x09,0x0F,0x07,0x00,//8
0x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x00,0x09,0x0D,0x0F,0x03,0x01,0x00,//9
0x00,0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x00,0x00,//:
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x00,0x00//.
/*******************************
名称:
delay()
输入:
延时数
输出:
无
功能:
延时
********************************/
voiddelay(uintx)
inty,z;
for(y=x;
y>
0;
y--)
for(z=120;
z>
z--);
}
voidwrite_c(ucharc)//写指令端
LCD_RW=0;
LCD_RS=0;
LCD_EN=1;
P0=c;
LCD_EN=0;
delay
(1);
voidwrite_d(uchard)//写数据
LCD_RS=1;
LCD_EN=1;
P0=d;
LCD_EN=0;
delay
(1);
voidpianxuan(screen)//片选
{
switch(screen)
case0:
CS1=0;
CS2=0;
break;
case1:
CS1=1;
case2:
CS2=1;
case3:
}
voidqinping(screen)//清屏,从第一行第一列开始
uintx,y;
//页的设置位
pianxuan(screen);
//选择哪个清屏
for(x=0xb8;
x<
0xc0;
x++)
write_c(x);
//页初始值为0XB8到0xc0共八页
write_c(0x40);
//列的初始地址为0x40,共64列
for(y=0;
y<
64;
y++)
write_d(0x00);
//选择全部清屏
}
/*
LCD显示汉字字库函数
*/
voidlcd_display_hanzi(ucharscreen,ucharpage,ucharlie,uintmun)//screen:
选择屏幕参数,page:
选择页参数0-3,lie列参数0-3,mun:
显示第几个汉字的参数
{
inti;
//page页其实就是行,是行计数器页指针共九位计数器,高三位为X,低六位为Y
mun=mun*32;
pianxuan(screen);
//片选看哪个段
write_c(0x40+(lie*16));
//一个汉字占用两个字节
write_c(0xb8+(page*2));
//一个字节显示
for(i=0;
i<
16;
i++)
write_d(hz[mun++]);
}
write_c(0xb8+(page*2)+1);
for(i=0;
i++)
write_d(hz[mun++]);
voidlcd_display_shuzi(ucharscreen,ucharpage,ucharlie,uintmun)//screen:
mun=mun*16;
write_c(0x40+(lie*8));
8;
write_d(sz[mun++]);
write_d(sz[mun++]);
voidLCD_init()
write_c(0x3f);
//显示开启
write_c(0xc0);
//显示起始行,从第一位开始,从0到63
write_c(0xb8);
//设置页得地址从0到7
write_c(0x40);
//设置列的地址,从第一位开始,从0到63
GET_key()
无
按键的相应数目
扫描按键
ucharGET_key()
ucharTmp,KeyNO;
P1=0xf0;
Tmp=P1;
switch(Tmp)
case0xe0:
KeyNO=3;
break;
case0xd0:
KeyNO=2;
case0xb0:
KeyNO=1;
case0x70:
KeyNO=0;
P1=0x0f;
case0x0e:
KeyNO+=12;
case0x0d:
KeyNO+=8;
case0x0b:
KeyNO+=4;
case0x07:
KeyNO+=0;
default:
return(KeyNO);
voidwrite_key()
uchari,j,m,n;
m=7;
n=7;
KeyNO1=GET_key();
if(KeyNO1>
=0&
&
KeyNO1<
=9)
keytime++;
=10&
=13)
{
/*keytime=keytime-1;
for(j=keytime;
j>
=0;
j--)
if((keytime-j)==0)
w_date1=keyno[keytime];
else
{
for(k=0;
k<
keytime-j;
k++)
{
w_date1=keyno[keytime--]*10;
}
}
date1=date1+w_date1;
*/
keytime=0;
opercha=KeyNO1;
if(!
(opercha>
opercha<
=13))
date1=0;
if((keytime-1)<
10)
keyno[keytime-1]=KeyNO1;
if(keytime-1>
keytime-1<
=7)
for(i=keytime;
i>
i--)
{
lcd_display_shuzi(1,0,m,keyno[i-1]);
m--;
if((keytime-i)==0)
{
w_date1=keyno[i-1];
}
else
{
for(j=0;
j<
keytime-i;
j++)
{
w_date1=keyno[i-1]*10;
}
}
date1=date1+w_date1;
for(i=keytime-8;
lcd_display_shuzi(2,0,n,keyno[i-1]);
n--;
for(j=0;
w_date1=keyno[i-1]*10;
date1=date1+w_date1;
m=7;
keytime-8;
w_date1=keyno[i-1];
else
{
}
if((opercha>
=13)&
(KeyNO1!
=14))
date2=0;
if((keytime-1)<
10&
(keytime-1)>
=0)
if(keytime-1<
lcd_display_shuzi(1,1,m,keyno[i-1]);
w_date2=keyno[i-1];
w_date2=keyno[i-1]*10;
date2=date2+w_date2;
lcd_display_shuzi(2,1,n,keyno[i-1]);
date2=date2+w_date2;
/*if(KeyNO1==15)
keytime=keytime-1;
w_date2=keyno[keytime];
for(i=0;
i<
i++)
w_date2=keyno[keytime--]*10;
date2=date2+w_date2;
}*/
if(opercha>
m=7;
if(KeyNO1==14)
switch(opercha)
case10:
result=date1+date2;
case11:
result=date1-date2;
case12:
result=date1*date2;
case13:
result=date1/date2;
default:
for(i=1;
;
date10n=1;
for(j=0;
i-1;
date10n=date10n*10;
date10n_d[i-1]=(result/date10n)%10;
if(date10n*10>
result)
j=i;
break;
P3=result/date10n;
j;
lcd_display_shuzi(1,2,m,date10n_d[i]);
m--;
/*lcd_display_shuzi(1,2,7,result);
P3=opercha;
*/
}
voidmain()
keytime=0;
w_date1=0;
w_date2=0;
result=0;
opercha=0;
KeyNO1=16;
date10n=1;
LCD_init();
qinping(0);
lcd_display_hanzi(2,0,0,0);
//LCD显示汉字"
数"
//screen:
lcd_display_hanzi(2,0,1,1);
据"
lcd_display_shuzi(2,0,4,1);
//LCD显示数字"
1"
lcd_display_shuzi(2,0,5,10);
//LCD显示符号"
:
"
lcd_display_hanzi(2,1,0,0);
lcd_display_hanzi(2,1,1,1);
lcd_display_shuzi(2,1,4,2);
2"
lcd_display_shuzi(2,1,5,10);
lcd_display_hanzi(2,2,0,2);
结"
lcd_display_hanzi(2,2,1,3);
果"
lcd_display_shuzi(2,2,4,10);
while
(1)
if(P1!
=0x0f)
delay
(1);
if(P1!
{
write_key();
while(P1!
=0x0f);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 实现 计算器 程序