找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

1602顯示AJ-SR04測距單片機(jī)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:519794 發(fā)表于 2019-4-29 11:04 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
  1. //#include<reg51.h>
  2. #include "reg52.h"
  3. #include "1602.h"
  4. #include<intrins.h>

  5. typedef unsigned char uint8;
  6. typedef unsigned int uint16;


  7. sbit Trig=P3^3;//觸發(fā)引腳定義
  8. sbit Echo=P3^2;//測量引腳定義

  9. uint16 distance;//定義全局變量
  10. uint16 dat[10];
  11. /******************************************

  12. 延時(shí)讓Trig引腳產(chǎn)生大于10us的脈沖

  13. ********************************************/
  14. void show_1602(uint16 temp);

  15. void delay()
  16. {
  17.         uint8 i;
  18.         for(i=0;i<100;i++);
  19. }

  20. //初始化

  21. void init()

  22. {
  23.         EA=1;//開總中斷
  24.         IT0=0;//外部中斷0,低電平觸發(fā)
  25.         TMOD|=0x01;//定時(shí)器0 工作模式1
  26.         TH0=0;
  27.         TL0=0;
  28.         TR0=0;
  29. }

  30. //串口設(shè)置

  31. void UART_init()
  32. {
  33.         SCON=0x50;
  34.         TMOD=0x20;
  35.         TH1=0xFD;
  36.         TL1=0xFD;
  37.         TR1=1;
  38. }
  39. //發(fā)送一個(gè)字節(jié)
  40. void UART_send_byte(uint8 dat)

  41. {
  42.         SBUF=dat;
  43.         while(TI==0);
  44.         TI=0;
  45. }

  46. //發(fā)送一組測得的distance

  47. void UART_send_dat(uint16 temp)

  48. {

  49.         UART_send_byte((temp/10000)%10 + '0');
  50.         UART_send_byte((temp/1000)%10 + '0');
  51.         UART_send_byte((temp/100)%10 + '0');
  52.         UART_send_byte((temp/10)%10 + '0');
  53.   UART_send_byte('.');
  54.         UART_send_byte(temp%10 + '0');
  55.         UART_send_byte('c');
  56.         UART_send_byte('m');

  57. }

  58. //主函數(shù)

  59. main()

  60. {
  61.         UART_init();//初始化
  62.         init();        //初始化
  63.         lcd_init_1602(); //1206初始化
  64.         
  65.         Trig=0;//先把引腳拉低
  66.         while(1)//進(jìn)入循環(huán)

  67.         {
  68.                 Trig=1;
  69.                 delay();//產(chǎn)生脈沖
  70.                 Trig=0;
  71.                 while(Echo==0);//等待引腳被拉高
  72.                 TR0=1;//打開定時(shí)器0
  73.                 EX0=1;//打開中斷
  74.                 while(TH0<250);//正在測量數(shù)據(jù),需要等待
  75.                 TR0=0;
  76.           TL0=0;
  77.                 TH0=0;
  78.                
  79.                 UART_send_dat(distance); //向串口發(fā)送測得的distance        
  80.                 show_1602(distance);
  81.                
  82.                 UART_send_byte('\r');
  83.                 UART_send_byte('\n');
  84.         }
  85. }

  86. void extra_interrupt() interrupt 0        //外部中斷0
  87. {
  88.         distance=(256*TH0+TL0)*0.184;//測得最小精度位mm(晶振為11059200Hz)
  89.         //P0=Echo;
  90.         EX0=0;//關(guān)閉中斷
  91. }



  92. void show_1602(uint16 temp)
  93. {        
  94.         lcd_pos_1602(0,1);
  95.         dat[0]=(temp/10000)%10;
  96.         dat[1]=(temp/1000)%10;
  97.         dat[2]=(temp/100)%10;
  98.         dat[3]=(temp/10)%10;
  99.         lcd_wdat_1602(dat[0]+0x30);
  100.         lcd_wdat_1602(dat[1]+0x30);
  101.         
  102.         lcd_pos_1602(0,3);
  103.         lcd_wdat_1602('.');
  104.         
  105.         lcd_pos_1602(0,4);
  106.         lcd_wdat_1602(dat[2]+0x30);
  107.         lcd_wdat_1602(dat[3]+0x30);
  108.         
  109. //        lcd_pos_1602(0,5);
  110. //        lcd_wdat_1602('.');
  111.         
  112.         lcd_pos_1602(0,6);
  113.         dat[4]=temp%10;
  114.         lcd_wdat_1602(dat[4]+0x30);
  115.         
  116.         lcd_pos_1602(0,7);
  117. //        lcd_wdat_1602('c');
  118.   lcd_wdat_1602('m');
  119. }
復(fù)制代碼

所有資料51hei提供下載:
代碼.zip (51.03 KB, 下載次數(shù): 8)


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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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