久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

弄的這個超聲波測距運行不了,求解答

[復制鏈接]
跳轉到指定樓層
樓主
ID:1148171 發(fā)表于 2025-4-15 21:28 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用的是STC89C52RC,功能都沒有反應
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int            
  4. #include <intrins.h>
  5. #include "eeprom52.h"


  6. uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,0x64,0x38,0xfd,
  7.                   0x60,0x25,0x39,0x26,0x31,0x71,0xff};

  8. uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};


  9. sbit smg_we1 = P3^4;         
  10. sbit smg_we2 = P3^5;
  11. sbit smg_we3 = P3^6;
  12. sbit smg_we4 = P3^7;

  13. sbit c_send   = P3^2;        
  14. sbit c_recive = P3^3;               

  15. sbit beep = P2^3;           
  16. uchar smg_i = 3;           
  17. bit flag_300ms;

  18. long distance;                  
  19. uint set_upper = 400;      
  20. uint set_lower = 1;         
  21. uchar flag_csb_juli;        
  22. uint flag_time0;

  23. uchar menu_1;               


  24. void delay_1ms(uint q)
  25. {
  26.         uint i,j;
  27.         for(i=0;i<q;i++)
  28.                 for(j=0;j<120;j++);
  29. }


  30. void smg_display() {
  31.     if(menu_1 == 0) {
  32.         dis_smg[0] = smg_du[distance % 10];
  33.         dis_smg[1] = smg_du[distance / 10 % 10];
  34.         dis_smg[2] = smg_du[distance / 100 % 10] & 0xdf;
  35.     }
  36.     else if(menu_1 == 1) {
  37.         dis_smg[0] = smg_du[set_upper % 10];
  38.         dis_smg[1] = smg_du[set_upper / 10 % 10];
  39.         dis_smg[2] = smg_du[set_upper / 100 % 10] & 0xdf;
  40.         dis_smg[3] = smg_du[10];
  41.     }
  42.     else if(menu_1 == 2) {
  43.         dis_smg[0] = smg_du[set_lower % 10];
  44.         dis_smg[1] = smg_du[set_lower / 10 % 10];
  45.         dis_smg[2] = smg_du[set_lower / 100 % 10] & 0xdf;
  46.         dis_smg[3] = smg_du[11];
  47.     }
  48. }


  49. void write_eeprom() {
  50.     SectorErase(0x2000);
  51.     byte_write(0x2000, set_upper % 256);   
  52.     byte_write(0x2001, set_upper / 256);   
  53.     byte_write(0x2002, set_lower % 256);   
  54.     byte_write(0x2003, set_lower / 256);
  55.     byte_write(0x2058, a_a);        
  56. }

  57. void read_eeprom() {
  58.     set_upper  = byte_read(0x2001);
  59.     set_upper <<= 8;
  60.     set_upper  |= byte_read(0x2000);
  61.     set_lower  = byte_read(0x2003);
  62.     set_lower <<= 8;
  63.     set_lower  |= byte_read(0x2002);
  64.     a_a = byte_read(0x2058);
  65. }


  66. void init_eeprom() {
  67.     read_eeprom();
  68.     if(a_a != 1) { //首次初始化
  69.         set_upper = 300;
  70.         set_lower = 30;
  71.         a_a = 1;
  72.         write_eeprom();
  73.     }        
  74. }


  75. sbit KEY_SET = P2^0;
  76. sbit KEY_ADD = P2^1;
  77. sbit KEY_SUB = P2^2;

  78. void key() {
  79.     static uchar key_new;
  80.     key_can = 20;
  81.     if(KEY_SET == 0 || KEY_ADD == 0 || KEY_SUB == 0) {
  82.         delay_1ms(1);
  83.         if((KEY_SET == 0 || KEY_ADD == 0 || KEY_SUB == 0) && (key_new == 1)) {
  84.             key_new = 0;
  85.             if(KEY_SET == 0) key_can = 1;     
  86.             else if(KEY_ADD == 0) key_can = 2;
  87.             else if(KEY_SUB == 0) key_can = 3;
  88.         }
  89.     } else {
  90.         key_new = 1;
  91.     }
  92. }


  93. void key_with() {
  94.     if(key_can == 1) {
  95.         menu_1++;
  96.         if(menu_1 > 2) {
  97.             menu_1 = 0;
  98.             smg_i = 3;
  99.         } else if(menu_1 == 1) {
  100.             smg_i = 4;
  101.         } else if(menu_1 == 2) {
  102.             smg_i = 4;
  103.         }
  104.     }
  105.     if(menu_1 == 1) {
  106.         if(key_can == 2) {
  107.             set_upper = (set_upper >= 400) ? 400 : set_upper + 1;
  108.         } else if(key_can == 3) {
  109.             set_upper = (set_upper <= 1) ? 1 : set_upper - 1;
  110.         }
  111.         write_eeprom();
  112.     } else if(menu_1 == 2) {
  113.         if(key_can == 2) {
  114.             set_lower = (set_lower >= 400) ? 400 : set_lower + 1;
  115.         } else if(key_can == 3) {
  116.             set_lower = (set_lower <= 1) ? 1 : set_lower - 1;
  117.         }
  118.                 dis_smg[0] = smg_du[set_d % 10];                  
  119.                 dis_smg[1] = smg_du[set_d / 10 % 10] ;        
  120.                 dis_smg[2] = smg_du[set_d / 100 % 10] & 0xdf ;
  121.                 dis_smg[3] = 0x60;                //a
  122.         write_eeprom();
  123.     }
  124. }


  125. void clock_h_l() {
  126.     static uchar value;
  127.     if(distance >= set_upper || distance <= set_lower) {
  128.         value++;
  129.         if(value >= 2) {
  130.             beep = ~beep;
  131.         }
  132.     } else {
  133.         value = 0;
  134.         beep = 1;
  135.     }
  136. }



  137. void smg_we_switch(uchar i)
  138. {
  139.         switch(i)
  140.         {
  141.                 case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
  142.                 case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
  143.                 case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
  144.                 case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
  145.         }        
  146. }

  147. void display()
  148. {
  149.         static uchar i;   
  150.         i++;
  151.         if(i >= smg_i)
  152.                 i = 0;        
  153.         smg_we_switch(i);               
  154.         P1 = dis_smg[i];                       
  155. }

  156. void delay()
  157. {
  158.         _nop_();                        
  159.         _nop_();
  160.         _nop_();
  161.         _nop_();
  162.         _nop_();
  163.         _nop_();
  164.         _nop_();
  165.         _nop_();
  166.         _nop_();  
  167.         _nop_();
  168. }


  169. void send_wave()
  170. {
  171.         c_send = 1;                          
  172.         delay();
  173.         c_send = 0;         
  174.         TH0 = 0;                          
  175.         TL0 = 0;
  176.         TR0 = 0;                                
  177.         while(!c_recive);                 
  178.         TR0=1;
  179.         while(c_recive)                     
  180.         {
  181.                 flag_time0 = TH0 * 256 + TL0;
  182.                 if((flag_time0 > 40000))      
  183.                 {
  184.                         TR0 = 0;
  185.                         flag_csb_juli = 2;
  186.                         distance = 888;
  187.                         break ;               
  188.                 }
  189.                 else
  190.                 {
  191.                         flag_csb_juli = 1;        
  192.                 }
  193.         }
  194.         if(flag_csb_juli == 1)
  195.         {        
  196.                 TR0=0;                                                         
  197.                 distance =flag_time0;                        
  198.                 distance *= 0.017;              
  199.                 if((distance > 500))                                 
  200.                 {        
  201.                         distance = 888;                                
  202.                 }
  203.         }  
  204. }


  205. void time_init()         
  206. {
  207.         EA  = 1;                  
  208.         TMOD = 0X11;
  209.         ET0 = 0;                  
  210.         TR0 = 1;                 
  211.         ET1 = 1;                 
  212.         TR1 = 1;                 
  213. }


  214. void main() {
  215.     beep = 0;
  216.     delay_1ms(150);
  217.     P0 = P1 = P2 = P3 = 0xff;
  218.     time_init();
  219.     init_eeprom();
  220.     while(1) {
  221.         if(flag_300ms) {
  222.             flag_300ms = 0;
  223.             clock_h_l();
  224.             if(beep == 1) send_wave();
  225.             if(menu_1 == 0) smg_display();
  226.         }
  227.         key();
  228.         if(key_can < 10) key_with();
  229.     }
  230. }


  231. void time1_int() interrupt 3
  232. {        
  233.         static uchar value;                        
  234.         TH1 = 0xf8;
  235.         TL1 = 0x30;   
  236.         display();               
  237.         value++;
  238.         if(value >= 150)
  239.         {
  240.                 value = 0;
  241.                 flag_300ms = 1;
  242.         }
  243. }


復制代碼



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

使用道具 舉報

沙發(fā)
ID:108361 發(fā)表于 2025-4-16 16:49 | 只看該作者
給原理圖,你貼上來的PCB的圖誰知道是啥啊
回復

使用道具 舉報

板凳
ID:1148171 發(fā)表于 2025-4-16 20:23 | 只看該作者
powerdruy 發(fā)表于 2025-4-16 16:49
給原理圖,你貼上來的PCB的圖誰知道是啥啊

原理圖是這個

63C3B@~F8BAU8PV{JVOUY{O.png (108.22 KB, 下載次數: 0)

63C3B@~F8BAU8PV{JVOUY{O.png
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精彩视频 | 超碰电影 | 亚洲欧美一区二区三区情侣bbw | 91av在线免费看 | 日本黄色大片免费看 | 欧美日韩亚洲视频 | 日韩高清国产一区在线 | 精品国产乱码久久久久久蜜柚 | 亚洲国产精品一区二区www | 蜜桃av一区二区三区 | 日本久久网 | 在线观看欧美日韩视频 | 中文字幕av第一页 | 一级黄色片免费在线观看 | 天堂中文av | 国产色婷婷久久99精品91 | 日韩精品专区在线影院重磅 | 美女131mm久久爽爽免费 | 亚洲黄色视屏 | 欧美激情国产精品 | 一级毛片视频 | 日本精品视频一区二区 | 日本精品久久 | 色爱区综合 | 国产女人与拘做受视频 | 91av亚洲| 电影午夜精品一区二区三区 | 日日欧美 | 中文字幕一区在线观看视频 | 日韩和的一区二在线 | 亚洲精品日本 | 国产在线小视频 | 国产成人精品在线 | 午夜天堂精品久久久久 | 成人在线精品 | 97精品国产| 一级毛片免费视频 | 黄色精品| 色婷婷精品国产一区二区三区 | 亚洲国产精品一区 | 日韩成人在线电影 |