本帖最后由 jiujiu 于 2014-12-18 00:35 编辑
main.c文件:- #include "keyscan.h"
- #include "LCD1602.h"
- #include<stdio.h>
- uchar dis_table0[16]=" "; //第一行 a+b=
- uchar dis_table1[16]=" "; //第二行 c
- uchar temp[8]=" ";//数据b输入存储
- uchar code Hello_0[]=" Yin Shilong ";
- uchar code Hello_1[]=" 2012-12-31 ";
- int a,b,c;//EG:a+b=c
- uchar num; //按键值
- uchar dis,dis_temp; //显示索引
- uchar sign; //符号记录
- uchar first;
- uchar qing;
- int Dis_ab(int a,int b,uchar sign)
- {
- int c;
- if(sign=='+') c=a+b;
- if(sign=='-') c=a-b;
- if(sign=='x') c=a*b;
- if(sign=='/') c=a/b;
- return c;
- }
- void main()
- {
- LCD_init();
- showstring(0,0,Hello_0);
- showstring(0,1,Hello_1);
- delayms(500);
- while(1)
- {
- num=KeyPro();//键盘扫描
- if(num!=0xff) //按键按下
- {
-
- if(('+'==num) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//输入数字最大值8,输入符号表示输入结束
- { //符号键
- if(first==0)
- { if((num=='+')||(num=='-')||(num=='x')||(num=='/')) first=1;//第一个数输入结束
- if(num=='+')
- { sign='+'; //记录
- dis_table0[dis]='+'; //先显示出来
- sscanf(dis_table0,"%d[^+]",&a); //把第一个数取出赋值给a,详情参考本函数用法
-
- }
- if(num=='-')
- { sign='-';
- dis_table0[dis]='-'; //显示
- sscanf(dis_table0,"%d[^-]",&a);
- }
- if(num=='x')
- { sign='x';
- dis_table0[dis]='x'; //显示
- sscanf(dis_table0,"%d[^x]",&a);
- }
- if(num=='/')
- { sign='/';
- dis_table0[dis]='/'; //显示
- sscanf(dis_table0,"%d[^/]",&a);
- }
- dis++;dis%=16;
-
- }
- if(first==1)
- {
- if(num=='=')
- {
- dis_table0[dis]='='; //显示
- dis++;dis%=16;
- sscanf(temp,"%d",&b); //取b
- c=Dis_ab(a,b,sign);
- sprintf(dis_table1,"%d",c);
- }
- }
-
- }
- else
- { //数字键
-
- if(num==10) //清除键
- {
- first=0;sign=0; //清标志
- dis=0;dis_temp=0;
- a=b=c=0;
- for(qing=0;qing<16;qing++)
- {
- dis_table0[qing]=' '; //清显示
- dis_table1[qing]=' ';
- }
-
- }
- else
- {
- dis_table0[dis]=num+'0'; //供显示用
- dis++;dis%=16;
- if(first==1)
- {
- temp[dis_temp]=num+'0'; //存下b的值
- dis_temp++;dis_temp%=8;
- }
- }
-
- }
-
-
-
- }
- showstring(0,0,dis_table0);
- showstring(0,1,dis_table1);
- }
- }
复制代码
|