找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2088|回复: 4
收起左侧

自己做的检测磁场的板子程序

[复制链接]
ID:332432 发表于 2019-4-25 22:40 | 显示全部楼层 |阅读模式
检测磁场的资料可以自己下载,亲测有效
QQ截图20190429071430.png
单片机源程序如下:
  1. #include"reg12.h" //头文件在STC公司主页上下载
  2. #include"stdio.h"
  3. #include"intrins.h"
  4. //------------------------------------------------------------------------------
  5. void AD_init();
  6. void serial_init();
  7. void delay(unsigned int a);
  8. float AD_work(unsigned char channel);
  9. unsigned int AD_get(unsigned char channel);
  10. //------------------------------------------------------------------------------
  11. void main()
  12. {

  13.         AD_init(); //A/D转换初始化
  14.         serial_init(); //串口初始化
  15.         while(1)
  16.         {
  17.         float GS=0.0;
  18.         GS=(AD_work(0)-2.5)/0.00083;
  19.         if(GS<0) GS=-GS;
  20.                 TI=1; //使用printf函数前须先将发送标志位TI置1
  21.                 printf("%f uT\n",GS);
  22.                 TI=0;
  23.                 delay(1000); //延时约1s
  24.                 }
  25. }
  26. //------------------------------------------------------------------------------
  27. unsigned int AD_get(unsigned char channel)
  28. {
  29.         ADC_CONTR=0x88|channel; //开启AD转换1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG?? ADC_START CHS2 CHS1 CHS0?
  30.         _nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器
  31.         while(!(ADC_CONTR&0x10)); //等待转换完成
  32.         ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0
  33.         return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制)
  34. }
  35. //------------------------------------------------------------------------------
  36. float AD_work(unsigned char channel)
  37. {
  38.         float AD_val; //定义处理后的数值AD_val为浮点数
  39.         unsigned char i;
  40.         for(i=0;i<100;i++)
  41.         AD_val+=AD_get(channel); //转换100次求平均值(提高精度)
  42.         AD_val/=100;
  43.         AD_val=(AD_val*5)/1024; //AD的参考电压是单片机上的5v,所以乘5即为实际电压值
  44.         return AD_val;
  45. }
  46. //------------------------------------------------------------------------------
  47. void delay(unsigned int a) //延时约1ms
  48. {
  49.         unsigned int i;
  50.         while (--a!=0)
  51.         for(i=600;i>0;i--);//1T单片机i=600,若是12T单片机i=125
  52. }
  53. //------------------------------------------------------------------------------
  54. void serial_init()
  55. {
  56.         TMOD=0x20;
  57.         TH1=0xfd;
  58.         TL1=0xfd; //设置9600波特率
  59.         SCON=0x50; //串口方式1,允许接收
  60.         TR1=1;
  61. }
  62. //------------------------------------------------------------------------------
  63. void AD_init()
  64. {
  65.         P1ASF=0xff; //P1口全部作为模拟功能AD使用
  66.         ADC_RES=0; //清零转换结果寄存器高8位
  67.         ADC_RESL=0; //清零转换结果寄存器低2位
  68.         ADC_CONTR=0x80;//开启AD电源
  69.         delay(2); //等待1ms,让AD电源稳定
  70. }
复制代码

所有资料51hei提供下载:
磁场检测.zip (17.53 KB, 下载次数: 9)
m.zip (271 Bytes, 下载次数: 8)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:332432 发表于 2019-4-26 13:07 | 显示全部楼层
欢迎讨论
回复

使用道具 举报

ID:1 发表于 2019-4-27 03:29 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:99242 发表于 2024-10-12 21:52 来自触屏版 | 显示全部楼层
看着不错,有空试试看
回复

使用道具 举报

ID:99242 发表于 2024-10-12 22:10 来自触屏版 | 显示全部楼层
用的啥霍尔
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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