最新单片机简易计算器C代码Word格式文档下载.docx
- 文档编号:19600295
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:20
- 大小:17.14KB
最新单片机简易计算器C代码Word格式文档下载.docx
《最新单片机简易计算器C代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最新单片机简易计算器C代码Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
ucharH_line,L_line,Num=0;
//行列值
P3=0x1e;
//行线第一条为0
L_line=P1&
0x1f;
//读入列线值
if(L_line!
=0x1f)//先检测有无按键按下
{
delay(100);
//去抖
//读入列线值
=0x1f)
switch(L_line)
case0x0f:
Num='
7'
;
break;
//7按下相应的键显示相对应的码值
case0x17:
8'
//8
case0x1b:
9'
//9
case0x1d:
F'
//F
case0x1e:
+'
//+
}
while(P1!
=0xff)//一次按键检测,松手跳出循环
H_line=P3&
}
delay(50);
P3=0x1d;
//行线第二条为0
4'
//4按下相应的键显示相对应的码值
5'
//5
6'
//6
E'
//E
-'
//-
P3=0x1b;
//行线第三条为0
1'
//1按下相应的键显示相对应的码值
2'
//2
3'
//3
D'
//D
*'
//*
P3=0x17;
//行线第四条为0
0'
//0按下相应的键显示相对应的码值
A'
//A
B'
//B
C'
//C
/'
///
P3=0x0f;
//行线第五条为0
b'
//b按下相应的键显示相对应的码值
o'
//o
h'
//h
R'
//R
='
//=号
while(Num!
=0)
returnNum;
/*-------------------------LCD_Init---------------------*/
voidLCD_Init(void)
EN=0;
LCD_Write_CMD(0x38);
delay(15);
LCD_Write_CMD(0x0d);
LCD_Write_CMD(0x06);
LCD_Write_CMD(0x01);
/*-------------------------LCD_Busy---------------------*/
bitLCD_Busy(void)
bitresult;
RS=0;
//读指令
RW=1;
EN=1;
_nop_();
result=(bit)(P0&
0x80);
returnresult;
/*----------------------LCD_Write_CMD----------------------------*/
voidLCD_Write_CMD(ucharcommand)
{
bitBusy_flag;
Busy_flag=LCD_Busy();
while(Busy_flag)
//判
RW=0;
P0=command;
/*----------------------LCD_Write_DATA----------------------------*/
voidLCD_Write_DATA(uchardate)
//判断LCD是否忙碌
RS=1;
P0=date;
delay(10);
/*----------------------------main--------------------------------*/
voidmain(void)
ucharkey;
longintnum1=0,num2=0,result=0;
intcnt1=0,cnt2=0,k;
unsignedintflagcal=0,flagtrs=0;
//运算符标志
ucharrem0,rem1,rem2;
//存放运算符
charnum;
unsignedchardataStr1[10]={0};
//存放数据
LCD_Init();
LCD_Write_CMD(0x80);
//设置显示位置(第一行开头)
delay(500);
LCD_Write_DATA('
);
//测试用
while
(1)
key=keyscan();
if(key=='
)
break;
/*-------------------------------基本运算------------------------------*/
if(!
(key=='
||key=='
))
{
if(flagtrs==1)//进制转换启动条件
Str1[cnt1++]=key;
//能存上了
if(rem1=='
if(key>
&
key<
r'
delay(500000);
cnt1=0;
if((key>
)||(key>
LCD_Write_DATA(key);
if(flagcal==0)
num1=num1*10+key-'
if(num1>
99999999||num1<
-99999999)//溢出错误
delay(5);
num1=0;
else
num2=num2*10+key-'
if(num2>
99999999||num2<
num2=0;
LCD_Write_CMD(0xc0);
flagcal=1;
switch(key)
case'
:
rem0='
LCD_Write_CMD(0x8f);
LCD_Write_CMD(0x04);
switch(rem0)
result=num1+num2;
num2=0;
num1=0;
if(num1>
=num2)result=num1-num2;
elseresult=num2-num1;
result=num1*num2;
if(num2!
=0)result=num1/num2;
elseresult=999999999;
default:
result=num1;
if(result>
99999999||result<
result=0;
for(;
result!
=0;
num=result%10+'
LCD_Write_DATA(num);
result/=10;
if(num1<
num2)
/*-----------------------------------进制转换------------------------------*/
if(flagtrs==0)
flagtrs=1;
rem1='
else
flagtrs=2;
rem2='
rem2=='
)//10-2
cnt2=cnt1-1;
num1=cnt1+'
//num=cnt2+'
//LCD_Write_DATA(num);
//测试用。
。
发现Str里面没有数据
/*for(cnt1=0;
cnt1<
=cnt2;
cnt1++)
num1=num1*10+Str1[cnt1]-'
num1!
)//测试正确
num=num1%2+'
num1=num1/2;
}*/
)//10-16
cnt2=strlen(Str1);
for(cnt1=0;
cnt2;
num=num1/16+'
num1=num1%16;
)//16-2
switch(Str1[cnt1])
case'
LCD_Write_DATA('
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 简易 计算器 代码