找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1931|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)超聲波測(cè)距LCD顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:446902 發(fā)表于 2018-12-18 16:41 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
采用了HC-SR04模塊和LCD1602模塊
自己畫的電路板
僅測(cè)量一次,不是動(dòng)態(tài)測(cè)量。采用數(shù)組動(dòng)態(tài)顯示的方法顯示數(shù)據(jù)
電路原理圖如下:

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define Addr 0
  6. uchar ge,shi,num_1 = 0,flag =0,S2= 0;
  7. long time = 0,S = 0;
  8. float S1 = 0;
  9. char table []={"   . cm!         "};
  10. uchar code table1[]={"ce liang zhong! "};
  11. uchar table2 [] = {"distance        "};
  12. void        lcd_w_com(uchar com);
  13. sbit Echo = P2^1 ;
  14. sbit Trig = P2^2 ;
  15. sbit lcden = P2^5;
  16. sbit lcdrw = P2^6;
  17. sbit lcdrs = P2^7;
  18. void count()                                                                                //測(cè)量函數(shù)
  19. {
  20.         while(!Echo);                                                                        //當(dāng)Echo為1,開始計(jì)時(shí)
  21.   TR0=1;
  22.   while(Echo);                                                                        //當(dāng)Echo為0,關(guān)閉計(jì)時(shí)
  23.   TR0=0;
  24.   time=TH0*256+TL0;
  25.   TH0=0;
  26.   TL0=0;
  27.   S=(time*1.7)/100;                                                        //計(jì)算個(gè)十百位
  28.   S1=(time*1.7)/100;
  29.         S2 = (S1-S)*10;                                                         //浮點(diǎn)型減整型得到小數(shù)點(diǎn)后一位
  30. }        
  31. void delayms(xms)
  32. {
  33.         uint i,j;
  34.         for (i = xms; i > 0;i--)
  35.         for (j = 110; j > 0; j--);
  36. }

  37. void check()                                                                        //發(fā)射超聲波
  38. {
  39.         Trig = 0;
  40.         Trig = 1;
  41.     _nop_();_nop_();_nop_();_nop_();_nop_();
  42.     _nop_();_nop_();_nop_();_nop_();_nop_();
  43.     _nop_();_nop_();_nop_();_nop_();_nop_();
  44.     _nop_();_nop_();_nop_();_nop_();_nop_();                                                                //延時(shí)20微秒
  45.         Trig = 0;
  46. }
  47. void Timer0_int()                                                                                                        //定時(shí)器初始化                                                         
  48. {
  49.         TMOD = 0x01;
  50.         TH0 = 0;
  51.         TL0 = 0;
  52.         TF0 = 0;                                                                                                        //中斷溢出標(biāo)志位
  53.         EA  = 1;                                                                                                        //中斷總開關(guān)
  54.         ET0 = 1;
  55. }
  56. void lcd_init()                                                        //LCD初始化
  57. {
  58.         lcd_w_com(0x38);               
  59.         lcd_w_com(0x0c);
  60.         lcd_w_com(0x06);
  61.         lcd_w_com(0x01);
  62. }
  63. void lcd_w_com(uchar com)                                        //LCD寫入命令
  64. {
  65.         lcdrs = 0;                                                //指令寄存
  66.         lcdrw = 0;                                                 //選擇寫
  67.         P0 = com;
  68.         delayms(5);
  69.         lcden = 1;
  70.         lcden = 0;
  71. }
  72. void lcd_w_date(uchar date)                                                //LCD寫入數(shù)據(jù)
  73. {
  74.         lcdrs = 1;
  75.         lcdrw = 0;
  76.         P0 = date;
  77.         delayms(5);
  78.         lcden = 1;
  79.         lcden = 0;
  80. }
  81. void timer0() interrupt 1                                                        //中斷函數(shù),防止超時(shí)
  82. {
  83.         flag = 1;
  84. }
  85. void main()
  86. {
  87.                         uchar n,m;
  88.                         lcd_init();
  89.                         Timer0_int();
  90.                         Trig = 0;
  91.                         flag = 0;
  92.                         check();
  93.                         count();
  94.                         table[Addr] = S/100+0x30;
  95.                         table[Addr+1] = S/10%10+0x30;
  96.                         table[Addr+2] = S%10+0x30;
  97.                         table[Addr+4] = S2+0x30;
  98.                         lcd_w_com(0x80);                                                        //顯示第一行
  99.                         for(n = 0;n < 16;n++)
  100.                         {
  101.                         lcd_w_date(table1[n]);
  102.                         delayms(100);
  103.                         }        
  104.                         lcd_w_com(0x80+0x40);                                //顯示第二行
  105.                         for(m = 0;m < 16;m++)
  106.                         {
  107.                                 lcd_w_date(table[m]);
  108.                                 delayms(100);
  109.                         }
  110.                         lcd_w_com(0x80);
  111.                         for(n=0;n<16;n++)
  112.                         {
  113.                                 lcd_w_date(table2[n]);
  114.                                 delayms(100);
  115.                         }
  116.                         while(1);
  117. }
復(fù)制代碼



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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表