只有熟练的掌握了土豆丝的切法,方可随心的切出土豆丝来。
只有熟练掌握了C语言编写某类问题代码的技能,誉岩也才能编写出解决这类问题的程序来。
编译成功只能说没有语法错误,就像会用刀姿虚袭切,不会切到手,并不意味着就能切出粗细均匀的土豆丝来,也就是并不一定能够实现功能。
具体为什么,还需要具体问题具体分析了
你是不是运行了几次了啊,如孝芦果你已经运行了当前程序,在没有关镇慎纳闭你所编写的当前程序的进程的情况下是没法再编译运行的,方法是打开进程管理器结束进程,要是你自己都不清楚自御没己的程序进程名,那就只能注销计算机再启动了。希望对你有用!
你这样的书写方式太乱了。你要把你的计算器模块化。1.键盘输入。不知道你的这个是不是4*4矩阵键盘,键盘输入应该作为一笑兄渗个单独的模块。
void _delayKey(unsigned int i) {while(i--)}
unsigned char catchKey(){
unsigned char cord_h,cord_l//行列值中间变量
KEYPORT=0x0f //低位线输出尘神全为1 ,高位线为0
cord_h=KEYPORT&0x0f//读入低位线值
if(cord_h!=0x0f){ //低位线值变化,有按键输入
KEYPORT=0xf0 //低位线输出全为0 ,高位线为1
cord_l=KEYPORT&0xf0 //读入高位线值
if(cord_l==0xf0){ //无法捕捉了提前释放了
return 0xff
}
_delayKey(200)
do{
KEYPORT=0x0f
}while(KEYPORT!=0x0f)//捕捉释放
return cord_h+cord_l//键盘最后组合码值
}
return 0xff//返回无键盘输入值
}
比如我写碰脊的这个键盘扫描函数。(开始学习单片机的时候写的,应该还可以继续完善。)
通过获取catchKey()的返回值就可以确定是否有键盘输入,输入的是什么键。
键盘输入的值要自己根据单片机连接自己找到。
我的键值是
#define NOPRESS 0xff //无按下
#define KEY0 0xee //0
#define KEY1 0xde //1
#define KEY2 0xbe //2
#define KEY3 0x7e //3
#define KEY4 0xed //4
#define KEY5 0xdd //5
#define KEY6 0xbd //6
#define KEY7 0x7d //7
#define KEY8 0xeb //8
#define KEY9 0xdb //9
#define KEYA 0xbb //a
#define KEYB 0x7b //b
#define KEYC 0xe7 //c
#define KEYD 0xd7 //d
#define KEYE 0xb7 //e
#define KEYF 0x77 //f
按键的排列顺序
0 1 2 3
4 5 6 7
8 9 a b
c d e f
这是我键盘的排列。4*4矩阵键盘。
2.计算程序。
//按键定义
#define NUM1 KEY0
#define NUM2 KEY1
#define NUM3 KEY2
#define NUM4 KEY4
#define NUM5 KEY5
#define NUM6 KEY6
#define NUM7 KEY8
#define NUM8 KEY9
#define NUM9 KEYA
#define NUM0 KEYC
#define JIA KEY3 //+
#define JIAN KEY7 //-
#define SHENG KEYB //*
#define CHU KEYF // /
#define CLEAN KEYD //C
#define DENG KEYE //==
/*---------------------------------------------
根据键值返回数字
---------------------------------------------*/
unsigned char getValue(unsigned char key){
switch(key){
case NUM0:
return 0
case NUM1:
return 1
case NUM2:
return 2
case NUM3:
return 3
case NUM4:
return 4
case NUM5:
return 5
case NUM6:
return 6
case NUM7:
return 7
case NUM8:
return 8
case NUM9:
return 9
default:
PrintInt(key)
return 10
}
}
void main(){
int QianNum = 0x00 //前
unsigned char oper = 0xff//空
int HouNum = 0x00 //后
unsigned char state = 0//输入状态 0为正在输入前一个数。1,为字符,2为第二个数
int resoult = 0unsigned char key,value,num=0
//初始化显示。InitDisplay()
PrintInt(0)
while(1){
Display()//不断刷新。
key = catchKey()
switch(key){
case NOPRESS:
break
case CLEAN:
QianNum = 0
oper = 0xff
HouNum = 0
state = 0
//ChangePosition(0,0)
PrintInt(0)
break
case DENG:
switch(oper){
case JIA:
resoult = QianNum+HouNum
break
case JIAN:
resoult = QianNum-HouNum
break
case SHENG:
resoult = QianNum*HouNum
break
case CHU:
resoult = QianNum/HouNum
break
}
PrintInt(resoult)//显示结果
//把结果保存为第一个数。
QianNum = resoult
HouNum = 0
oper = 0xff
state = 1//要输入字符。
break
case JIA:
oper = JIA
state = 2
break
case JIAN:
oper = JIAN
state = 2
break
case SHENG:
oper = SHENG
state = 2
break
case CHU:
oper = CHU
state = 2
break
default:
value = getValue(key)//获得键的值
switch(state){
case 0:
QianNum = QianNum*10+(int)value
PrintInt(QianNum)
break
case 1:
QianNum = 0
oper = 0xff
HouNum = 0
state = 0
QianNum = (int)value
PrintInt(QianNum)
break
case 2:
HouNum = HouNum*10+(int)value
PrintInt(HouNum)
break
default:
break
}
break
}
}
}
PrintInt是打印整数的函数。就是显示这个整数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)