找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1344|回复: 0
打印 上一主题 下一主题
收起左侧

1602显示AJ-SR04测距单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:519794 发表于 2019-4-29 11:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  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;//触发引脚定义
  8. sbit Echo=P3^2;//测量引脚定义

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

  12. 延时让Trig引脚产生大于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,低电平触发
  25.         TMOD|=0x01;//定时器0 工作模式1
  26.         TH0=0;
  27.         TL0=0;
  28.         TR0=0;
  29. }

  30. //串口设置

  31. void UART_init()
  32. {
  33.         SCON=0x50;
  34.         TMOD=0x20;
  35.         TH1=0xFD;
  36.         TL1=0xFD;
  37.         TR1=1;
  38. }
  39. //发送一个字节
  40. void UART_send_byte(uint8 dat)

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

  46. //发送一组测得的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. //主函数

  59. main()

  60. {
  61.         UART_init();//初始化
  62.         init();        //初始化
  63.         lcd_init_1602(); //1206初始化
  64.         
  65.         Trig=0;//先把引脚拉低
  66.         while(1)//进入循环

  67.         {
  68.                 Trig=1;
  69.                 delay();//产生脉冲
  70.                 Trig=0;
  71.                 while(Echo==0);//等待引脚被拉高
  72.                 TR0=1;//打开定时器0
  73.                 EX0=1;//打开中断
  74.                 while(TH0<250);//正在测量数据,需要等待
  75.                 TR0=0;
  76.           TL0=0;
  77.                 TH0=0;
  78.                
  79.                 UART_send_dat(distance); //向串口发送测得的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;//关闭中断
  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. }
复制代码

所有资料51hei提供下载:
代码.zip (51.03 KB, 下载次数: 8)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表