#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!”,跳出计算。
哪位高手帮忙看下哪里出错了,万分感激。
//程序已经改正。
//使用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"); //更改输出格式定义。
}
}
}