找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6516|回复: 24
打印 上一主题 下一主题
收起左侧

DS3231M OLED时钟制作+STC15W204单片机程序

  [复制链接]
跳转到指定楼层
楼主
这是画的线路板,原理很简单,看板子就能看明白原理图


这是加工回来的线路板


焊接完成的样子,请忽略焊接水平,哈哈



焊接电池,通电测试



温度是利用DS3231M内部传感器测量的,
值得说明的是加入电量显示,大家都知道15W204没有AD
无法测量电压,我是利用比较器测量(P5.5接100K和0.1u电容,定制板时忘记考虑了)RC充放电与内部基准
电压1.252V比较,加上定时器计算出的电量。
还是很实用的。


左键+键(P3.2),右键功能键(P3.3),



左键有3个功能:
1,平时屏幕是不显示的(节省电能),按下按键,屏幕显示5秒后重新进入待机。
2,常按不送手4秒,启动手电筒功能(P5.4经过PNP三极管输出接LED灯)任意键短按一下LED灭。
3,启动屏幕后,按功能键切换不同项目,再按左键加数字。




        LED         BIT        P5_4        ;手电筒输出端(H关,L开)
        K0_1 BIT        P3.2         ;+键(兼启动显示,和开手电筒)
        K0_2 BIT        P3.3         ;功能键
        sda  BIT        p3.1   ;SDA数据信号
        scl  BIT        p3.0   ;SCL时钟信号
           address        equ        59h    ;256字节地址数


        SECOND        EQU 30H
        MINUTE        EQU 31H
        HOUR          EQU 32H
        WEEK          EQU 33H
        DAY           EQU 34H
        MONTH         EQU 35H
        YEARL         EQU 36H
        DIZHI_X        EQU        5AH        ;列地址
        DIZHI_Y        EQU        5BH        ;页地址(B0-B7)
        SSDDADA EQU 5CH        ;一字节暂存地址


         ORG  00H
        LJMP MAIN
         ORG         03H
        LJMP INT_0        ;中断0


         ORG         0BH
        LJMP T0_0        ;定时器0
        ORG  100H


;===================主程序===================================
MAIN:
           CLR A
        MOV P0M1,A    ;设置准双向口 =00--->准双向口,  01--->推挽输出
        MOV P0M0,A          ;                              =10--->高阻输入,  11--->开漏输出
        MOV P1M1,A    ;
        MOV P1M0,A
        MOV P2M1,A    ;设置准双向口
        MOV P2M0,A
        MOV P3M1,A    ;设置准双向口
        MOV P3M0,A          ;
        MOV P5M1,#00000000B    ;设置P5.5口高阻输入
        MOV P5M0,#00000000B         
         MOV SP, #70H;修改堆栈指针


        MOV IE,#10000011B        ;允许总中断,允许外中断0和定时器0
        MOV TCON,#00000001B         ;下降沿中断0
        MOV TMOD,#00000001B        ;定时器0=模式1,定时模式
        MOV AUXR,#00000010B        ;定时器0/2都工作12分频模式
        MOV TL0,#low(65536-20000) ;12M晶振,20ms
        MOV TH0,#HIGH(65536-20000);每20ms扫描一次按键程序6
        MOV TL2,#0H                ;设置定时初值
        MOV TH2,#0H                ;设置定时初值
        MOV        SP,#60H
        SETB TR0                ;启动定时器0
        LCALL RESET                ;初始化OLED0.91
        LCALL QPCX                ;清屏程序


          LCALL shezhi_3231
        mov 50h,#15                ;亮的秒数,然后进入掉电节能
        JMP STT
SAT:           ;调整时间状态下的屏显程序
        LCALL ZHUAN_T
        LCALL DISP_A
        MOV 40H,#16
        MOV 41H,#16
        MOV 42H,#16        
        MOV 43H,#16
        MOV 44H,#16
        MOV 45H,#16        ;
        MOV 46H,#16
        MOV 47H,#16
        MOV 48H,#16        
        MOV 49H,#16
        MOV 4AH,#16        
        MOV 4BH,#49
        MOV 4CH,#50        
        MOV 4DH,#51
        MOV 4EH,#52        
        MOV 4FH,#16
        LCALL DISP_B
STT:
           MOV A,R1
        JNZ SAT                                ;时间调整状态不掉电、不读时间、加速刷新        
        lcall read_3231                 ;读时间程序
        LCALL ZHUAN_0                  ;数据转换
        lcall DISP_A                ;第1排时间温度显示程序
        LCALL ZHUAN_1                  ;数据转换
        lcall DISP_B                ;第2排星期日期电量显示程序
        LCALL DELAY1S


        LCALL DIANLIANG         ;电量读取程序


        djnz 50h,STT
         MOV R7,#0AEH        ;关闭OLED内部升压,节能
        LCALL COMMAND
         CLR TR0                ;关闭定时器0(防止中断唤醒进入功能+键)
        MOV PCON,#02H        ;掉电模式
        MOV 50H,#10                ;亮的秒数,然后进入掉电节能


           MOV R7,#0AFH        ;打开显示
        LCALL COMMAND
        SETB TR0                ;启动定时器0
        MOV R1,#0        ;强制恢复正常显示
        JMP STT

附上主程序和接线方式,下面是烧写文件
(15W204振荡频率选择6M)
全部程序51hei下载地址:
OLED时钟.rar (3.31 KB, 下载次数: 66)

123.png (36.82 KB, 下载次数: 81)

123.png

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏14 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72088 发表于 2020-12-17 16:52 | 只看该作者
这电池估计两个月不用充电,所以暂时没有焊接备用电池,但是备用电池口预留了。方便后期加电池
其实最苦恼的不是程序,程序可以花时间搞出来,
苦恼的是少漂亮的外壳,哎!!!
回复

使用道具 举报

板凳
ID:102963 发表于 2020-12-18 09:53 | 只看该作者
确实,汇编程序,太难了,一般的人真搞不出来!楼主是高手啊!
回复

使用道具 举报

地板
ID:72088 发表于 2020-12-18 11:09 | 只看该作者
songxia8013 发表于 2020-12-18 09:53
确实,汇编程序,太难了,一般的人真搞不出来!楼主是高手啊!

所以直接给你们烧写程序,直接用,
回复

使用道具 举报

5#
ID:230742 发表于 2020-12-18 11:28 | 只看该作者
好是真好。就是汇编看不懂。
回复

使用道具 举报

6#
ID:99987 发表于 2020-12-23 09:33 | 只看该作者
您好,能提供完整的汇编源码吗?
回复

使用道具 举报

7#
ID:72088 发表于 2021-1-30 09:27 | 只看该作者
下载的人也不给个回信,拍个照片大家看看也好,给作者和大家一个鼓励啊
想电池更耐用的,将DS3231M供电由2脚改到6脚,会更省电,
回复

使用道具 举报

8#
ID:72088 发表于 2021-1-30 09:29 | 只看该作者

附上电路图


回复

使用道具 举报

9#
ID:466896 发表于 2021-1-31 23:00 来自手机 | 只看该作者
用汇编,可移植性太差了,感觉没得必要,下载的人都没得几个,c语言可能会好点
回复

使用道具 举报

10#
ID:99987 发表于 2021-3-10 10:37 | 只看该作者
汇编源代码有吗?
回复

使用道具 举报

11#
ID:99987 发表于 2021-3-10 10:50 | 只看该作者
啊,您展示的汇编不全呀,只是主流程,没有子程序。
回复

使用道具 举报

12#
ID:72088 发表于 2021-3-10 19:21 | 只看该作者
定制电路板多了两块用不完,谁用免费送了,邮费自付
回复

使用道具 举报

13#
ID:99987 发表于 2021-3-11 08:51 | 只看该作者
新乡家电维修 发表于 2021-3-10 19:21
定制电路板多了两块用不完,谁用免费送了,邮费自付

您好,能提供汇编源码吗?板子我要了。
回复

使用道具 举报

14#
ID:385637 发表于 2021-3-26 09:14 | 只看该作者
汇编太难了,有C就好了
回复

使用道具 举报

15#
ID:72088 发表于 2021-8-22 06:54 | 只看该作者
madell 发表于 2021-3-11 08:51
您好,能提供汇编源码吗?板子我要了。

可以
回复

使用道具 举报

16#
ID:17098 发表于 2021-9-12 17:39 | 只看该作者
RC充放电与内部基准
电压1.252V比较,加上定时器计算出的电量,是什么原理不懂,能详解下?
回复

使用道具 举报

17#
ID:72088 发表于 2021-9-16 12:21 | 只看该作者
wxq987113431 发表于 2021-9-12 17:39
RC充放电与内部基准
电压1.252V比较,加上定时器计算出的电量,是什么原理不懂,能详解下?

电压越高,RC充电到固定电压的时间越短,反之时间就会越长,用定时器计算充电时间长短就能反应出电池电压高低
回复

使用道具 举报

18#
ID:960868 发表于 2021-9-18 15:26 | 只看该作者
楼主,可以说说明一下显示屏的型号吗?新手
回复

使用道具 举报

19#
ID:66872 发表于 2021-9-24 09:05 来自手机 | 只看该作者
2292011451 发表于 2021-9-18 15:26
楼主,可以说说明一下显示屏的型号吗?新手

0.91英寸OLED
回复

使用道具 举报

20#
ID:922504 发表于 2021-10-21 14:08 | 只看该作者
楼主  可以提供完整代码吗  想研究一下OLED   感觉很棒
回复

使用道具 举报

21#
ID:922504 发表于 2021-10-21 14:18 | 只看该作者
有没有完整的代码  学习一下  感觉有点意思
回复

使用道具 举报

22#
ID:261025 发表于 2021-11-22 21:11 | 只看该作者
可不可以提供一下ds3231的汇编程序   反汇编得到的汇编程序我看的发蒙
回复

使用道具 举报

23#
ID:72088 发表于 2021-11-25 14:50 | 只看该作者
418854190 发表于 2021-11-22 21:11
可不可以提供一下ds3231的汇编程序   反汇编得到的汇编程序我看的发蒙

;=================设置3231功能=================================
;D0H写入,D1H读出
;
;==============================================================
shezhi_3231:
        mov 20h,#00H        ;DS3231的0eh寄存器
        mov 21h,#00H        ;DS3231的0fh寄存器
        mov        r6,        #0D0H        ;写入数据识别码
        mov r0,#20h                ;r0作为间接寻址
        mov address,#0Eh;开始地址
        mov        r5,        #2
        lcall write
        ret

write:
        lcall start
        mov        a,        r6
        lcall send
        lcall ack
        jc         write
       
        mov        a,        address
        lcall send
        lcall ack
        mov        a,        @r0                ;
        lcall send
        lcall ack
        lcall stop
        inc r0
        inc address
        djnz        r5,        write ;减1后不为0转移,存储6位
        ret
       

;=================3231读程序==============================
read_3231:

        mov r0,#30h                        ;r0开始存放地址
        mov address,#00H        ;指向地址
        mov r5,        #7          
ss:        mov r2,        #0D0H;3231ID识别       
        mov r4,        #0D1H;读3231
        Lcall read                ;调用读存储器程序
        inc address
        inc        r0
        djnz r5,ss

        mov r0,#38h                        ;r0开始存放地址
        mov address,#11H        ;指向温度地址  
        mov r2,        #0D0H;3231ID识别       
        mov r4,        #0D1H;读3231
        Lcall read                ;调用读存储器程序
        ret

;----------------------------------
read:
        lcall start                ;启动总线
        mov         a,        r2        ;发送芯片识别码
        lcall send
        lcall ack                ; 芯片应答
        jc         read                ;
               
        mov         a,        address
        lcall send
        lcall ack
read_a:
        lcall start
        mov         a,r4
        lcall send
        lcall ack
        jc         read_a
rece:
        lcall receive
        mov         @r0,a        ;读到数据存储到@R0指定地址
        lcall ack
        lcall stop
        ret
;-------总线启动程序---------
start:
        setb         scl
        setb         sda
        nop
        nop
        clr         sda
        nop
        nop
        clr         scl
        ret
;-------总线停止程序---------
stop:
        clr         sda
        nop
        nop
        setb         scl
        nop
        nop
        setb         sda
        ret
;-----------应答----------
ack:
        setb         sda
        nop
        nop
        setb         scl
        jb         sda,        ack_0
        clr         c
        sjmp         ack_1
ack_0:
        setb         c
ack_1:
        nop
        nop
        clr         scl
        ret
;--------------发送8位数据---------
send:
        mov         b,        #08h
send_1:
        rlc         a
        mov         sda,        c
        setb         scl
        nop
        nop
        clr         scl
        djnz         b,        send_1
        ret
;--------------接收8位数据-----------
receive:
        mov         b,        #08h
        clr         a
        setb         sda
receive_1:
        setb         scl
        nop
        nop
        mov         c,sda
        rlc         a
        clr         scl
        djnz         b,        receive_1
        ret


回复

使用道具 举报

24#
ID:230500 发表于 2021-11-26 00:38 | 只看该作者
这是汇编高手, 我们菜鸟看不懂, 只会C
回复

使用道具 举报

25#
ID:261025 发表于 2021-12-5 22:34 | 只看该作者
新乡家电维修 发表于 2021-11-25 14:50
;=================设置3231功能=================================
;D0H写入,D1H读出
;

谢谢了 这段程序已经用上了   
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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