51单片机计算器程序问题··
时间:10-02
整理:3721RD
点击:
我C语言很基础·····
这个程序有很多地方都不明白·求大侠给讲解··
红字部分是我自己理解的·和想不明白的地方······
可能我表达的会有些不清楚···最好大侠能深刻的讲解下·····
C语言我是自学的·上学那会都没怎么学··而且工作几年了都忘了··其他的不说了·多谢帮助·多多包涵·····谢谢关照·····
源程序·····
#include<reg52.h>
#include<stdio.h>
#include"display.h"
#include"delay.h"
#include"keyboard.h"
main()
{
unsigned char num,i,sign;
unsigned char temp[8];
unsigned char s;
bit firstflag;
int a=0,b=0;
init_timer0();
while(1)
{
num=keypro();
if(num!=0xff)
{
if(i==0)
{
for(s=0;s<8;s++)
tempdata
}
if(('+'==num)||(i==8)||('-'==num)||('x'==num)||('/'==num)||('='==num))【1】如果按键按下这些符号键或者i==8就执行下面语句·
{
i=0;
if(firstflag==0)【2】这句话不太明白·为什么是等于0呢·等于1不可以吗·还有为什么要使用这么一个条件语句呢·
{
sscanf(temp,"%d",&a);【3】sscanf不太明白他的作用·百度后理解是从temp中输入一个数字;不知道对不对·
firstflag=1;【4】这时候为什么是1了呢···不明白··
}
else
sscanf(temp,"%d",&b);
for(s=0;s<8;s++)
temp
if(num!='=')
sign=num;
else
{
firstflag=0;【5】同样不理解····
switch(sign)
{
case '+':a=a+b;break;
case '-':a=a-b;break;
case 'x':a=a*b;break;
case '/':a=a/b;break;
default:break;
}
sprintf(temp,"%d",a);【6】sprintf的作用也是不太明白·百度后也是从temp中输出一个数组··就不明白写这两个命令的作用是什么?
for(s=0;s<8;s++)
{
if(temp
tempdata
else if(temp
tempdata
else
tempdata
}
sign=0;a=b=0;
for(s=0;s<8;s++)
temp
}
}
else if(i<16)
{
temp=num+'0';【8】·那这句话是不是由数字转换成ASCII,我那么麻烦干什么呢·我吧上面的temp
tempdata=duanma[num];
i++;
}
}
}
}
写的好乱啊,建议你去看看单片机寄存器的定义和使用方法