《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

STC89C51RC的一个经典程序!
程序匠人 发表于 2006-10-23 8:32:00  阅读全文 | 回复(1) | 引用通告 | 编辑

;---------------------------------------------------------------
led_com      bit    p3.3               ;数码管公共阴极
speak        bit    p3.5               ;蜂鸣器控制

s_numb       equ    30H                ;20ms的次数(25x20=500ms)
s_data       equ    31h                ;LED灯显示的数据
s_set        equ    32h                ;秒显示的数据
data_t       equ    33h

             org    0000h
             ajmp   main
             org    0003h
             ;ljmp   to_int0          ;到中断0
             org    000bh             ;
             ljmp   to_t0             ;到T0
             org    0023h
             ljmp   to_sbuf           ;到串口

             org    0100h
a_delay:                              ;延时子程序
             mov   r5,#01h
de3:         mov   r7,#0e0h
de2:         mov   r6,#00h
de1:         djnz  r6,de1
             djnz  r7,de2
             djnz  r5,de3
             ret
a_delay1:
             mov   r7,#09h
     de21:   mov   r6,#00h
     de11:   djnz  r6,de11
             djnz  r7,de21
             ret
l_speak:                              ;蜂鸣器叫声子程序
            clr    speak              ;
            setb   speak              ;发声
            lcall  a_delay1           ;延时
            clr    speak
            ret
;---------------数码管查表代码--------------------
tab:        db     3fh     ;'0'
            db     06h     ;'1'
            db     5bh     ;'2'
            db     4fh     ;'3'
            db     66h     ;'4'
            db     6dh     ;'5'
            db     7dh     ;'6'
            db     07h     ;'7'
            db     7fh     ;'8'
            db     6fh     ;'9'01101111b

f_tab:      mov    dptr,#tab          ; 查表子程序
            movc   a,@a+dptr
            ret

disp_x:     lcall  f_tab              ;A=?(0,1,2,3,4,5,6,7,8,9?)
            mov    p2,a               ;送数到P2
            setb   led_com            ;开数码管
            lcall  a_delay            ;延时
            ret

;-----------------LED灯的控制--------------------
off_led:    mov     a,#0ffh
            mov     p0,a
            ret
on_led1:    lcall   off_led           ;开LED1(灯)
            clr     p0.0
            ret
on_led2:    lcall   off_led
            clr     p0.1              ;开LED2(灯)
            ret
on_led3:    lcall   off_led
            clr     p0.2              ;开LED3(灯)
            ret
on_led4:    lcall   off_led
            clr     p0.3              ;开LED4(灯)
            ret
on_led5:    lcall   off_led
            clr     p0.4              ;开LED5(灯)
            ret
on_led6:    lcall   off_led
            clr     p0.5
            ret
on_led7:    lcall   off_led
            clr     p0.6
            ret
on_led8:    lcall   off_led
            clr     p0.7
            ret
;------------------------------------------------------
disp_R_L:
            lcall   on_led2          ;开灯'2'

            mov     a,#01h           ;显示'1'
            lcall   disp_x           ;查表显示

            lcall   on_led4          ;开灯'4'
            mov     a,#02h           ;显示'2'
            lcall   disp_x           ;查表显示

            lcall   on_led6          ;开灯'6'
            mov     a,#03h           ;显示'3'
            lcall   disp_x           ;查表显示

            lcall   on_led8          ;开灯'8'
            mov     a,#04h           ;显示'4'
            lcall   disp_x           ;查表显示

            lcall   on_led7          ;开灯'7'
            mov     a,#05h           ;显示'5'
            lcall   disp_x           ;查表显示

            lcall   on_led5          ;开灯'5'
            mov     a,#06h           ;显示'6'
            lcall   disp_x           ;查表显示

            lcall   on_led3          ;开灯'3'
            mov     a,#07h           ;显示'7'
            lcall   disp_x           ;查表显示

            lcall   on_led1          ;开灯'1'
            mov     a,#08h           ;显示'8'
            lcall   disp_x           ;查表显示
            ret
disp_L_R:
            lcall   on_led1          ;开灯'1'

            mov     a,#01h           ;显示'1'
            lcall   disp_x           ;查表显示

            lcall   on_led3          ;开灯'3'
            mov     a,#02h           ;显示'2'
            lcall   disp_x           ;查表显示

            lcall   on_led5          ;开灯'5'
            mov     a,#03h           ;显示'3'
            lcall   disp_x           ;查表显示

            lcall   on_led7          ;开灯'7'
            mov     a,#04h           ;显示'4'
            lcall   disp_x           ;查表显示

            lcall   on_led8          ;开灯'8'
            mov     a,#05h           ;显示'5'
            lcall   disp_x           ;查表显示

            lcall   on_led6          ;开灯'6'
            mov     a,#06h           ;显示'6'
            lcall   disp_x           ;查表显示

            lcall   on_led4          ;开灯'4'
            mov     a,#07h           ;显示'7'
            lcall   disp_x           ;查表显示

            lcall   on_led2          ;开灯'2'
            mov     a,#08h           ;显示'8'
            lcall   disp_x           ;查表显示
            ret


;------------------------定时器0(秒信号)-------------------------------
;
;       机器周器:12/11.0592M=1.085微妙
;       定时一秒,从p0口输出, (25个20ms)  [500ms反转一次]
;       N(次数)=20毫秒/1.085微妙=18433D
;       用16位定时,T0初值X=65535-18433=47102D=B7FEH ,即:th0=B7h,tl0=FEh
;       用s_numb记次数(共25次)
;----------------------------------------------------------------------
to_t0:      mov     th0,#0b7h           ;重新装入常数
            mov     tl0,#0feh
            setb    tr0
            dec     s_numb              ;总次数减一
            mov     r3,s_numb
            cjne    r3,#00h,no_to1s     ;无减完退出!

            mov     s_numb,#25          ;减完,需重新置次数.

            mov     a,s_data            ;LED灯显示
            cpl     a
            mov     p0,a
            mov     s_data,a

            mov     a,#08h              ;判断秒显示>9?
            clr     c
            subb    a,s_set
            jc      to_00m

            inc     s_set
            mov     a,s_set

            lcall   disp_x              ;查表显示秒(1,2...,9)
no_to1s:
            reti
to_00m:     mov     s_set,#00h
            mov     a,s_set

            lcall   disp_x              ;查表显示0秒
            reti
;
;----------------串口部分--------------------
;
R_cd:       mov     a,#0aah
            mov     sbuf,a
w_cd_aa:    jbc     ti,is_cd1
            sjmp    w_cd_aa
is_cd1:
            mov     sbuf,data_t
w_cd_cd:    jbc     ti,is_cd2
            sjmp    w_cd_cd
is_cd2:
            ret
to_sbuf:
            jbc     ri,to_comd1
            sjmp    to_sbuf
to_comd1:   mov     a,sbuf
            cjne    a,#0aah,no_aah_end
w_cd1:
            jbc     ri,to_comd2
            sjmp    w_cd1
to_comd2:   mov     a,sbuf
            cjne    a,#01h,no_cd1
            mov     data_t,a
            mov     s_data,a

            mov     a,#01h
            lcall   disp_x           ;查表显示
            lcall   R_cd
            sjmp    no_aah_end
no_cd1:     cjne    a,#02h,no_cd2
            mov     s_data,a
            mov     data_t,a
            mov     a,#02h
            lcall   disp_x           ;查表显示
            lcall   R_cd
            sjmp    no_aah_end
no_cd2:     cjne    a,#03h,no_cd3
            mov     s_data,a
            mov     data_t,a
            mov     a,#03h
            lcall   disp_x           ;查表显示
            lcall   R_cd
            sjmp    no_aah_end

no_cd3:     cjne    a,#04h,no_cd4
            mov     data_t,a
            lcall   disp_L_R
            lcall   disp_R_L
            mov     a,#04h
            lcall   disp_x           ;查表显示
            lcall   R_cd
            sjmp    no_aah_end

no_cd4:     cjne    a,#05h,no_cd5
            mov     data_t,a
            lcall   disp_R_L
            lcall   disp_L_R

            mov     a,#05h
            lcall   disp_x           ;查表显示
            lcall   R_cd
            sjmp    no_aah_end
no_cd5:
            cjne    a,#06h,no_cd6
            mov     s_data,#99h

            mov     a,#06h
            lcall   disp_x           ;查表显示
            lcall   R_cd
            lcall   l_speak
            sjmp    no_aah_end
no_cd6:

no_aah_end:
            reti


;-------------主程序部分----------------------
main:       mov     sp,#60h          ;设堆栈
            mov     p0,#55h
            setb    led_com
            clr     speak
            sjmp    main
            mov     ie,#0ffh          ;将中断全部关掉?
            mov     tmod,#00100001b  ;T1为8位重装(0010b为波特率),T0为本16位定时器(0001b)
            mov     tl1,#0fdh        ;波特率:9.6K
            mov     th1,#0fdh
            mov     pcon,#00h        ;smod=0
            mov     scon,#01010000b  ;方式1,8bit
;
;       机器周器:12/11.0592M=1.085微妙
;       定时一秒,从p0口输出, (25个20ms)  [500ms反转一次]
;       N(次数)=20毫秒/1.085微妙=18433D
;       用16位定时,T0初值X=65535-18433=47102D=B7FEH ,即:th0=B7h,tl0=FEh
;       用s_numb记次数(共25次)
;

            mov     th0,#0B7h
            mov     tl0,#0FEh

            mov     s_numb,#25       ; (25x20=500ms)
            mov     s_data,#5ah      ;?
            mov     s_set,#00h

            clr     speak            ;speak(p3.5)关蜂鸣器
            mov     p2,#00h
            setb    led_com

            setb    ea
            setb    et0
            setb    tr0

            setb    es
            setb    tr1
            setb    ren

loop:
            lcall   disp_R_L         ;                                   
            lcall   disp_L_R         ;
            lcall  l_speak           ;发声
            lcall  a_delay           ;
            lcall   disp_L_R         ;

            cpl    p1.0
            ljmp   loop              ;循环显示
            end


      END

看《匠人手记》,与匠人同行!北航出版,正在热卖!

大力支持顶~~~
ZAJZXFY(游客)发表评论于2007-3-30 21:48:00  个人主页 | 引用 | 返回 | 删除 | 回复

ZAJZXFY(游客)我早支持顶

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!