本帖最后由 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);
- }
- }
復制代碼
|