[STM32F0] 六个核桃测量小麦湿度

[复制链接]
6394|53
 楼主| yjmwxwx 发表于 2019-5-28 00:34 | 显示全部楼层 |阅读模式
AN, ov, ST, LCD, AD
本帖最后由 yjmwxwx 于 2019-5-28 09:35 编辑

快收小麦了,晒干了的小麦要靠牙咬判断干湿,想DIY个测湿度的,于是用六个核桃的铁皮瓶子做了一个简单测湿度的表,我小学文化不懂理论和计算,好像是差分电容原理,程序是以前做别的用的程序,稍微该了一下用在了这里,单片机型号STM32F030F4P6。
演示视频,测量三种不同湿度的小麦,第一种是家里粮食袋子里面的,第二种是用水泡了一下晒的不干,第三种是粮食袋子里面的放在太阳下晒了两个小时,我不是专业电工,就是农民种地的喜欢DIY,所以非常不专业,非常简单的原理验证,没有实际应用价值,没有校准和温度补偿,还是个音频范围的,外国的产品都是149M的。

视频可以看到1602下面一行xiaomai后面的数是ADC采到的,数越大小麦越湿。





电路图是先焊接后画的,没怎么画过,也不会设计电路,不确定有没有问题。

电路图

dianlutu.png.tar.gz (100.31 KB, 下载次数: 9)




dianlutu.png

实物图

mpv-shot0001.jpg

IMG_20190527_160709.jpg

IMG_20190527_160656.jpg

IMG_20190527_160632.jpg



程序
liangshi.tar.gz (6.18 KB, 下载次数: 6)
  1. @@单片机stm32f030f4p6
  2.         @@电容小麦水分测量
  3.         @作者:yjmwxwx
  4.         @时间:2019-05-26
  5.         @编译器:ARM-NONE-EABI-AS
  6.          .thumb
  7.                  .syntax unified
  8. .section .data
  9. zheng_xian_biao:
  10.         .short 0x30,0x33,0x36,0x38,0x3b,0x3e,0x41,0x44,0x47,0x49,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x57,0x55,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3d,0x3a,0x37,0x34,0x31,0x2e,0x2b,0x28,0x25,0x22,0x1f,0x1c,0x1a,0x17,0x15,0x12,0x10,0xe,0xc,0xa,0x8,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x4,0x6,0x7,0x9,0xb,0xd,0xf,0x11,0x13,0x16,0x18,0x1b,0x1e,0x21,0x24,0x27,0x29,0x2c,0x30
  11. lcdshuju:
  12.         .ascii  "yjmwxwx-20190526"
  13. dianhua:        
  14.         .ascii        "     15552208295"
  15. qq:
  16.         .ascii        "   QQ:3341656346"
  17. xiaomai:
  18.         .ascii "xiaomai ="
  19.         .equ STACKINIT,                        0x20001000
  20.         .equ asciimabiao,                0x20000000
  21.         .equ jishu,                        0x20000010
  22.         .equ lvbozhizhen,                0x20000020
  23.         .equ lvbohuanchong,                0x20000024
  24.         .equ adccaiyang,                0x20000100
  25.         .section .text
  26. vectors:
  27.         .word STACKINIT
  28.         .word _start + 1
  29.         .word _nmi_handler + 1
  30.         .word _hard_fault  + 1
  31.         .word 0
  32.         .word 0
  33.         .word 0
  34.         .word 0
  35.         .word 0
  36.         .word 0
  37.         .word 0
  38.         .word _svc_handler +1
  39.         .word 0
  40.         .word 0
  41.         .word _pendsv_handler +1
  42.         .word _systickzhongduan +1               [url=home.php?mod=space&uid=72445]@[/url] 15
  43.         .word aaa +1     [url=home.php?mod=space&uid=72445]@[/url] _wwdg +1          [url=home.php?mod=space&uid=72445]@[/url] 0
  44.         .word aaa +1     @_pvd +1            [url=home.php?mod=space&uid=72445]@[/url] 1
  45.         .word aaa +1     @_rtc +1            [url=home.php?mod=space&uid=72445]@[/url] 2
  46.         .word aaa +1     @_flash +1          [url=home.php?mod=space&uid=72445]@[/url] 3
  47.         .word aaa +1        [url=home.php?mod=space&uid=72445]@[/url] _rcc + 1          [url=home.php?mod=space&uid=72445]@[/url] 4
  48.         .word aaa +1      @_exti0_1  +1      @ 5
  49.         .word aaa +1      @ _exti2_3 +1      @ 6
  50.         .word aaa +1       @_exti4_15 +1     @ 7
  51.         .word aaa +1                         @ 8
  52.         .word aaa +1         @_dma1_1  +1    @ 9
  53.         .word aaa +1    @_dma1_2_3 +1        @ 10
  54.         .word aaa +1       @_dma1_4_5 +1     @ 11
  55.         .word aaa +1         @_adc1 +1          @ 12
  56.         .word aaa +1       @_tim1_brk_up +1  @ 13
  57.         .word aaa +1        @ _tim1_cc +1    @ 14
  58.         .word aaa +1         @_tim2 +1       @ 15
  59.         .word aaa +1          @_tim3 +1      @ 16
  60.         .word aaa +1                         @ 17
  61.         .word aaa +1                                @ 18
  62.         .word aaa +1        @_tim14 +1    @ 19
  63.         .word aaa +1                         @ 20
  64.         .word aaa +1         @_tim16 +1      @ 21
  65.         .word aaa +1         @_tim17 +1      @ 22
  66.         .word aaa +1          @_i2c   +1     @ 23
  67.         .word aaa +1                         @ 24
  68.         .word aaa +1           @_spi   +1    @ 25
  69.         .word aaa +1                         @ 26
  70.         .word aaa +1         @_usart1 +1     @ 27
  71.         .align 2

  72. _start:
  73. shizhong:
  74.         ldr r2, = 0x40022000   @FLASH访问控制
  75.         movs r1, # 0x32
  76.         str r1, [r2]           @FLASH缓冲 缓冲开启
  77.         ldr r0, = 0x40021000 @ rcc
  78.         ldr r1, = 0x10001
  79.         str r1, [r0]
  80. denghse:
  81.         ldr r1, [r0]
  82.         lsls r1, r1, # 14
  83.         bpl denghse
  84. dengpllguan:
  85.         ldr r1, [r0]
  86.         lsls r1, r1, # 6
  87.         bmi dengpllguan
  88.         ldr r1, = 0x110002
  89.         str r1, [r0, # 0x04]
  90.         ldr r1, = 0x1010001
  91.         str r1, [r0]
  92. dengpll:
  93.         ldr r1, [r0]
  94.         lsls r1, # 6
  95.         bpl dengpll
  96.         @0x34时钟控制寄存器 2 (RCC_CR2)
  97.         movs r1, # 0x01
  98.         str r1, [r0, # 0x34]  @ HSI开14M时钟
  99. dengdai14mshizhongwending:
  100.         ldr r1, [r0, # 0x34]
  101.         lsls r1, r1, # 30     @ 左移30位
  102.         bpl dengdai14mshizhongwending  @ 等待14M时钟稳定

  103. _neicunqingling:
  104.         ldr r0, = 0x20000000
  105.         movs r1, # 0
  106.         ldr r3, = 0x1000
  107. _neicunqinglingxunhuan:
  108.         subs r3, # 4
  109.         str r1, [r0, r3]
  110.         bne _neicunqinglingxunhuan

  111. _waisheshizhong:                         @ 外设时钟
  112.         @+0x14=RCC_AHBENR
  113.         @0=DMA @2=SRAM @4=FLITF@6=CRC @17=PA @18=PB @19=PC @20=PD @22=PF
  114.         ldr r0, = 0x40021000
  115.         ldr r1, = 0x460005
  116.         str r1, [r0, # 0x14]

  117.         @+0x18外设时钟使能寄存器 (RCC_APB2ENR)
  118.         @0=SYSCFG @5=USART6EN @9=ADC @11=TIM1 @12=SPI1 @14=USART1 @16=TIM15 @17=TIM16 @18=TIM17 @22=DBGMCU
  119.         ldr r1, = 0xa00
  120.         str r1, [r0, # 0x18]
  121.         @+0X1C=RCC_APB1ENR
  122.         @1=TIM3 @4=TIM6 @5=TIM7 @8=TIM14 @11=WWDG @14=SPI @17=USRT2 @18=USART3 @20=USART5 @21=I2C1
  123.         @22=I2C2 @23=USB @28=PWR


  124. tim1chushiha:
  125.         ldr r0, = 0x40012c00 @ tim1_cr1
  126.         movs r1, # 0
  127.         str r1, [r0, # 0x28] @ psc
  128.         ldr r1, = 96
  129.         str r1, [r0, # 0x2c] @ ARR
  130.         ldr r1, = 0x68
  131.         str r1, [r0, # 0x1c] @ ccmr2  CC3
  132.         ldr r1, = 0x100    @  CC3
  133.         str r1, [r0, # 0x20] @ ccer
  134.         ldr r1, = 0x8000
  135.         str r1, [r0, # 0x44] @ BDTR
  136.         ldr r1, = 0x800 @ CC3 DMA
  137.         str r1, [r0, # 0x0c] @ DIER
  138.         ldr r1, = 0xe1
  139.         str r1, [r0]

  140.         
  141. _adcchushihua:
  142.         ldr r0, = 0x40012400  @ adc基地址
  143.         ldr r1, = 0x80000000
  144.         str r1, [r0, # 0x08]  @ ADC 控制寄存器 (ADC_CR)  @adc校准
  145. _dengadcjiaozhun:
  146.         ldr r1, [r0, # 0x08]
  147.          movs r1, r1
  148.         bmi _dengadcjiaozhun   @ 等ADC校准
  149. _kaiadc:
  150.         ldr r1, [r0, # 0x08]
  151.         movs r2, # 0x01
  152.         orrs r1, r1, r2
  153.         str r1, [r0, # 0x08]
  154. _dengdaiadcwending:
  155.         ldr r1, [r0]
  156.         lsls r1, r1, # 31
  157.         bpl _dengdaiadcwending @ 等ADC稳定
  158. _tongdaoxuanze:
  159.         ldr r1, = 0x01
  160.         str r1, [r0, # 0x28]    @ 通道选择寄存器 (ADC_CHSELR)
  161.         ldr r1, = 0x3000        @ 13 连续转换
  162.         str r1, [r0, # 0x0c]    @ 配置寄存器 1 (ADC_CFGR1)
  163.         movs r1, # 0                 @
  164.         str r1, [r0, # 0x14]    @ ADC 采样时间寄存器 (ADC_SMPR)
  165.         ldr r1, [r0, # 0x08]
  166.         movs r2, # 0x04         @ 开始转换
  167.         orrs r1, r1, r2
  168.         str r1, [r0, # 0x08]    @ 控制寄存器 (ADC_CR)

  169. dmachushihua:
  170.         @+0=LSR,+4=IFCR,
  171.         @+8=CCR1,+c=CNDTR1,+10=CPAR1+14=CMAR1,
  172.         @+1c=CCR2,+20=CNDTR2,+24=CPAR2,+28=CMAR2
  173.         @+30=CCR3,+34=CNDTR3,+38=CPAR2,+3c=CMAR3
  174.         @+44=CCR4,+48=CNDTR4,+4c=CPAR4,+50=CMAR4
  175.         @+58=CCR5,+5c=CNDTR5,+60=CPAR5,+64=CMAR5
  176.         @+6C=CCR6,+70=CNDTR6,+74=CPAR6,+78=CMAR6
  177.         @+80=CCR7,+84=CNDTR7,+88=CPAR7,+8c=CMAR7

  178.         @tim1ch3DMA
  179.         ldr r0, = 0x40020000
  180.         ldr r1, = 0x40012c3c @ 外设地址
  181.         str r1, [r0, # 0x60]
  182.         ldr r1, = zheng_xian_biao @ 储存器地址
  183.         str r1, [r0, # 0x64]
  184.         ldr r1, = 100             @点数
  185.         str r1, [r0, # 0x5c]
  186.         ldr r1, = 0x25b1         @ 储存到外设
  187.         str r1, [r0, # 0x58]

  188. _waishezhongduan:                                @外设中断
  189.         @0xE000E100    0-31  写1开,写0没效
  190.         @0XE000E180    0-31 写1关,写0没效
  191.         @0XE000E200    0-31 挂起,写0没效
  192.         @0XE000E280    0-31 清除, 写0没效

  193. _systick:                                @ systick定时器初始化

  194.         ldr r0, = 0xe000e010
  195.         ldr r1, = 0xffffff
  196.         str r1, [r0, # 4]
  197.         str r1, [r0, # 8]
  198.         movs r1, # 0x07
  199.         str r1, [r0]
  200.         
  201. io_she_zhi:
  202.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  203.         @a(0x48000000)b(0x48000400)c(0x48000800)d(0x48000c00)f(0x48001400)
  204.         @ 输入(00),通用输出(01),复用功能(10),模拟(11)
  205.         @偏移0x4 = 端口输出类型 @ (0 推挽),( 1 开漏)
  206.         @偏移0x8 = 输出速度  00低速, 01中速, 11高速
  207.         @偏移0xC = 上拉下拉 (00无上下拉,  01 上拉, 10下拉)
  208.         @偏移0x10 = 输入数据寄存器
  209.         @偏移0x14 = 输出数据寄存器
  210.         @偏移0x18 = 端口开  0-15置位
  211.         @偏移0x28 = 端口关
  212.         @0X20 = 复用低
  213.         @GPIO口0(0-3位)每个IO口占用4位
  214.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  215.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  216.         @0x24 = 复用高
  217.         @GPIO口8 (0-3位)每个IO口占用4位
  218.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  219.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  220.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  221.         ldr r0, = 0x48000000
  222.         ldr r1, = 0x28205553
  223.         str r1, [r0]
  224.         movs r1, # 0xfc  @ pa2-pa7开漏输出
  225.         str r1, [r0, # 0x04]
  226.         ldr r1, = 0x200
  227.         str r1, [r0, # 0x24]

  228. _lcdchushihua:
  229.         movs r0, # 0x33
  230.         movs r1, # 0
  231.         bl _xielcd
  232.         bl _lcdyanshi
  233.         movs r0, # 0x32
  234.         movs r1, # 0
  235.         bl _xielcd
  236.         bl _lcdyanshi
  237.         movs r0, # 0x28
  238.         movs r1, # 0
  239.         bl _xielcd
  240.         bl _lcdyanshi
  241.         movs r0, # 0x0c
  242.         movs r1, # 0
  243.         bl _xielcd
  244.         bl _lcdyanshi
  245.         movs r0, # 0x01
  246.         movs r1, # 0
  247.         bl _xielcd
  248.         bl _lcdyanshi
  249.         


  250. _tingting:
  251.         ldr r0, = jishu
  252.         ldr r1, [r0]
  253.         cmp r1, # 8
  254.         beq _lcddi1
  255.         cmp r1, # 16
  256.         beq _lcddi2
  257.         cmp r1, # 24
  258.         beq _lcddi3
  259.         b _tiaoguoguanggao
  260. _lcddi1:
  261.         movs r0, # 0x80
  262.         ldr r1, = lcdshuju
  263.         movs r2, # 16
  264.         bl _lcdxianshi
  265.         ldr r0, = 0x40020000
  266.         ldr r1, = 0
  267.         str r1, [r0, # 0x08]
  268.         b _tiaoguoguanggao
  269. _lcddi2:
  270.         movs r0, # 0x80
  271.         ldr r1, = dianhua
  272.         movs r2, # 16
  273.         bl _lcdxianshi
  274.         b _tiaoguoguanggao
  275. _lcddi3:
  276.         movs r0, # 0x80
  277.         ldr r1, = qq
  278.         movs r2, # 16
  279.         bl _lcdxianshi
  280.         ldr r0, = jishu
  281.         movs r1, # 0
  282.         str r1, [r0]
  283. _tiaoguoguanggao:
  284.         movs r0, # 0xc0
  285.         ldr r1, = xiaomai
  286.         movs r2, # 9
  287.         bl _lcdxianshi
  288.         bl _chuanganqi
  289.         movs r1, # 4
  290.         ldr r2, = asciimabiao
  291.         movs r3, # 0xff
  292.         bl _zhuanascii
  293.         movs r0, # 0xcc
  294.         ldr r1, = asciimabiao
  295.         movs r2, # 0x04
  296.         bl _lcdxianshi
  297.         b _tingting

  298.         
  299. _chuanganqi:                @出
  300.                         @R0=幅值,R1=相位
  301.         push {r2-r7,lr}
  302.         ldr r0, = 0x40012400
  303.         movs r1, # 0x01
  304.         str r1, [r0, # 0x28]
  305.         bl _jianbo                        @检波90、270
  306.         bl _jisuanfuzhi                        @计算90幅度
  307.         mov r2, r0
  308.         mov r0, r1
  309.         bl _jisuanfuzhi                        @计算270幅度
  310.         mov r1, r0
  311.         mov r0, r2
  312.         bl _xiangweipanduan                @判断相位
  313.         mov r4, r1
  314.         mov r3, r0
  315.         ldr r0, = lvbohuanchong                @滤波器缓冲区
  316.         movs r1, # 16                        @级数
  317.         ldr r2, = lvbozhizhen                @滤波器指针
  318.         bl _lvboqi                        @平滑,平均滤波器
  319.         mov r1, r4
  320.         pop {r2-r7,pc}


  321. _xiangweipanduan:                @相位判断
  322.                                 @入R0=90度,R1=270度
  323.                                 @出R0=相之间相差的数值,
  324.                                 @出R1=1,90度是正,R1=0,90度是负
  325.         push {r2,lr}
  326.         subs r1, r1, # 0        @ 校准0点
  327.         subs r2, r0, r1
  328.         bpl _adc90shizheng
  329.         subs r2, r1, r0
  330.         bpl _adc90shifu
  331.         cmp r0, r1
  332.         bne _xiangweipanduanfanhui
  333. _adc90shizheng:
  334.         mov r0, r2
  335.         movs r1, # 1
  336.         pop {r2,pc}
  337. _adc90shifu:
  338.         mov r0, r2
  339.         movs r1, # 0
  340.         pop {r2,pc}
  341. _xiangweipanduanfanhui:
  342.         movs r0, # 0
  343.         movs r1, # 1
  344.         pop {r2,pc}
  345.         
  346.         
  347. _jisuanfuzhi:                        @计算幅值
  348.                                 @入R0出R0
  349.                                 @R0=ADC90度采样
  350.         push {r1-r3,lr}
  351.         cmp r0, # 0
  352.         beq _adcshi0fanhui
  353.         ldr r1, = 0x04                @实 Q15
  354.         ldr r2, = 0xffff8004    @虚 Q15
  355.         mov r3, r0
  356.         muls r0, r0, r1                @实
  357.         asrs r0, r0, # 15
  358.         muls r3, r3, r2                @虚
  359.         asrs r3, r3, # 15
  360. _shibushibushi0:                @检测实部是不是负数
  361.         movs r0, r0
  362.         bpl _fzbushifushu1
  363.         mvns r0, r0                @是负数转成正数
  364.         adds r0, r0, # 1
  365. _fzbushifushu1:                        @检测虚部是不是负数
  366.         movs  r3, r3
  367.         bpl _fzbushifushu
  368.         mvns r3, r3                @是负数转成正数
  369.         adds r3, r3, # 1
  370. _fzbushifushu:
  371.         adds r0, r0, r3                @相加得到副值
  372. _adcshi0fanhui:        
  373.         pop {r1-r3,pc}
  374.         
  375. _jianbo:                                @检波
  376.                                         @输出r0=90度,R1=270度
  377.         push {r2-r4,lr}
  378.         ldr r2, = 0x4002005c
  379.         ldr r3, = 0x40012440
  380.         cpsid i
  381. _jianbo90du:
  382.         ldr r4, [r2]
  383.         cmp r4, # 25
  384.         bne _jianbo90du
  385.         ldr r0, [r3]                        @取出90度
  386. _jianbo270du:
  387.         ldr r4, [r2]
  388.         cmp r4, # 75
  389.         bne _jianbo270du
  390.         ldr r1, [r3]
  391.         cpsie i
  392.         pop {r2-r4,pc}

  393. _lvboqi:                                @滤波器
  394.                         @R0=地址,R1=长度,r2=表指针地址,r3=ADC数值
  395.                         @出R0=结果
  396.         push {r1-r7,lr}        
  397.         ldr r5, [r2]                @读出表指针
  398.         lsls r6, r1, # 2        
  399.         str r3, [r0, r5]        @数值写到滤波器缓冲区
  400.         adds r5, r5, # 4
  401.         cmp r5, r6
  402.         bne _lvboqimeidaohuanchongquding
  403.         movs r5, # 0
  404. _lvboqimeidaohuanchongquding:
  405.         str r5, [r2]
  406.         movs r7, # 0
  407. _lvboqixunhuan:
  408.         cmp r5, r6
  409.         bne _lvbozonghe
  410.         movs r5, # 0
  411. _lvbozonghe:
  412.         ldr r4, [r0, r5]
  413.         adds r5, r5, # 4
  414.         adds r7, r7, r4
  415.         subs r1, r1, # 1
  416.         bne _lvboqixunhuan
  417.         asrs r0, r7, # 4        @修改
  418.         pop {r1-r7,pc}
  419.         

  420. _lcdxianshi:                          @r0=LCD位置,r1=数据地址,r2=长度
  421.         push {r0-r4,lr}
  422.         mov r4, r1

  423.         movs r1, # 0
  424.         bl _xielcd

  425.         movs r1, # 1
  426.         movs r3, # 0
  427. _lcdxianshixunhuan:
  428.         ldrb r0, [r4,r3]
  429.         bl _xielcd
  430.         adds r3, r3, # 1
  431.         cmp r3, r2
  432.         bne _lcdxianshixunhuan
  433.         pop {r0-r4,pc}

  434. _lcdyanshi:
  435.         push {r5,lr}
  436.         ldr r5, = 0x2000
  437. _lcdyanshixunhuan:
  438.         subs r5, r5, # 1
  439.         bne _lcdyanshixunhuan
  440.         pop {r5,pc}

  441. _xielcd:                        @入R0=8位,r1=0命令,r1=1数据
  442.         push {r0-r7,lr}
  443.         lsrs r6, r0, # 4
  444.         lsls r0, r0, # 28
  445.         lsrs r0, r0, # 28
  446.         movs r2, # 0x80                @ RS
  447.         movs r3, # 0x40                @ E
  448.         movs r5, # 0x3c
  449.         ldr r4, = 0x48000000
  450.         cmp r1, # 0
  451.         beq _lcdmingling
  452.         str r2, [r4, # 0x18]        @RS=1
  453.         b _lcdshuju
  454. _lcdmingling:
  455.         str r2, [r4, # 0x28]        @RS=0
  456. _lcdshuju:
  457.         str r3, [r4, # 0x18]        @E=1
  458.         str r5, [r4, # 0x28]

  459.         lsls r7, r6, # 31
  460.         lsrs r7, r7, # 26
  461.         str r7, [r4, # 0x18]

  462.         lsrs r7, r6, # 1
  463.         lsls r7, r7, # 31
  464.         lsrs r7, r7, # 27
  465.         str r7, [r4, # 0x18]

  466.         lsrs r7, r6, # 2
  467.         lsls r7, r7, # 31
  468.         lsrs r7, r7, # 28
  469.         str r7, [r4, # 0x18]

  470.         lsrs r7, r6, # 3
  471.         lsls r7, r7, # 31
  472.         lsrs r7, r7, # 29
  473.         str r7, [r4, # 0x18]

  474.         bl _lcdyanshi
  475.         str r3, [r4, # 0x28]        @E=0


  476.         str r3, [r4, # 0x18]    @E=1
  477.         str r5, [r4, # 0x28]

  478.         lsls r7, r0, # 31
  479.         lsrs r7, r7, # 26
  480.         str r7, [r4, # 0x18]

  481.         lsrs r7, r0, # 1
  482.         lsls r7, r7, # 31
  483.         lsrs r7, r7, # 27
  484.         str r7, [r4, # 0x18]

  485.         lsrs r7, r0, # 2
  486.         lsls r7, r7, # 31
  487.         lsrs r7, r7, # 28
  488.         str r7, [r4, # 0x18]

  489.         lsrs r7, r0, # 3
  490.         lsls r7, r7, # 31
  491.         lsrs r7, r7, # 29
  492.         str r7, [r4, # 0x18]

  493.         bl _lcdyanshi
  494.         str r3, [r4, # 0x28]    @E=0

  495.         pop {r0-r7,pc}
  496.         .ltorg


  497. _zhuanascii:                                        @ 16进制转ASCII
  498.                 @ R0要转的数据, R1长度,R2结果表首地址, r3=小数点位置
  499.         push {r0-r7,lr}
  500.         mov r7, r3
  501.         mov r5, r0
  502.         mov r6, r1
  503.         movs r1, # 10
  504. _xunhuanqiuma:
  505.         bl _chufa
  506.         mov r4, r0
  507.         muls r4, r1
  508.         subs r3, r5, r4
  509.         adds r3, r3, # 0x30
  510.         mov r5, r0
  511.         subs r6, r6, # 1
  512.         beq _qiumafanhui
  513.         cmp r6, r7
  514.         bne _meidaoxiaoshudian
  515.         movs r4, # 0x2e                @小数点
  516.         strb r4, [r2,r6]        @插入小数点
  517.         subs r6, r6, # 1
  518. _meidaoxiaoshudian:
  519.         strb r3, [r2,r6]
  520.         movs r6, r6
  521.         bne _xunhuanqiuma
  522.         pop {r0-r7,pc}
  523. _qiumafanhui:
  524.         strb r3, [r2, r6]
  525.         pop {r0-r7,pc}

  526.         
  527. _chufa:                                @软件除法
  528.         @ r0 除以 r1 等于 商(r0)余数R1
  529.         push {r1-r4,lr}
  530.         cmp r0, # 0
  531.         beq _chufafanhui
  532.         cmp r1, # 0
  533.         beq _chufafanhui
  534.         mov r2, r0
  535.         movs r3, # 1
  536.         lsls r3, r3, # 31
  537.         movs r0, # 0
  538.         mov r4, r0
  539. _chufaxunhuan:
  540.         lsls r2, r2, # 1
  541.         adcs r4, r4, r4
  542.         cmp r4, r1
  543.         bcc _chufaweishubudao0
  544.         adds r0, r0, r3
  545.         subs r4, r4, r1
  546. _chufaweishubudao0:
  547.         lsrs r3, r3, # 1
  548.         bne _chufaxunhuan
  549. _chufafanhui:
  550.         pop {r1-r4,pc}
  551.         .ltorg


  552. _nmi_handler:
  553.         bx lr
  554. _hard_fault:
  555.         bx lr
  556. _svc_handler:
  557.         bx lr
  558. _pendsv_handler:
  559.         bx lr
  560. _systickzhongduan:
  561.         ldr r2, = jishu
  562.         ldr r0, = 0xe000ed04
  563.         ldr r3, [r2]
  564.         ldr r1, = 0x02000000
  565.         adds r3, r3, # 1
  566.         str r3, [r2]
  567.         str r1, [r0]                 @ 清除SYSTICK中断
  568. aaa:
  569.         bx lr






  
     

评论

不得不说汇编牛  发表于 2019-5-31 20:40
@dirtwillfly :汇编容易写,而不容易看懂  发表于 2019-5-30 11:29
用汇编开发的越来越少了  发表于 2019-5-29 20:40
戈卫东 发表于 2019-5-28 08:12 | 显示全部楼层
居然全用汇编。。。。

评论

很无奈只会点汇编,我们5线小城市的老板都知道招会C语言的。  发表于 2019-5-30 11:26
xxshrimp 发表于 2019-5-28 09:01 来自手机 | 显示全部楼层
赞,,,,,

评论

谢谢  发表于 2019-5-30 11:43
海中水 发表于 2019-5-28 09:16 | 显示全部楼层
这个我不得不给你点个赞!厉害。

评论

@yjmwxwx :自己探索就是好的开始,在论坛里我们可以多多交流。  发表于 2019-5-31 08:57
谢谢点赞,电路东拼西凑,自己也不会计算,程序还是参考别人算法,结构也是看书上的图,我就是把这些组装起来了。  发表于 2019-5-30 11:43
Dick Hou 发表于 2019-5-28 09:39 | 显示全部楼层
汇编写的,点赞

评论

谢谢  发表于 2019-5-30 11:44
qiangtech 发表于 2019-5-28 09:42 | 显示全部楼层
厉害

评论

我都不好意思了,完全业余水平。  发表于 2019-5-30 11:45
wenunit 发表于 2019-5-28 15:16 | 显示全部楼层
厉害了,手工活不错。

评论

15岁时候别人学习的时候我在做火药木仓,走火还差点打到同学的头。。虽然电路和程序不怎么样,但是动手做个东西还是有信心的,只是没什么工具和材料。  发表于 2019-5-30 11:38
springvirus 发表于 2019-5-28 15:28 | 显示全部楼层
楼主暴露年龄了

评论

我1989年的。。  发表于 2019-5-30 11:47
叶春勇 发表于 2019-5-28 18:35 | 显示全部楼层
应该是c写的,汇编优化的。

评论

不是  发表于 2019-5-30 11:48
kk118a 发表于 2019-5-29 14:25 | 显示全部楼层
纯汇编,还有这电路,厉害

评论

汇编就那么几条指令很容易学的,电路是东拼西凑的,算法是参考别人和书上的。  发表于 2019-5-30 11:50
mzb2012 发表于 2019-5-29 17:45 | 显示全部楼层
这手工,真不错

评论

手工有信心,只是我做的东西都很丑做不漂亮。  发表于 2019-5-30 11:51
xiw47 发表于 2019-5-30 09:02 | 显示全部楼层
楼主挺谦虚的,可比我厉害多了。 775735cef2b8945a13.png

评论

我欧姆定律都不会背,就是个组装工。  发表于 2019-5-30 11:51
 楼主| yjmwxwx 发表于 2019-5-30 12:14 | 显示全部楼层


国家取消计量器具制造许可后,做测粮食水分的需要什么审核过程要花多少钱?  感觉这方面限制比较严格,老百姓不能随便做了卖。

看这个外国的产品不错,美国的用149M的,这个要是100元一个就好了。
截图_2019-05-28_19-05-32.png




书一本

截图_2019-05-28_19-33-59.png


下面这图是音频范围

截图_2019-05-30_12-13-18.png


截图_2019-05-28_19-32-43.png

[Stuart_Nelson]_Dielectric_Properties_of_Agricultu(z-lib.org).part2.rar (7.39 MB, 下载次数: 5)

[Stuart_Nelson]_Dielectric_Properties_of_Agricultu(z-lib.org).part1.rar (7.4 MB, 下载次数: 14)


叶春勇 发表于 2019-5-30 12:24 | 显示全部楼层
叶春勇 发表于 2019-5-28 18:35
应该是c写的,汇编优化的。

那你很厉害,基本只要给你hex,基本都能**了。
 楼主| yjmwxwx 发表于 2019-5-30 12:31 | 显示全部楼层
叶春勇 发表于 2019-5-30 12:24
那你很厉害,基本只要给你hex,基本都能**了。


人家搞**逆向的根本不看汇编的,都是看IDA PRO反出来的伪C,会用C语言编程转**很容易,反而会汇编搞**不如会C容易,因为汇编不容易看懂,要靠动态调试,而人家搞**的直接KEIL里面软件仿真和开发一样,**没什么门槛,只要会正向就会逆向。
blust5 发表于 2019-5-30 13:25 | 显示全部楼层
六个核桃给了你多少广告费?我银鹭给双倍!
一叶倾城wwq 发表于 2019-5-30 13:30 | 显示全部楼层
这就是传说中的汇编吗?厉害了

评论

@yjmwxwx :回想起小时候晒谷子晒玉米的时光了,楼主学以致用^_^  发表于 2019-5-30 18:57
汇编比C简单的,就那么几条指令。  发表于 2019-5-30 15:10
anjf163 发表于 2019-5-30 14:20 | 显示全部楼层
给山东的兄弟几个建议:
1. 用个带 DA 输出的 STM32 单片机,通过 DA 直接产生正弦波,来做激励源。
2. 在检测桶上串联一个小容值电容,做分压。将分压得到的信号,直接送入 STM32 的 ADC 做分析。
这样能省下很多不必要的电路,供电电源也可以用低电压工作了,功耗会降低很多。
软件 ADC 与 DA 输出信号同步采集,这样等于做了锁相,可以提高信噪比,得到的数据再做傅里叶分析,计算出检测桶的阻性分量再与种子湿度做关联,就差不多了。

评论

建议很好  发表于 2019-5-31 20:44
谢谢,你这个方法好省去很多不必要的电路  发表于 2019-5-30 15:09
雪山飞狐D 发表于 2019-5-30 19:56 | 显示全部楼层
哥们,都9102年了,不要整什么汇编了,另外,嘉立创打两层PCb好像才20还是50,不要搞得那么寒酸

评论

没办法也就汇编用的比较多,C语言学51时候学过,但是没怎么用不熟悉。没做过PCB,在家种地也没工作,不能花太多钱玩不务正业的东西,能有手头这些东西玩就不错了。  发表于 2019-6-1 07:30
七颗咖啡豆 发表于 2019-5-31 11:13 | 显示全部楼层
看到汇编反手就是一个赞

评论

其实汇编一点都不难,学几天就能写。  发表于 2019-6-1 07:33
您需要登录后才可以回帖 登录 | 注册

本版积分规则

124

主题

3017

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部