打印
[PIC®/AVR®/dsPIC®产品]

pic10F单片机可穿戴闪灯DIY(开源)

[复制链接]
8873|119
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzb2012|  楼主 | 2019-12-23 09:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mzb2012 于 2020-1-2 14:56 编辑

1.背景:

准备DIY一个闪灯给小朋友玩,练习一下动手能力,同时活跃一下节日的气氛。主控采用microchip公司的最最精简的单片机pic10F200

2.系统组成:

  • 主控芯片pic10f200(其他202,204,206,也可)


  • CR2032电池  X1

  • 直插草帽LED  X3

  • 独立按键  X1

  • CR2032电池座  X1




3.系统原理:

使用特权

评论回复
评论
朱倪 2020-1-16 17:34 回复TA
朋友 看你分析技术问题很赞!我们需要你这样的人才,撰写技术心得体会拿稿酬 请加我微信 kuaibao52 备注来自21ic 
沙发
yiy| | 2019-12-23 23:29 | 只看该作者
MARK一下。

使用特权

评论回复
板凳
yiy| | 2019-12-23 23:30 | 只看该作者
可以作为高级的那个啥,演唱会用的那个灯。。。

使用特权

评论回复
地板
yiy| | 2019-12-23 23:31 | 只看该作者
荧光棒。。。。。。。。。。。。。。。。

使用特权

评论回复
5
mzb2012|  楼主 | 2019-12-24 21:09 | 只看该作者
4.画原理图和PCB Layout
使用开源软件绘图和走线,元器件比较少,很快就搞定










使用特权

评论回复
6
mzb2012|  楼主 | 2019-12-25 09:04 | 只看该作者
yiy 发表于 2019-12-23 23:30
可以作为高级的那个啥,演唱会用的那个灯。。。

哈哈,好主意

使用特权

评论回复
7
mzb2012|  楼主 | 2019-12-25 16:11 | 只看该作者
本帖最后由 mzb2012 于 2019-12-25 23:08 编辑

5.开发环境
1)MPLABX IDE + XC8编译,使用ASM语言编写
  +



(2)调试器采用ICD4



先熟悉下,pic10F系列单片机的汇编35条指令




使用特权

评论回复
8
lcczg| | 2019-12-26 09:27 | 只看该作者
这个要点赞

使用特权

评论回复
9
mzb2012|  楼主 | 2019-12-26 10:45 | 只看该作者
6.新建工程
具体操作看图,新建一个汇编工程,使用芯片pic10F200



使用特权

评论回复
10
mzb2012|  楼主 | 2019-12-26 10:46 | 只看该作者

谢谢关注

使用特权

评论回复
11
mzb2012|  楼主 | 2019-12-26 21:52 | 只看该作者
本帖最后由 mzb2012 于 2019-12-26 21:54 编辑

7.程序流程图
长按按键用于切换工作状态,短按按键用于切换运行模式



使用特权

评论回复
12
chongdongchen| | 2019-12-27 08:55 | 只看该作者
以前我也做过一个给小孩玩,用PIC12F508。
用红绿蓝三个灯,外加一个震动开关,装在一个透明小瓶子里。用力拍一下或甩一下就开始各种颜色变换,延时一段时间后关灯休眠。

使用特权

评论回复
13
mzb2012|  楼主 | 2019-12-27 09:19 | 只看该作者
chongdongchen 发表于 2019-12-27 08:55
以前我也做过一个给小孩玩,用PIC12F508。
用红绿蓝三个灯,外加一个震动开关,装在一个透明小瓶子里。用力 ...

创意不错

使用特权

评论回复
14
mzb2012|  楼主 | 2019-12-27 10:23 | 只看该作者
本帖最后由 mzb2012 于 2019-12-28 08:09 编辑

8.开始代码编写
最开始先使用伪指令定义若干变量和宏。
(1)cblock/endc                                           
作用:
它是变量块连续定义指令。
方法:
cblock指令声明变量块的起始地址;
endc指令声明变量块的定义结束;
它们之间可以插入任意多的变量声明,其地址编排由编译器自动计算;第一个变量地址分配从起始地址开始,然后按所声明变量保留的字节数自动分配后面变量的地址,变量所需保留的字节数用“:”冒号后面的数字表示,如果只有1个字节“:1”可以省略不写。

(2)equ
作用:
给数字变量起个别名
方法:
可以直接替换立即数
例如:Temp equ 20,  符号Temp替换立即数20
如果要替换一个符号名字,则此符号名必须已经使用#defineequ伪指令替换了一个立即数。

(3)macro/endm
作用:定义自己的宏,提高程序的可读性、可移植性
方法:宏指令的定义由“宏指令名”开始,后跟关键词“macro”,其后可以带若干宏参数,也可以不跟任何宏参数;然后从下一行起开始写基本的汇编指令或已被认可的其他宏指令;指令可以任意多行,最后以关键词“endm”结束整个宏定义。

(4)附上代码
;
;项目说明:这是一个开源的基于pic10F200的闪灯DIY
;作   者 : mzb2012
;时   间 : 2019-12
   
; PIC10F200 Configuration Bit Settings
; Assembly source line config statements
#include "p10f200.inc"
; CONFIG
; __config 0xFFEB
__CONFIG _WDTE_OFF & _CP_OFF & _MCLRE_OFF

;***************变量定义*****************************************
;对于10F200单片机,GPR寄存器从0x10地址开始,范围0x10-0x1F共16bytes
;****************************************************************
;变量块定义
cblock 0x10
    delay.loop.in
    delay.loop.out
    switch.timer
    hold.timer
    led.state
    mode
    index
    index.base
    mask
endc
   
;位变量定义
pb.swtich equ 3                ;按键端口   
pb.led1 equ 0                ;LED1端口
pb.led2 equ 1                ;LED2端口
pb.led3 equ 2                ;LED3端口
multiplex equ 7                ;multiplex标志变量
pson equ 1<<multiplex        
psoff equ 0
led1on equ 1<<pb.led1
led1off equ 0
led2on equ 1<<pb.led2
led2off equ 0
led3on equ 1<<pb.led3
led3off equ 0

;宏定义
ledstep MACRO        hold,pwrsave,led1,led2,led3
            retlw hold
            retlw pwrsave|led1|led2|led3
        ENDM
restart MACRO
            retlw 0
        ENDM





使用特权

评论回复
15
mzb2012|  楼主 | 2019-12-28 08:55 | 只看该作者
本帖最后由 mzb2012 于 2019-12-29 11:51 编辑

9.编写LED闪烁查表
(1)radix伪指令
作用:用于设置进制格式,dec=10进制,hex=16进制,oct=8进制
例如:radix dec   ;设置10进制
(2)org伪指令
作用:定义程序代码的起始地址,这个指令可以把程序定位到任何可用的程序空间,它实现的是代码的绝对定位。例如:org 0x0000;定义代码的复位地址,以下指令从地址0x0000开始goto main;

;***********************************************************
;对于pic10F200芯片,内部晶振校准值参数在0xFF地址存储的
ORG 0x0000
movwf OSCCAL
goto start
;**********************************************************
;LED闪烁模式查找表
;对于每一种闪烁模式,必须在有一个相应的分支入口
;返回值max.mode同样必须设置
radix dec
select.mode movfw mode
             addwf PCL,f
             retlw mode.1
             retlw mode.2
             retlw mode.3
             retlw mode.4
             retlw mode.5
             retlw mode.6
             retlw mode.7
max.mode retlw 7        ;模式最大种类数
;定义闪烁序列
;ledstep hold_time,power_save,LED1_state,LED2_state,LED3_state
;hold_time是1-255的数值,没计一个数单位20ms,所以当hold_time=50时,就是1000ms
;power_save定义了省电模式,开启后LED亮度略暗,更省电
;psoff---省电模式关闭,全功率运行
;pson---省电模式开启,节电运行
;LEDx_state 定义灯的亮或灭
;模式1,常量,节电模式
mode.1 ledstep 50,pson,led1on,led2on,led3on
       restart
;模式2,常量,正常模式
mode.2 ledstep 50,psoff,led1on,led2on,led3on
       restart  
;模式3,所有闪烁,节电模式
mode.3 ledstep 18,pson,led1on,led2on,led3on
       ledstep 18,pson,led1off,led2off,led3off
       restart
;模式4,单个LED亮,正常模式
mode.4 ledstep 12,psoff,led1on,led2off,led3off
       ledstep 12,psoff,led1off,led2on,led3off
       ledstep 12,psoff,led1off,led2off,led3on
       ledstep 12,psoff,led1off,led2on,led3off
       restart
;模式5,所有LED频闪,正常模式
mode.5 ledstep 2,psoff,led1on,led2on,led3on
       ledstep 30,psoff,led1off,led2off,led3off
       restart
;模式6,所有LED短灭长亮,正常模式
mode.6 ledstep 2,psoff,led1on,led2off,led3off
       ledstep 10,psoff,led1off,led2on,led3off
       ledstep 60,pson,led1on,led2on,led3on
       ledstep 10,psoff,led1off,led2on,led3off
       restart
;模式7,所有LED短灭长亮,正常模式
mode.7 ledstep 1,psoff,led1on,led2off,led3off
       ledstep 3,psoff,led1off,led2on,led3off
       ledstep 1,psoff,led1on,led2off,led3off
       ledstep 3,psoff,led1off,led2on,led3off
       ledstep 1,psoff,led1on,led2off,led3off
       ledstep 3,psoff,led1off,led2on,led3off
       ledstep 1,psoff,led1on,led2off,led3off
       ledstep 3,psoff,led1off,led2on,led3off
       ledstep 1,psoff,led1on,led2off,led3off
       ledstep 3,psoff,led1off,led2on,led3off
       ledstep 1,psoff,led1on,led2off,led3off
       ledstep 50,psoff,led1off,led2on,led3off
       restart
;结束LED闪烁模式查找表






使用特权

评论回复
16
kavent| | 2019-12-28 19:26 | 只看该作者
路过看看!楼主费心了!支持一下!

使用特权

评论回复
17
mzb2012|  楼主 | 2019-12-28 23:13 | 只看该作者
kavent 发表于 2019-12-28 19:26
路过看看!楼主费心了!支持一下!

谢谢支持和关注

使用特权

评论回复
18
mzb2012|  楼主 | 2019-12-29 11:36 | 只看该作者
本帖最后由 mzb2012 于 2019-12-29 14:35 编辑

10.PCB板子和元件

打样的小板子收到啦,颜色很红火




使用特权

评论回复
19
yiy| | 2019-12-29 17:11 | 只看该作者
竟然是汇编,牛。

使用特权

评论回复
20
mzb2012|  楼主 | 2019-12-29 21:52 | 只看该作者
yiy 发表于 2019-12-29 17:11
竟然是汇编,牛。

汇编和C差不多,实时性高一点,只不过移植性差一些,对于pic10这种空间资源有限,杀**就不用牛刀了吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

354

帖子

9

粉丝