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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機超聲波數據不能測量成功

[復制鏈接]
跳轉到指定樓層
樓主
不知道為什么我的超聲波測距程序不成功,只能得到錯誤的結果,改怎么解決呢


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <lcd.h>


  4. #define uchar unsigned char
  5. #define uint unsigned int
  6.         
  7. sbit key1=P3^0;  //設置鍵
  8. sbit key2=P3^1;  //加鍵
  9. sbit key3=P3^2;  //減鍵
  10. sbit key4=P3^3;  //開始鍵


  11. sbit beep=P2^4;


  12. sbit trig=P1^7;
  13. sbit echo=P1^6;


  14. sbit RS=P2^0;
  15. sbit RW=P2^1;
  16. sbit EN=P2^2;


  17. uchar djshi,djfen=1,djmiao=8;
  18. uchar r,num,s,i;
  19. uchar distance,t;
  20. bit flag=0;
  21. bit flag1s=0;


  22. uchar code table1[]={"time: 00:00:00  "};
  23. uchar code table2[]={"                "};
  24. uchar code table3[13]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};
  25. uchar code table4[]={"xdz:"};
  26. uchar cc[4]={0,0,0,0};




  27. void startmodule();
  28. void start();
  29. void count();


  30. void LcdInit()                                                  //LCD初始化子程序
  31. {
  32.                 uchar i;
  33.                 lcd_writecom(0x38);  //開顯示
  34.                 lcd_writecom(0x0c);  //開顯示不顯示光標
  35.                 lcd_writecom(0x06);  //寫一個指針加1
  36.                 lcd_writecom(0x01);  //清屏
  37.         
  38.                 lcd_writecom(0x80);  //設置數據指針起點
  39.                 for(i=0;i<16;i++)
  40.                 {
  41.                                 lcd_writedate(table1[i]);[/i][i]
  42.                 }
  43.         
  44. }        




  45. void Timer0Init(void)                //
  46. {
  47.         
  48.                 TMOD |= 0x01;                //使用定時器T0的模式1  定時器T1的模式1
  49.                 TL0 = 15536%256;                //設置定時0初值
  50.                 TH0 = 15536/256;                //設置定時0初值
  51.                 TR0 = 1;                //定時器0開始計時
  52.                 ET0=1;
  53.                 EA=1;
  54. }


  55. void Timer1Init(void)                //
  56. {
  57.         
  58.                 TMOD |= 0x10;                //使用定時器T0的模式1  定時器T1的模式1
  59.                 TL1 = 0;                //設置定時0初值
  60.                 TH1 = 0;                //設置定時0初值
  61.         TF1=0;
  62.                 TR1 = 1;                //定時器0開始計時
  63.                 ET0=1;
  64.                 EA=1;
  65. }








  66. void Delay1ms(uint n)
  67. {
  68.    uint x,y;
  69.     for(x=n;x>0;x--)
  70.          for(y=110;y>0;y--);
  71. }


  72.                         


  73. void write_sfm(uchar add,uchar date)
  74. {
  75.                 lcd_writecom(0x80+add);
  76.                 lcd_writedate(date/10+0x30);
  77.                 lcd_writedate(date%10+0x30);
  78.                 lcd_writecom(0x80+add+1);
  79. }




  80. void keyscan()
  81. {
  82.                 if(key1==0)
  83.                 {
  84.                                 Delay1ms(5);
  85.                                 if(key1==0)
  86.                                 {        
  87.                                                 num++;        
  88.                                                 TR0=0;
  89.                                                 while(!key1);
  90.                                                 if(num==1)
  91.                                                 {
  92.                                                                 lcd_writecom(0x0f);
  93.                                                                 lcd_writecom(0x8D);
  94.                                                 }
  95.                                                 if(num==2)
  96.                                                 {
  97.                                                                 lcd_writecom(0x8A);
  98.                                                 }
  99.                                                 if(num==3)
  100.                                                 {
  101.                                                                
  102.                                                                 lcd_writecom(0x87);
  103.                                                 }
  104.                                                 if(num==4)
  105.                                                 {
  106.                                                         num=0;
  107.                                                 }
  108.                                                 
  109.                         }
  110.                 }
  111.                 if(num==1)
  112.                 {
  113.                                 if(key2==0)
  114.                                 {
  115.                                                 Delay1ms(5);
  116.                                                 if(key2==0)
  117.                                                 {
  118.                                                                 djmiao++;
  119.                                                                 while(!key2);        
  120.                                                                 if(djmiao==60)
  121.                                                                         djmiao=0;
  122.                                                                 lcd_writecom(0x8c);
  123.                                                                 lcd_writedate(djmiao/10+0x30);
  124.                                                                 lcd_writedate(djmiao%10+0x30);
  125.                                                                 lcd_writecom(0x8D);
  126.                                                 }
  127.                                                 
  128.                                 }
  129.                                 if(key3==0)
  130.                                 {
  131.                                                 Delay1ms(5);
  132.                                                 if(key3==0)
  133.                                                 {
  134.                                                                 djmiao--;
  135.                                                                 while(!key3);
  136.                                                                 if(djmiao==255)
  137.                                                                         djmiao=59;
  138.                                                                 lcd_writecom(0x8c);
  139.                                                                 lcd_writedate(djmiao/10+0x30);
  140.                                                                 lcd_writedate(djmiao%10+0x30);        
  141.                                                                 lcd_writecom(0x8D);
  142.                                                 }
  143.                                        
  144.                                 }
  145.                 }
  146.                 if(num==2)
  147.                 {
  148.                                 if(key2==0)
  149.                                 {
  150.                                                 Delay1ms(5);
  151.                                                 if(key2==0)
  152.                                                 {
  153.                                                                 djfen++;
  154.                                                                 while(!key2);
  155.                                                                 if(djfen==60)
  156.                                                                         djfen=0;
  157.                                                                 lcd_writecom(0x89);
  158.                                                                 lcd_writedate(djfen/10+0x30);
  159.                                                                 lcd_writedate(djfen%10+0x30);        
  160.                                                                 lcd_writecom(0x8A);
  161.                                                 }
  162.                                        
  163.                                 }
  164.                                 if(key3==0)
  165.                                 {
  166.                                                 Delay1ms(5);
  167.                                                 if(key3==0)
  168.                                                 {
  169.                                                                 djfen--;
  170.                                                         while(!key3);
  171.                                                                 if(djfen==255)
  172.                                                                         djfen=59;
  173.                                                                 lcd_writecom(0x89);
  174.                                                                
  175.                                                                 lcd_writedate(djfen/10+0x30);
  176.                                                                 lcd_writedate(djfen%10+0x30);        
  177.                                                                 lcd_writecom(0x8A);
  178.                                                 }
  179.                                 }
  180.                 }
  181.                 if(num==3)
  182.                 {
  183.                                 if(key2==0)
  184.                                 {
  185.                                                 Delay1ms(5);
  186.                                                 if(key2==0)
  187.                                                 {
  188.                                                                 djshi++;
  189.                                                                 while(!key2);
  190.                                                                 if(djshi==24)
  191.                                                                         djshi=0;
  192.                                                                 lcd_writecom(0x86);
  193.                                                                 lcd_writedate(djshi/10+0x30);
  194.                                                                 lcd_writedate(djshi%10+0x30);        
  195.                                                                 lcd_writecom(0x87);
  196.                                                 }
  197.                                                 
  198.                                 }
  199.                                 if(key3==0)
  200.                                 {
  201.                                                 Delay1ms(5);
  202.                                                 if(key3==0)
  203.                                                 {
  204.                                                                 djshi--;
  205.                                                                 while(!key3);
  206.                                                                 if(djshi==255)
  207.                                                                         djshi=23;
  208.                                                                 lcd_writecom(0x86);
  209.                                                                 lcd_writedate(djshi/10+0x30);
  210.                                                                 lcd_writedate(djshi%10+0x30);        
  211.                                                                 lcd_writecom(0x87);
  212.                                                 }
  213.                                 }
  214.                 }
  215.                 if(key4==0)
  216.                 {
  217.                                 Delay1ms(5);
  218.                                 if(key4==0)
  219.                                 {
  220.                                                                 TR0=1;
  221.                                         lcd_writecom(0x0c);
  222.                                                 
  223.                                 }
  224.                                 
  225.                 }
  226. }


  227. void fmq()
  228. {
  229.         beep=1;
  230.         Delay1ms(5);
  231.         beep=0;
  232.         Delay1ms(5);
  233. }






  234. void main()
  235. {
  236.         
  237.                 LcdInit();
  238.                 Timer0Init();
  239.           Timer1Init();
  240.         
  241.                 trig=0;
  242.         
  243.         
  244.         
  245.                 while(1)
  246.                 {
  247.                         if(flag1s)
  248.                         {
  249.                                 flag1s=0;
  250.                                         startmodule();
  251.                         start();
  252.                         count();        
  253.                         }
  254.                
  255.                         keyscan();
  256.                                 
  257.                                 if(djshi==0 && djfen==0 &&djmiao==0)  //倒計時時間到
  258.                                 {
  259.                                                 TR0=0;          //停止計時
  260.                                           fmq();
  261.                                 }        
  262.                                 
  263.                 }
  264.                
  265. }








  266. void Timer0() interrupt 1
  267. {
  268.         
  269.                 TL0 = 15536%256;                //設置定時初值
  270.                 TH0 = 15536/256;                //設置定時初值
  271.                 r++;
  272.                 if(r==20)
  273.                 {
  274.                                 r=0;
  275.                                 djmiao--;
  276.                                 if(djmiao==255)
  277.                                 {
  278.                                                 djmiao=59;
  279.                                                 djfen--;
  280.                                                 if(djfen==255)
  281.                                                 {
  282.                                                                 djfen=59;
  283.                                                                 djshi--;
  284.                                                                 if(djshi==255)
  285.                                                                 {
  286.                                                                                 djshi=0;
  287.                                                                 }
  288.                                                                 if(djshi==0)
  289.                                                                 djfen=59;
  290.                                                                 if(djfen==0&djshi==0)
  291.                                                                         djfen=0;
  292.                                                                 write_sfm(6,djshi);
  293.                                                 }
  294.                                                 write_sfm(9,djfen);        
  295.                                         }
  296.                                         write_sfm(12,djmiao);
  297.                                         flag1s=1;
  298.                         }        
  299. }               








  300. void startmodule()
  301. {
  302.                 trig=1;
  303.         
  304.                 _nop_(); _nop_(); _nop_(); _nop_();
  305.           _nop_(); _nop_(); _nop_(); _nop_();
  306.           _nop_(); _nop_(); _nop_(); _nop_();
  307.           _nop_(); _nop_(); _nop_(); _nop_();
  308.           _nop_(); _nop_(); _nop_(); _nop_();
  309.           _nop_(); _nop_(); _nop_(); _nop_();
  310.         
  311.                 trig=0;
  312.         
  313. }


  314. void start()
  315. {
  316.                    while(!echo);                //當Echo為零時等待
  317.              TR1=1;                            //開啟
  318.              while(echo);                //當Echo為1計數并等待
  319.              TR1=0;                                //關閉




  320. }


  321. void count()
  322. {
  323.         t=TH1*256+TL1;
  324.         TH1=0;
  325.         TL1=0;
  326.         distance=t/58.0;
  327.         cc[0]=distance/1000%10;
  328.         cc[1]=distance/100%10;
  329.         cc[2]=distance/10%10;
  330.         cc[3]=distance/1%10;
  331.         lcd_writechar(1, 1, table3[cc[0]]);
  332.         lcd_writechar(2, 1, table3[cc[1]]);
  333.         lcd_writechar(3, 1, table3[cc[2]]);
  334.         lcd_writechar(4, 1, table3[cc[3]]);
  335. }
復制代碼




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

使用道具 舉報

沙發
ID:1005855 發表于 2022-4-11 10:11 | 只看該作者
有沒有好心人大佬幫我看一看那
回復

使用道具 舉報

板凳
ID:161164 發表于 2022-4-11 11:04 | 只看該作者
29行改為uint distance,t;
回復

使用道具 舉報

地板
ID:213173 發表于 2022-4-11 11:31 | 只看該作者
lj2443454061 發表于 2022-4-11 10:11
有沒有好心人大佬幫我看一看那

參考:http://www.zg4o1577.cn/bbs/dpj-183551-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 欧美 日韩在线 | 91一区二区| 中文在线视频 | 成人免费视频网站在线看 | 日韩视频二区 | 91国在线高清视频 | 91麻豆精品国产91久久久更新资源速度超快 | 国产免费一区二区 | 国产999精品久久久影片官网 | 亚洲成人一级 | 99精品一区二区 | 日本在线网站 | 欧美一区二区小视频 | 精品国产一区二区三区性色av | 久久中文字幕一区 | 黄色日批视频 | 一本一道久久a久久精品蜜桃 | 伊人影院99 | 欧美一区二区三区在线观看 | 在线精品亚洲欧美日韩国产 | 免费的一级视频 | 成人在线精品 | 日韩欧美第一页 | 日韩av大片免费看 | 免费午夜电影 | 日日夜夜免费精品视频 | 日韩一级免费电影 | 久久久久久九九九九 | 欧美在线视频网 | 日本a在线 | 国产免费拔擦拔擦8x高清 | 国产在线一区二区 | 日韩欧美中文 | 日韩精品一区二区三区视频播放 | 欧美日韩国产一区二区三区 | 国产精品爱久久久久久久 | 在线色网站 | 成人亚洲精品久久久久软件 | 风间由美一区二区三区在线观看 | 91精品国产综合久久久久 | 中文字幕蜜臀av |