单片机C语言编程

#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar choose=0,flag1=0,flag2=0,flag3=0,a=0; //choose——选择,flag1——选择输入结束标记,flag2——选择计算标记,flag3——n输入结束标记
int n; //n——计算值
float d; //d——计算结果
void init(){
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
//SCON=0x50;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
float count(int c){
float b;
b=c*(1+c)/2;
return b;
}
void main(){
init();
while(1){
if(flag1==1){
flag1=0;
ES=0;
TI=1;
switch(choose){
case 0:puts("Turn on count!\n");
//flag2=1;
break;
case 1:puts("Turn off count!\n");
break;
case 2:puts("Error!\n");
break;
}
while(!TI);
TI=0;
ES=1;
}
if(flag3==1){
//while(flag3){
//flag2=0;
flag3=0;
ES=0;
TI=1;
printf("The result is \n",d);
while(!TI);
TI=0;
ES=1;
// }
}
}
}
void ser() interrupt 4{
RI=0;
a=SBUF;
flag1=1;
if(a==1){
choose=0;
puts("n=/n");
n=SBUF;
flag3=1;
d=count(n);
}
if(a==2){
choose=1;
}
if((a!=1)&&(a!=2)){
choose=2;
}
}
我想让它实现输入1,输出“Turn on count!”开始计算n!,并输出结果;输入2,输出“Turn off count”,跳出计算;输入其他数字,输出“Error!”,跳出计算。
哪位高手帮忙看下哪里出错了,万分感激。

第1个回答  2012-03-28

//程序已经改正。

//使用putchar相关函数时,不可同时使用中断,但可以使用scanf。

//美化输入、输出。

//判定a时应该按照字符处理。

#include<reg52.h>

#include<stdio.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar choose=0,flag1=0,flag2=0,flag3=0,a=0;           //choose——选择,flag1——选择输入结束标记,flag2——选择计算标记,flag3——n输入结束标记

int n;        //n——计算值

float d;                                    //d——计算结果

void init(){

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

//SCON=0x50;                              

SM0=0;

SM1=1;

REN=1;

EA=1;

ES=0;

TI=1;

}

float count(int c){

float b;

b=c*(1+c)/2;

return b;

}

void main(){

init();

while(1){

printf("Please input command->");

scanf("%c",&a); //无命令时在此处等待。

flag1=1;

if(a=='1'){

choose=0;

flag3=1;

}

if(a=='2'){

choose=1;

}

if((a!='1')&&(a!='2')){

choose=2;

}

printf("\n"); //换行。

switch(choose){

case 0:

puts("->Turn on count!");

break;

case 1:

puts("->Turn off count!");

printf("--------------------------------------------\n"); //更改输出格式定义。

break;

case 2:

puts("->Error!");

printf("--------------------------------------------\n"); //更改输出格式定义。

break;

}

if(flag3==1){

flag3=0;

printf("Please input n then push enter: "); //更改输出格式定义。

scanf("%d",&n);

getchar(); //吸收回车。

printf("n = %d\n",n); //更改输出格式定义。

d=count(n);

printf("The result is %f\n\n",d); //更改输出格式定义。

printf("--------------------------------------------\n"); //更改输出格式定义。

}

}

}