附录二:系统程序清单
;主程序 // Header: // File Name: // Author: // Date:
#include
void Header_printf(unsigned char *str) //规避WARNING L15 { }
void Header() { }
void Main() {
26
while(*str!='\\0') { }
BWR_data(*str); str++;
LCD_moveto(0,0);
Header_printf(\LCD_moveto(1,3);
Header_printf(\
LCD_init(); Header();
P2=P2|0x0F; P1=P1&0xC0;
/*开外部中断*/
IT0=1; //下降沿触发 EX0=1; EA = 1;
while(1);
}
void mINT0 (void) interrupt 0 { char i; EA=0;
for(i=5;i>0;i--) { if(INT0==1) break;
}
if(INT0==0) {
Key_press(); } EA=1;
}
;按键处理程序 #include
27
#include \#include \#include \void Key_press() {
char a[16];
//第一次输入数字存在b[16]里,按下中间计算符后,循环a[len]=b[len];
清空b[len]
char b[16]; char key; char i;
//再次输入数字仍存在b[16]里,按下等号后,计算a,b,结果存在b[len];
char arc; //运算符 char len; //数字长度 bit sign; //正负号 bit point; //小数点
key=Key_get(); //数字键处理
if(key==12) key='7'; else if(key==13) key='8'; else if(key==14) key='9'; else if(key==22) key='4'; else if(key==23) key='5'; else if(key==24) key='6'; else if(key==32) key='1'; else if(key==33) key='2'; else if(key==34) key='3'; else if(key==42) key='0';
else if(key==11) key='C'; else if(key==21) key='S'; else if(key==31) key='%';
else if(key==41) key=' '; //空格
28
//清空 //正负号
else if(key==43) key='.'; else if(key==44) key='='; else if(key==45) key='+'; else if(key==25) key='-'; else if(key==15) key='*'; else if(key==16) key='/'; else if(key==26) key='M'; //MRC else if(key==36) key='D'; //M- else if(key==46) key='A'; //M+
else key='E'; //错误
if(len<15) //前15个数字输入有效 {
if(len==0) {
LCD_init();
for(len=15;len>0;len--) { b[len]=' ';
}
b[0]='0';
b[1]='.';
LCD_moveto(1,14); LCD_printf(\
}
if(key>0x2F&&key<0x3A) { if(len==0&&key=='0') { LCD_moveto(1,14); LCD_printf(\ //第一位输入'0'不响应
}
29