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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

在原理圖基礎上添加蜂鳴器 怎么修改電路以及單片機代碼?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1125014 發表于 2025-12-21 14:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
80黑幣


在原圖基礎上添加蜂鳴器,運行完蜂鳴器報警,代碼:

  1. #include <reg52.H>#include <intrins.h>

  2. #define uchar   unsigned char
  3. #define uint    unsigned int

  4. sbit LCD_RS = P2^0;  
  5. sbit LCD_RW = P2^1;  
  6. sbit LCD_EN = P2^2;  
  7. #define LCD_DATA P0   

  8. void delayms(unsigned int x);      
  9. uint key(void);                     
  10. void deplay(uchar j_p);            
  11. void deplay_s(long a);              
  12. void lcd_wcmd(uchar cmd);           
  13. void lcd_wdat(uchar dat);           
  14. void lcd_init(void);               
  15. void lcd_clr(void);                 
  16. void show_error(void);  

  17. long  a = 0, b = 0;
  18. uchar flat = 0;
  19. bit   neg_flag = 0;

  20. void delayms(unsigned int x)
  21. {
  22.     uchar i;
  23.     while(x--)
  24.     {
  25.         for(i = 0; i < 120; i++);   
  26.     }
  27. }

  28. void lcd_wcmd(uchar cmd)
  29. {
  30.     LCD_RS = 0;  
  31.     LCD_RW = 0;  
  32.     LCD_DATA = cmd;
  33.     delayms(1);
  34.     LCD_EN = 1;  
  35.     delayms(1);
  36.     LCD_EN = 0;  
  37. }

  38. void lcd_wdat(uchar dat)
  39. {
  40.     LCD_RS = 1;  
  41.     LCD_RW = 0;  
  42.     LCD_DATA = dat;
  43.     delayms(1);
  44.     LCD_EN = 1;  
  45.     delayms(1);
  46.     LCD_EN = 0;
  47. }

  48. void lcd_init(void)
  49. {
  50.     delayms(10);         
  51.     lcd_wcmd(0x38);      
  52.     lcd_wcmd(0x0c);      
  53.     lcd_wcmd(0x06);      
  54.     lcd_wcmd(0x01);      
  55.     delayms(2);
  56. }

  57. void lcd_clr(void)
  58. {
  59.     lcd_wcmd(0x01);      
  60.     delayms(2);           
  61.     lcd_wcmd(0x80);      
  62.     neg_flag = 0;         
  63. }

  64. void show_error(void)
  65. {
  66.     lcd_clr();                  
  67.     lcd_wdat('e');
  68.     lcd_wdat('r');
  69.     lcd_wdat('r');
  70.     lcd_wdat('o');
  71.     delayms(1000);              
  72.     lcd_clr();                  
  73.     a = 0; b = 0; flat = 0; neg_flag = 0;
  74. }

  75. uint key(void)
  76. {
  77.     uchar h = 0, l = 0;  
  78.     uchar j_p = -1;      

  79.     P1 = 0x0f;           
  80.     if(P1 != 0x0f)      
  81.     {
  82.         delayms(5);      
  83.         if(P1 != 0x0f)   
  84.         {
  85.             l = P1 & 0x0f;  
  86.             P1 = 0xf0;     
  87.             delayms(2);
  88.             h = P1 & 0xf0;  

  89.             switch(l | h)
  90.             {
  91.                 case 0x7e: j_p = 0;    break;
  92.                 case 0x7d: j_p = 1;    break;
  93.                 case 0x7b: j_p = 2;    break;
  94.                 case 0x77: j_p = 3;    break;
  95.                 case 0xbe: j_p = 4;    break;
  96.                 case 0xbd: j_p = 5;    break;
  97.                 case 0xbb: j_p = 6;    break;
  98.                 case 0xb7: j_p = 7;    break;
  99.                 case 0xde: j_p = 8;    break;
  100.                 case 0xdd: j_p = 9;    break;
  101.                 case 0xdb: j_p = '+';  break;
  102.                 case 0xd7: j_p = '-';  break;
  103.                 case 0xee: j_p = '=';  break;
  104.                 case 0xed: j_p = '*';  break;
  105.                 case 0xeb: j_p = '/';  break;
  106.                 case 0xe7: j_p = 'c';  break;
  107.                 case 0xec: j_p = '±';  break;
  108.                 default:   j_p = -1;   break;
  109.             }

  110.             P1 = 0x0f;
  111.             while(P1 != 0x0f)
  112.             {
  113.                 delayms(1);
  114.             }
  115.         }
  116.     }
  117.     return j_p;
  118. }

  119. void deplay(uchar j_p)
  120. {
  121.     if(j_p != -1)
  122.     {
  123.         if(j_p >= 0 && j_p <= 9)
  124.         {
  125.             j_p += 48;
  126.         }
  127.         lcd_wdat(j_p);
  128.     }
  129. }

  130. void deplay_s(long a)
  131. {
  132.     int n[20] = {0};
  133.     uint i = 0;
  134.     bit is_neg = 0;

  135.     if(a < 0)
  136.     {
  137.         is_neg = 1;
  138.         a = -a;
  139.     }

  140.     if(a == 0)
  141.     {
  142.         deplay(0);
  143.         return;
  144.     }

  145.     while(a)
  146.     {
  147.         n[i] = a % 10;
  148.         a /= 10;
  149.         i++;
  150.     }

  151.     if(is_neg)
  152.     {
  153.         lcd_wdat('-');
  154.     }

  155.     while(i > 0)
  156.     {
  157.         deplay(n[--i]);
  158.     }
  159. }

  160. void main(void)
  161. {
  162.     uchar jp = -1;

  163.     delayms(20);
  164.     lcd_init();        
  165.     lcd_clr();        

  166.     while(1)
  167.     {
  168.         jp = -1;
  169.         while(jp == -1)
  170.         {
  171.             jp = key();
  172.         }

  173.         if(jp == 'c')
  174.         {
  175.             a = 0;         
  176.             b = 0;         
  177.             flat = 0;      
  178.             neg_flag = 0;  
  179.             lcd_clr();     
  180.             jp = -1;
  181.             continue;      
  182.         }

  183.         if(jp != '±')
  184.         {
  185.             deplay(jp);
  186.         }

  187.         switch(jp)
  188.         {
  189.             case '=':
  190.                 switch(flat)
  191.                 {
  192.                     case '+': a = b + a; break;         
  193.                     case '-': a = b - a; break;         
  194.                     case '*': a = (long)b * a; break;   
  195.                     case '/':
  196.                         if(a != 0)                     
  197.                             a = b / a;
  198.                         else
  199.                             show_error();
  200.                         break;
  201.                     default: break;
  202.                 }
  203.                 deplay_s(a);
  204.                 neg_flag = 0;
  205.                 break;

  206.             case '+': flat = '+'; b = a; a = 0; neg_flag = 0; break;
  207.             case '-': flat = '-'; b = a; a = 0; neg_flag = 0; break;
  208.             case '*': flat = '*'; b = a; a = 0; neg_flag = 0; break;
  209.             case '/': flat = '/'; b = a; a = 0; neg_flag = 0; break;

  210.             case '±':
  211.                 neg_flag = !neg_flag;
  212.                 a = -a;
  213.                 lcd_clr();
  214.                 deplay_s(a);
  215.                 break;

  216.             case 0: case 1: case 2: case 3: case 4:
  217.             case 5: case 6: case 7: case 8: case 9:
  218.                 if(!neg_flag && a >= 100)
  219.                 {
  220.                     show_error();
  221.                     break;
  222.                 }
  223.                 if(neg_flag && a <= -100)
  224.                 {
  225.                     show_error();
  226.                     break;
  227.                 }

  228.                 if(neg_flag)
  229.                 {
  230.                     a = a * 10 - jp;
  231.                 }
  232.                 else
  233.                 {
  234.                     a = a * 10 + jp;
  235.                 }
  236.                 break;

  237.             default: break;
  238.         }
  239.         jp = -1;
  240.     }
  241. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2025-12-21 16:25 | 只看該作者
你這個運行完就沒有描述清楚,單片機程序是循環運行的,永遠不會運行完成,只是在運行時不斷檢測狀態的變化,加上蜂鳴器報警,報什么警呢?也許你想的情況是單片機不運行了(死機)報警,而報警也是只有單片機運行時才能報警(控制蜂鳴器的驅動電流發生變化),所以你這樣的問題無解
回復

使用道具 舉報

板凳
ID:1159343 發表于 2025-12-22 08:08 | 只看該作者
應該是按鍵有輸入時蜂鳴器響一下吧,拿一個輸出口接蜂鳴器,程序里檢測到按鍵有動作就給蜂鳴器一個短時間的信號。
回復

使用道具 舉報

地板
ID:1125014 發表于 2025-12-22 15:04 | 只看該作者
不用了,我自己昨天改完了
回復

使用道具 舉報

5#
ID:584814 發表于 2025-12-22 15:52 | 只看該作者
mjnwlp 發表于 2025-12-22 15:04
不用了,我自己昨天改完了

是猴子派來一逗13的么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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