[PIC®/AVR®/dsPIC®产品] pic10F单片机可穿戴闪灯DIY(开源)

[复制链接]
11435|119
 楼主| mzb2012 发表于 2020-1-2 10:18 | 显示全部楼层
11.完整工程代码,原理图,gerber文件,PCB 3D效果图

  1. ;时   间 : 2019-12
  2.    
  3. ; PIC10F200 Configuration Bit Settings
  4. ; Assembly source line config statements
  5. #include "p10f200.inc"
  6. ; CONFIG
  7. ; __config 0xFFEB
  8. __CONFIG _WDTE_OFF & _CP_OFF & _MCLRE_OFF

  9. ;***************变量定义*****************************************
  10. ;对于10F200单片机,GPR寄存器从0x10地址开始,范围0x10-0x1F共16bytes
  11. ;****************************************************************
  12. ;变量块定义
  13. cblock 0x10
  14.     delay.loop.in
  15.     delay.loop.out
  16.     switch.timer
  17.     hold.timer
  18.     led.state
  19.     mode
  20.     index
  21.     index.base
  22.     mask
  23. endc
  24.    
  25. ;位变量定义
  26. pb.switch equ 3                ;按键端口   
  27. pb.led1 equ 0                ;LED1端口
  28. pb.led2 equ 1                ;LED2端口
  29. pb.led3 equ 2                ;LED3端口
  30. multiplex equ 7                ;multiplex标志变量
  31. pson equ 1<<multiplex       
  32. psoff equ 0
  33. led1on equ 1<<pb.led1
  34. led1off equ 0
  35. led2on equ 1<<pb.led2
  36. led2off equ 0
  37. led3on equ 1<<pb.led3
  38. led3off equ 0

  39. ;宏定义
  40. ledstep macro        hold,pwrsave,led1,led2,led3
  41.             retlw hold
  42.             retlw pwrsave|led1|led2|led3
  43.         ENDM
  44. restart MACRO
  45.             retlw 0
  46.         ENDM
  47.        
  48. ;***********************************************************
  49. ;对于pic10F200芯片,内部晶振校准值参数在0xFF地址存储的
  50. ORG 0x0000
  51. movwf OSCCAL
  52. goto start
  53. ;**********************************************************
  54. ;LED闪烁模式查找表
  55. ;对于每一种闪烁模式,必须在有一个相应的分支入口
  56. ;返回值max.mode同样必须设置
  57. radix dec
  58. select.mode movfw mode
  59.              addwf PCL,f
  60.              retlw mode.1
  61.              retlw mode.2
  62.              retlw mode.3
  63.              retlw mode.4
  64.              retlw mode.5
  65.              retlw mode.6
  66.              retlw mode.7
  67. max.mode retlw 7        ;模式最大种类数
  68. ;定义闪烁序列
  69. ;ledstep hold_time,power_save,LED1_state,LED2_state,LED3_state
  70. ;hold_time是1-255的数值,没计一个数单位20ms,所以当hold_time=50时,就是1000ms
  71. ;power_save定义了省电模式,开启后LED亮度略暗,更省电
  72. ;psoff---省电模式关闭,全功率运行
  73. ;pson---省电模式开启,节电运行
  74. ;LEDx_state 定义灯的亮或灭
  75. ;模式1,常量,节电模式
  76. mode.1 ledstep 50,pson,led1on,led2on,led3on
  77.        restart
  78. ;模式2,常量,正常模式
  79. mode.2 ledstep 50,psoff,led1on,led2on,led3on
  80.        restart  
  81. ;模式3,所有闪烁,节电模式
  82. mode.3 ledstep 18,pson,led1on,led2on,led3on
  83.        ledstep 18,pson,led1off,led2off,led3off
  84.        restart
  85. ;模式4,单个LED亮,正常模式
  86. mode.4 ledstep 12,psoff,led1on,led2off,led3off
  87.        ledstep 12,psoff,led1off,led2on,led3off
  88.        ledstep 12,psoff,led1off,led2off,led3on
  89.        ledstep 12,psoff,led1off,led2on,led3off
  90.        restart
  91. ;模式5,所有LED频闪,正常模式
  92. mode.5 ledstep 2,psoff,led1on,led2on,led3on
  93.        ledstep 30,psoff,led1off,led2off,led3off
  94.        restart
  95. ;模式6,所有LED短灭长亮,正常模式
  96. mode.6 ledstep 2,psoff,led1on,led2off,led3off
  97.        ledstep 10,psoff,led1off,led2on,led3off
  98.        ledstep 60,pson,led1on,led2on,led3on
  99.        ledstep 10,psoff,led1off,led2on,led3off
  100.        restart
  101. ;模式7,所有LED短灭长亮,正常模式
  102. mode.7 ledstep 1,psoff,led1on,led2off,led3off
  103.        ledstep 3,psoff,led1off,led2on,led3off
  104.        ledstep 1,psoff,led1on,led2off,led3off
  105.        ledstep 3,psoff,led1off,led2on,led3off
  106.        ledstep 1,psoff,led1on,led2off,led3off
  107.        ledstep 3,psoff,led1off,led2on,led3off
  108.        ledstep 1,psoff,led1on,led2off,led3off
  109.        ledstep 3,psoff,led1off,led2on,led3off
  110.        ledstep 1,psoff,led1on,led2off,led3off
  111.        ledstep 3,psoff,led1off,led2on,led3off
  112.        ledstep 1,psoff,led1on,led2off,led3off
  113.        ledstep 50,psoff,led1off,led2on,led3off
  114.        restart
  115. ;结束LED闪烁模式查找表
  116.        radix hex
  117. ;唤醒或者上电的pic初始化
  118. start movlw (1<<pb.switch)        ;设置按键端口输入
  119.       tris GPIO
  120.       movlw ~(1<<NOT_GPWU |1<<NOT_GPPU|1<<T0CS);
  121.       option
  122.       clrwdt
  123.       btfsc STATUS,GPWUF        ;查询唤醒标志
  124.       goto wakeup                ;标志置位需要唤醒
  125. ;仅在上电后初始化变量
  126.       clrf GPIO        ;启动后关闭所有输出
  127.       clrf mode
  128.       clrf delay.loop.in    ;初始化延时计数变量
  129.       clrf switch.timer             ;初始化按键计数变量
  130.       clrf led.state
  131.       movlw 1<<pb.led3              ;初始化multiples mask
  132.       movwf mask
  133.       movlw mode.1              ;初始化模式索引
  134.       movwf index
  135.       goto reload              ;跳转到设置新模式
  136. ;*****************************************************************************
  137. ; 程序主循环开始
  138. wakeup        movlw .100            ;设置一个2000ms倒计时计数
  139.         movwf switch.timer
  140.         movf GPIO,W
  141.         bcf STATUS,GPWUF
  142.         btfsc GPIO,pb.switch; ;按键没有按下跳过下一条
  143.         sleep
  144. waking.up call delay            ;等待
  145.          btfsc GPIO,pb.switch        ;按键还按下?
  146.          goto wakeup            ;没按下,进入休眠
  147.          decfsz switch.timer,F        ;按下,计数器减一,若为0跳过下一步
  148.          goto waking.up
  149.          bsf switch.timer,7 ;把计数器最高位置1,这里是一个标志位
  150. main call delay            ;延时20ms
  151.      btfss GPIO,pb.switch   ;是否按下?
  152.      goto switch.down        ;是按下,执行按下任务
  153. switch.release btfsc switch.timer,7 ;如果这个置位了,我们只是从休眠唤醒
  154.                clrf switch.timer    ;清计数器
  155.                movlw -.3
  156.                addwf switch.timer,W
  157.                clrf switch.timer
  158.                skpc
  159.                goto lights
  160. ;以下仅执行一次,当一个按键事件发生后
  161. incf mode,F        ;状态加1
  162. call max.mode        ;与最大模式比较
  163. subwf mode,W
  164. skpnc
  165. clrf mode
  166. call select.mode    ;查表执行函数
  167. movwf index;        ;保存索引
  168. movwf index.base
  169. goto reload        ;设置新模式
  170. ;LED函数选择
  171. switch.down btfsc switch.timer,7    ;
  172.             goto lights
  173.             incf switch.timer,F
  174.             movlw -.100
  175.             addwf switch.timer,W
  176.             skpc
  177.             goto lights
  178.             ;按键保持2秒后关闭
  179.             clrf GPIO
  180.             clrf led.state
  181.             btfss GPIO,pb.switch
  182.             goto $-1
  183.             call delay
  184.             movf GPIO,W
  185.             bcf STATUS,GPWUF
  186.             sleep
  187. ;******************************************************************************
  188. ;延时函数,主频4Mhz 时钟
  189. delay            movlw .26            ;延时20.2ms
  190.             movwf delay.loop.out
  191.             ;内循环
  192. delay.loop  decfsz delay.loop.in,F  ;重复255次
  193.             goto $-1
  194.             ;分时控制LED,提高电池寿命
  195.             rrf mask,F
  196.             skpnc
  197.             bsf mask,2
  198.             movfw mask
  199.             andwf led.state,W
  200.             btfss led.state,multiplex        ;multiplex标志清零?
  201.             movfw led.state        ;关闭分时控制
  202.             movwf GPIO
  203.             ;外循环
  204.             decfsz delay.loop.out,F
  205.             goto delay.loop
  206.             retlw 0x00
  207. lights decfsz hold.timer,F  ;led计数器减1
  208.         goto main        ;循环
  209. reload call lookup  ;查找下一个计数值
  210.         movwf led.state        ;存储
  211.         goto main
  212. reset.index movfw index.base        ;把index.base值读入W
  213.             movwf index            ;把值放入当前索引
  214.             goto reload            ;
  215. lookup movfw index  ;把index值给W
  216.        incf index,F ;index=index+1
  217.        movwf PCL    ;把W给PCL
  218. END












本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
小卡 发表于 2020-1-3 10:21 | 显示全部楼层
支持好文
yiy 发表于 2020-1-5 23:07 | 显示全部楼层
内容很棒
mmuuss586 发表于 2020-1-6 09:43 | 显示全部楼层
开源怎么不把开源资料上传上来呢
shaoziyang 发表于 2020-1-6 09:56 | 显示全部楼层
本帖最后由 shaoziyang 于 2020-1-6 10:03 编辑

可以试试这个汽车人徽章,也是用PIC10制作的

https://hackster.imgix.net/uploads/attachments/824382/20190328_1059321_p7ZQmKLxrc.gif?auto=compress&gifq=35&w=900&h=675&fit=min&fm=mp4



https://www.hackster.io/IObrizio/autobots-pin-badge-bb99d8

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| mzb2012 发表于 2020-1-6 13:25 | 显示全部楼层
shaoziyang 发表于 2020-1-6 09:56
可以试试这个汽车人徽章,也是用PIC10制作的

这个好玩哈
 楼主| mzb2012 发表于 2020-1-6 13:25 | 显示全部楼层
mmuuss586 发表于 2020-1-6 09:43
开源怎么不把开源资料上传上来呢

资料在上面楼层
 楼主| mzb2012 发表于 2020-1-6 13:26 | 显示全部楼层
本帖最后由 mzb2012 于 2020-1-6 14:30 编辑

多谢支持关注
pzsh 发表于 2020-1-6 13:37 | 显示全部楼层
为楼主点赞 !
 楼主| mzb2012 发表于 2020-1-6 14:31 | 显示全部楼层
pzsh 发表于 2020-1-6 13:37
为楼主点赞 !

谢谢支持
 楼主| mzb2012 发表于 2020-1-10 15:07 | 显示全部楼层
本帖最后由 mzb2012 于 2020-1-10 15:15 编辑

11.分享个焊接视频
占楼,后续补充
aspoke 发表于 2020-1-10 19:48 | 显示全部楼层
pic10f200这么小巧呢   
232321122 发表于 2020-1-10 19:49 | 显示全部楼层
这个设计很给力呢。   
ghuca 发表于 2020-1-10 19:49 | 显示全部楼层
pic10f200性能怎么样   
soodesyt 发表于 2020-1-10 19:50 | 显示全部楼层
很精致的单片机   
mnynt121 发表于 2020-1-10 19:50 | 显示全部楼层
pic10f200         
plsbackup 发表于 2020-1-10 19:50 | 显示全部楼层
跟楼主学习一下。   
kmzuaz 发表于 2020-1-10 19:51 | 显示全部楼层
以后穿戴设备必须具备的。   
qiufengsd 发表于 2020-1-10 19:51 | 显示全部楼层
不知道稳定性怎么样   
wengh2016 发表于 2020-1-10 19:51 | 显示全部楼层
               
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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