简易计算器程序: #include <reg51.h> int key = 0, num1 = 0, num2 = 0; //共阴数码管表 unsigned char code table[] = {0x3f, 0x06 , 0x5b , 0x4f , 0x66 , 0x6d, 0x7d , 0x07 , 0x7f , 0x6f }; void delay() { int x=75, i; while (x--) { for (i = 0; i < 25; i++); } } void KeyScan() { P1 = 0xf0; //判断哪一列被按下 if(P1 != 0xf0) { switch(P1) { case 0xe0: key = 0; break; case 0xd0: key = 1; break; case 0xb0: key = 2; break; case 0x70: key = 3; break; } P1 = 0x0f;//判断哪一行被按下 switch(P1) { case 0x0e: key += 1; break; case 0x0d: key += 5; break; case 0x0b: key += 9; break; case 0x07: key += 13; break; } while (P1 != 0x0f); } } void display(int n) { if (n >= 0 && n <= 9) { P2 = 0xfe; P0 = table[n]; } else if (n >= 10 && n <= 99) { P2 = 0xfe; P0 = table[n / 10]; delay(); P2 = ~(1 << 1); P0 = table[n % 10]; delay(); } else if (n >= 100 && n <= 999) { P2 = 0xfe; P0 = table[n / 100]; delay(); P2 = ~(1 << 1); P0 = table[(n % 100) / 10]; delay(); P2 = ~(1 << 2); P0 = table[n % 10]; delay(); } else if (n >= 1000 && n <= 9999) { P2 = 0xfe; P0 = table[n / 1000]; delay(); P2 = ~(1 << 1); P0 = table[(n / 100) % 10]; delay(); P2 = ~(1 << 2); P0 = table[(n / 10) % 10]; delay(); P2 = ~(1 << 3); P0 = table[n % 10]; delay(); } else if (n >= 10000 && n <= 99999) { P2 = 0xfe; P0 = table[n / 10000]; delay(); P2 = ~(1 << 1); P0 = table[(n / 1000) % 10]; delay(); P2 = ~(1 << 2); P0 = table[(n / 100) % 10]; delay(); P2 = ~(1 << 3); P0 = table[(n / 10) % 10]; delay(); P2 = ~(1 << 4); P0 = table[n % 10]; } } int main() { int result, display_flag = 0, start_operate = 0; while (display_flag ==0) { key = 0; KeyScan(); //检测按键 switch(key) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: num1 = num1 * 10 + key; break; case 10: num1 = num1 * 10 + 0; break; case 11: //+ display_flag = 1; break; case 12: //- display_flag = 2; break; case 13: //* display_flag = 3; break; case 14: // / display_flag = 4; break; case 15: // = start_operate = 5; break; } display(num1); } while (start_operate != 5) { key = 0; KeyScan(); //检测按键 switch(key) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: num2 = num2 * 10 + key; break; case 10: num2 = num2 * 10 + 0; break; case 11: //+ display_flag = 1; break; case 12: //- display_flag = 2; break; case 13: //* display_flag = 3; break; case 14: // / display_flag = 4; break; case 15: // = start_operate = 5; break; } display(num2); } switch(display_flag) { case 1 : result = num1 + num2; break; case 2 : result = num1 - num2; break; case 3 : result = num1 * num2; break; case 4 : result = num1 / num2; break; } while(1) { display(result); } return 0; } |