欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 105|回復: 3
打印 上一主題 下一主題
收起左側

為什么就是不顯示呢

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #include <math.h>

  5. // LCD????
  6. sbit LCD_RS = P2^0;
  7. sbit LCD_RW = P2^1;
  8. sbit LCD_EN = P2^2;

  9. // ????
  10. float num1 = 0.0, num2 = 0.0, result = 0.0;
  11. unsigned char operator = 0; // 0:?, 1:+, 2:-, 3:*, 4:/
  12. unsigned char input_state = 0; // 0:??num1, 1:?????, 2:??num2
  13. unsigned char decimal_flag = 0; // ?????
  14. unsigned char decimal_count = 0; // ?????
  15. unsigned char display_buffer[16];

  16. // ????
  17. void delay_ms(unsigned int ms) {
  18.     unsigned int i, j;
  19.     for (i = ms; i > 0; i--)
  20.         for (j = 110; j > 0; j--);
  21. }

  22. // LCD???
  23. void lcd_write_cmd(unsigned char cmd) {
  24.     LCD_RS = 0;
  25.     LCD_RW = 0;
  26.     LCD_EN = 1;
  27.     P0 = cmd;
  28.     delay_ms(2);
  29.     LCD_EN = 0;
  30. }

  31. // LCD???
  32. void lcd_write_data(unsigned char dat) {
  33.     LCD_RS = 1;
  34.     LCD_RW = 0;
  35.     LCD_EN = 1;
  36.     P0 = dat;
  37.     delay_ms(2);
  38.     LCD_EN = 0;
  39. }

  40. // LCD???
  41. void lcd_init(void) {
  42.     delay_ms(15);
  43.     lcd_write_cmd(0x38); // 8???,2?,5x7??
  44.     delay_ms(5);
  45.     lcd_write_cmd(0x0C); // ???,???
  46.     delay_ms(5);
  47.     lcd_write_cmd(0x06); // ????
  48.     delay_ms(5);
  49.     lcd_write_cmd(0x01); // ??
  50.     delay_ms(5);
  51. }

  52. // LCD?????
  53. void lcd_display(unsigned char *str) {
  54.     unsigned char i = 0;
  55.     lcd_write_cmd(0x01); // ??
  56.     lcd_write_cmd(0x80); // ?????
  57.     while (str[i] != '\0') {
  58.         lcd_write_data(str[i]);
  59.         i++;
  60.     }
  61. }

  62. // ??????(??SMALLCALC??)
  63. unsigned char key_scan(void) {
  64.     unsigned char key_value = 0xFF;
  65.     unsigned char row, col;
  66.     P1 = 0xF0; // ?????
  67.     if (P1 != 0xF0) { // ?????
  68.         delay_ms(10); // ??
  69.         if (P1 != 0xF0) {
  70.             for (row = 0; row < 4; row++) {
  71.                 P1 = ~(0x01 << row);
  72.                 if ((P1 & 0xF0) != 0xF0) {
  73.                     col = P1 & 0xF0;
  74.                     switch (row) {
  75.                         case 0: // 7 8 9 /
  76.                             if (col == 0xE0) key_value = 7;
  77.                             else if (col == 0xD0) key_value = 8;
  78.                             else if (col == 0xB0) key_value = 9;
  79.                             else if (col == 0x70) key_value = 17; // /
  80.                             break;
  81.                         case 1: // 4 5 6 *
  82.                             if (col == 0xE0) key_value = 4;
  83.                             else if (col == 0xD0) key_value = 5;
  84.                             else if (col == 0xB0) key_value = 6;
  85.                             else if (col == 0x70) key_value = 12; // *
  86.                             break;
  87.                         case 2: // 1 2 3 -
  88.                             if (col == 0xE0) key_value = 1;
  89.                             else if (col == 0xD0) key_value = 2;
  90.                             else if (col == 0xB0) key_value = 3;
  91.                             else if (col == 0x70) key_value = 11; // -
  92.                             break;
  93.                         case 3: // C 0 = +
  94.                             if (col == 0xE0) key_value = 13; // C
  95.                             else if (col == 0xD0) key_value = 0;
  96.                             else if (col == 0xB0) key_value = 15; // =
  97.                             else if (col == 0x70) key_value = 10; // +
  98.                             break;
  99.                     }
  100.                     while ((P1 & 0xF0) != 0xF0); // ????
  101.                     return key_value;
  102.                 }
  103.             }
  104.         }
  105.     }
  106.     return key_value;
  107. }

  108. // ????
  109. void calculate(void) {
  110.     switch (operator) {
  111.         case 1: result = num1 + num2; break;
  112.         case 2: result = num1 - num2; break;
  113.         case 3: result = num1 * num2; break;
  114.         case 4:
  115.             if (num2 != 0) result = num1 / num2;
  116.             else { lcd_display("Error: Div by 0"); return; }
  117.             break;
  118.         default: return;
  119.     }
  120.     sprintf(display_buffer, "Result: %.2f", result);
  121.     lcd_display(display_buffer);
  122. }

  123. // ???
  124. void main(void) {
  125.     unsigned char key;

  126.     lcd_init();
  127.     lcd_display("Calculator Ready");
  128.     delay_ms(1000);

  129.     while (1) {
  130.         key = key_scan();
  131.         if (key != 0xFF) {
  132.             if (key >= 0 && key <= 9) { // ???
  133.                 if (input_state == 0) {
  134.                     if (decimal_flag == 0) {
  135.                         if (num1 < 99999) num1 = num1 * 10 + key;
  136.                     } else if (decimal_count < 2) {
  137.                         decimal_count++;
  138.                         num1 = num1 + key / pow(10, decimal_count);
  139.                     }
  140.                     sprintf(display_buffer, "Num1: %.2f", num1);
  141.                 } else if (input_state == 2) {
  142.                     if (decimal_flag == 0) {
  143.                         if (num2 < 99999) num2 = num2 * 10 + key;
  144.                     } else if (decimal_count < 2) {
  145.                         decimal_count++;
  146.                         num2 = num2 + key / pow(10, decimal_count);
  147.                     }
  148.                     sprintf(display_buffer, "Num2: %.2f", num2);
  149.                 }
  150.                 lcd_display(display_buffer);
  151.             } else if (key >= 10 && key <= 12 || key == 17) { // ???
  152.                 operator = (key == 10) ? 1 : (key == 11) ? 2 : (key == 12) ? 3 : 4;
  153.                 input_state = 2;
  154.                 decimal_flag = 0;
  155.                 decimal_count = 0;
  156.                 sprintf(display_buffer, "Op: %c", "+-*/"[operator-1]);
  157.                 lcd_display(display_buffer);
  158.             } else if (key == 13) { // ??(C)
  159.                 num1 = 0; num2 = 0; result = 0; operator = 0;
  160.                 input_state = 0; decimal_flag = 0; decimal_count = 0;
  161.                 lcd_display("Cleared");
  162.             } else if (key == 14) { // ??(DEL)
  163.                 if (input_state == 0) {
  164.                     if (decimal_count > 0) {
  165.                         decimal_count--;
  166.                         num1 = (unsigned long)(num1 * pow(10, decimal_count)) / pow(10, decimal_count);
  167.                     } else {
  168.                         num1 = num1 / 10;
  169.                     }
  170.                     sprintf(display_buffer, "Num1: %.2f", num1);
  171.                 } else if (input_state == 2) {
  172.                     if (decimal_count > 0) {
  173.                         decimal_count--;
  174.                         num2 = (unsigned long)(num2 * pow(10, decimal_count)) / pow(10, decimal_count);
  175.                     } else {
  176.                         num2 = num2 / 10;
  177.                     }
  178.                     sprintf(display_buffer, "Num2: %.2f", num2);
  179.                 }
  180.                 lcd_display(display_buffer);
  181.             } else if (key == 16) { // ???
  182.                 if (decimal_flag == 0 && input_state != 1) {
  183.                     decimal_flag = 1;
  184.                     decimal_count = 0;
  185.                     sprintf(display_buffer, "%.0f.", input_state == 0 ? num1 : num2);
  186.                     lcd_display(display_buffer);
  187.                 }
  188.             } else if (key == 15) { // ??(=)
  189.                 if (input_state == 2 && operator != 0) {
  190.                     calculate();
  191.                     input_state = 0;
  192.                     num1 = result;
  193.                     num2 = 0;
  194.                     operator = 0;
  195.                     decimal_flag = 0;
  196.                     decimal_count = 0;
  197.                 }
  198.             }
  199.         }
  200.     }
  201. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:69038 發表于 2025-6-20 11:29 | 只看該作者
論壇的基本功能:“搜索功能”,你可以學習一下
回復

使用道具 舉報

板凳
ID:619259 發表于 2025-6-20 17:36 | 只看該作者
程序卡在按鍵掃描程序里,檢查一下按鍵函數
回復

使用道具 舉報

地板
ID:88256 發表于 2025-6-20 18:20 | 只看該作者
復位腳接錯了,把R1和C3的位置對換一下。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表