找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2837|回复: 0
收起左侧

数码管显示的GP2D12仿真测距警报器单片机仿真和程序

[复制链接]
ID:215553 发表于 2017-6-28 17:08 | 显示全部楼层 |阅读模式
数码管显示的GP2D12仿真测距警报器,距离在30cm以内时输出报警声音
0.png 0.png

单片机源程序如下:
  1. //-----------------------------------------------------------------
  2. //  名称: 数码管显示的GP2D12仿真测距警报器
  3. //-----------------------------------------------------------------
  4. //  说明: 程序运行时,数码管显示当前距离,当距离小于30CM时输出报警声音.
  5. //
  6. //-----------------------------------------------------------------
  7. #include <pic.h>
  8. #include <math.h>
  9. #define INT8U   unsigned char
  10. #define INT16U  unsigned int
  11. #define _XTAL_FREQ 1000000
  12. //595引脚定义
  13. #define ST_CP  RB0   //输出锁存器控制脉冲
  14. #define DS     RB1   //串行数据输入
  15. #define SH_CP  RB2   //移位时钟脉冲
  16. //蜂鸣器控制引脚定义
  17. #define BEEP   RE2
  18. //线性化系数(先实测8个距离的输出电压数据,再通过EXCEL表格公式计算得到)
  19. #define M_C   6106   //分别标定m',b',k'
  20. #define B_C     -9
  21. #define K_C      3
  22. //乘幂拟合曲线系数(通过EXCEL添加乘幂趋势线得到公式系数)
  23. #define M_F   15517
  24. #define M_P   -1.1887
  25. //数码管段码表
  26. const INT8U SEG_CODE[] =
  27. { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
  28. //距离显示缓冲(小数位,个位,十位)
  29. INT8U Disp_Buff[] = {0,0,0};
  30. //------------------------------------------------------------------
  31. // 报警程序
  32. //------------------------------------------------------------------
  33. void Alarm()
  34. {
  35.    for(INT8U i = 0; i < 200; i++) { BEEP = ~BEEP; __delay_us(180); }
  36. }
  37.    
  38. //-----------------------------------------------------------------
  39. // 串行输入子程序
  40. //-----------------------------------------------------------------
  41. void Serial_Input_595(INT8U dat)
  42. {


  43.   
  44. }

  45. //-----------------------------------------------------------------
  46. // 并行输出子程序
  47. //-----------------------------------------------------------------
  48. void Parallel_Output_595()
  49. {



  50. }

  51. //-----------------------------------------------------------------
  52. // 对通道AN0进行模数转换
  53. //-----------------------------------------------------------------
  54. INT16U ADC_Convert()
  55. {   


  56. }

  57. //-----------------------------------------------------------------
  58. // 进行连续采样,然后根据采样平均值及计算公式得到距离
  59. //-----------------------------------------------------------------
  60. float Get_Distance()
  61. {


  62. }

  63. //-----------------------------------------------------------------
  64. // 将3位整数分解位为3个数位
  65. //-----------------------------------------------------------------
  66. void DEC_TO_3DIGIT(INT16U d, INT8U *a1, INT8U *b1, INT8U *c1)
  67. {


  68. }

  69. //------------------------------------------------------------------
  70. // 主程序
  71. //------------------------------------------------------------------
  72. void main()
  73. {
  74.    float d;
  75.    TRISE2 = 0;                           //报警器输出
  76.    TRISB0 = TRISB1 = TRISB2 = 0;         //RB端口设为输出,控制74HC595
  77. ……………………

  78. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
数码管显示的GP2D12仿真测距警报器.zip (20.74 KB, 下载次数: 73)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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