本帖最后由 yangyc401 于 2013-11-21 18:38 编辑
我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
=0;
}
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=0;
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==0)
tempdata=0;
else if(temp==0x2d)
tempdata=0x40;
else
tempdata=duanma[temp-'0'];【7】这句话说是ASCII转换成数字·难道temp存储的是16进制数?是不是跟数码管定义的数字?
}
sign=0;a=b=0;
for(s=0;s<8;s++)
temp=0;
}
}
else if(i<16)
{
temp=num+'0';【8】·那这句话是不是由数字转换成ASCII,我那么麻烦干什么呢·我吧上面的temp-'0'换成temp 不就行了·???
tempdata=duanma[num];
i++;
}
}
}
}
一周热门 更多>