단편 기: 간이 계산기 의 실현 (키보드)

매트릭스 키 보드 를 이용 하여 간단 하고 쉬 운 계산 기 를 실현 하 다.
문 제 를 간소화 하기 위해 서우리 가 100 보다 작은 비 마이너스 정수 간 의 더하기, 빼 기, 곱 하기 연산 만 지원 한다 면.그리고 연속 연산 을 지원 합 니 다.
이 프로그램 에서 C 는 플러스 이 고 D 는 마이너스 이 며 E 는 곱셈 이 고 F 는 같은 번호 이다.
코드 에 구체 적 인 응시 가 있 습 니 다.
/*    :    C  +, D  - E * F  = 。          。

입력 한 수 치 는 100 보다 작고 연산 결 과 는 1000 을 초과 하지 않 습 니 다.port 세그먼트 잠 금 저장 sbit WEI = P2 ^ 7; /비트 잠 금 저장 unsigned char code doflyDuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};// 세그먼트 코드 값 0 ~ F 와 - 번호 unsigned char code dofly 표시WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//각각 해당 하 는 디지털 튜브 를 밝 히 고 즉석 코드 unsigned char TempData [8]; /디 스 플레이 값 을 저장 하 는 전역 변수 void DelayUs2x (unsigned char t); /us 급 지연 함수 성명 void DelayMs (unsigned char t); /ms 급 지연 void Display (unsigned char First Bit, unsigned char Num); / /디지털 파이프 디 스 플레이 함수 unsigned char KeyScan (void); /키보드 스 캔 서명 되 지 않 은 char KeyPro (void);void Init_Timer0(void);//타이머 초기 화 / * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------if (num! = 0xff) {if(num > = 0 & & num < = 9) {if (ans clear) {ans clear = 0; for (j = 0; j < 8; j + + +) / / / 스크린 TempData [j] = 0;} temp = temp * 10 + num; if (temp / 10 > 0) TempData [6] = dofly DuanMa[temp / 10]; TempData [7] = dofly DuanMa[temp% 10]; datanum [% 10]; datanum [] = temp;} elsif (num = 15) {i = 0; temp = 0; temp = 0; temp = 0; if (sym add= = = 0 = = 0; (sym add= = = = = = = = = 0; (sym add= = {ans = datanum [0] + datanum [1]; t = ans; if (ans / 100 > 0) {TempData [5] = dofly DuanMa[ans / 10]; ans = ans = ans% 100;} if (ans / 10 > 0 | | (TempData [5]! = 0 & & & ans / 10 = = = 0)) TempData [6] = dofly DuanMa [ans / 10]; TempData [7] = dofly DuanMa[ans% 10];} elsif (sym sub= = = 1) {ans = datanum[0] - datanum[0]] - datanum[1]; t = ans; if (ans < 0) {flag = 1; ans = - ans;} elselse flag = 0; if (flag) Temp데이터 [4] = dofly DuanMa[16] [16] [16] [16]] [16]] [16] [16]]] [16]]]] [16]; / / 마이너스 if (ans / 100 > 0) {TempData [5] = dofly DuanMa [ans / 100]; ans=ans%100; } if(ans/10>0) TempData[6]=dofly_DuanMa[ans/10]; TempData[7]=dofly_DuanMa[ans%10]; } else if(sym_mul==1) { ans=datanum[0]*datanum[1]; t=ans; if(ans/100>0) { TempData[5]=dofly_DuanMa[ans/100]; ans=ans%100; } if(ans/10>0 || (TempData[5]!=0 && ans/10==0)) TempData[6]=dofly_DuanMa[ans/10]; TempData[7]=dofly_DuanMa[ans%10]; }sym add = 0; sym sub= 0; sym mul = 0; ans clear = 1; datanum [0] = ans;} else if (num > = 12 & & num< < 14) {i + +; if (num = = = 12) sym add= 1; elsif (num = = = 13) sym sub= 1; elsif (num = = 12 & & & num< < < < < < < 14) sym mu= 14; temp = 0; temp = 0; for (j = 0; j < 8; j + + + + +) / / / / Temp데이터 [j] = 0;} / / / / / / / / / 주 순환 에 계속 작업 할 프로그램 을 추가 하려 는 다른 프로그램 을 추가 해 야 할 프로그램 을 추가 할 프로그램 을 추가 할 프로그램 을 추가 하려}./ * ------------------------------------------------------------------------------------------------------------------------------------------------------------------2x (unsigned char t) {while (-- t);} / * --------------------------------------------------------------------------------------------------------------------------------------------------(unsigned char t) {while (t -) {
Num 은 표시 해 야 할 자릿수 를 표시 합 니 다. 만약 99 두 개의 수 치 를 표시 해 야 한다 면 이 값 은 2 를 입력 하 십시오.; / / 비트 코드 WEI = 1; / 비트 잠 금 메모리 WEI = 0; DataPort = TempData [i];{TMOD | = 0x 01; / 사용 모드 1, 16 비트 타 이 머 를 사용 합 니 다. "|" 기 호 를 사용 하면 여러 타 이 머 를 사용 할 때 영향 을 받 지 않 습 니 다. / / TH0 = 0x 00; / 주어진 초기 값 / / TL0 = 0x 00; EA = 1; / 총 인 터 럽 트 ET0 = 1; / / 타 이 머 를 중단 하고 TR0 = 1 을 엽 니 다. / 타 이 머 스위치 열기}/ * --------------------------------------------------------------------------------------------------------------------------------------------------------------/ * -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------(KeyPort! = 0xf 0) {/ / / / / / / / / / / / / / / / / / / / / / / / / (KeyPort! = 0xfe) {Val = KeyPort & 0xf 0 (KeyPort & 0xf 0) {Val = KeyPort & 0xf0; Val+ = 0x0e 키 버튼 을 눌 렀 다 표시 = 0xfe = 0xfe; whi(KeyPort! = 0xfe); DelayMs (10); / / / / / / / / / (KeyPort! = 0xfe (KeyPort! = 0xfe! = 0xfe); / / / 두 번 째 줄 if (KeyPort! = 0xfd) {Val = KeyPort & 0xf 0; Val + 0xf 0 x f0; Val + = 0x0 x 0 x 0 0; / / / / / / / / / / / / d; while (KeyPort! = 0xfd); DelayMs (10); / / while 떨 러 가기(KeyPort! = 0xfd); return Val;} KeyPort = 0xfb; / / 3 행 if (KeyPort! = 0xfb) {Val = KeyPort & 0xf0; Val + = 0x0b; Val+ = 0x0b; whi(KeyPort! = 0xfb); DelayMs (10); / / / 떨 고 있 는 동안 (KeyPort! = 0xfb); retVal;} KeyPort = 0xf 7; / / 네 번 째 행 if (KeyPort! = 0xf7) {Val = KeyPort & 0xf0; Val + = 0xfb = 0xfb 07; (Port KeyPort 키 포트! = 0xf 7) {Val = KeyPort & 0xf0; Val + = 0xf 0 x f0; Val + = 0xfb 07; (포트 키 포트 키! = 0xf 7); DelayMs (10); / / 가서 while (KeyPort! = 0xf 7); return Val;}} return 0xff;}{case 0xxee: ret0; brea0; break; / / 0 키 를 누 르 면 해당 하 는 코드 값 을 보 여 주 는 cascas0xde: ret1; break; / 1 cas0xbe: ret2; break; / / 2 cas0x7e: ret3; break; / / 3 cas0xded: ret4; brea/ / 4 cas0xdd: ret5; brea/ 5 cas0xb: ret2; / 5 cas0xb:: ret6; brea/ 6 cas0x77x7d: ret7: ret7; break; / 7 cas0x7xeb: ret8; brea/ / 8 cas0xdb: 0xdb: ret9; brea/ / / / 9 cas0xb: 0xb: 0xbdbdb: ret6; / / / 6 cas0x70x7d: 7x7d: ret7 cas0x7retu.rn 10;break;//a case 0x7b:return 11;break;//b case 0xe7:return 12;break;//c case 0xd7:return 13;break;//d case 0xb7:return 14;break;//e case 0x77:return 15;break;//f default:return 0xff;break; } }

좋은 웹페이지 즐겨찾기