找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机—一起学汇编

[复制链接]
跳转到指定楼层
楼主

/******************
语言:   汇编
项目:   1位数码管显示 0-F      
芯片:   STC 12C2052AD   PDIP-20
日期:   2019.2.18
编写:   ZCT      


P3.5       接数码管COM
P1.0-P1.7  接数码管段位a b c d e f g dp

******************/

    LED3 BIT P3.5                      ;用 LED3 表示 I/O口P3.5                  


          ORG 000H                    ;程序从地址 00H 开始
          JMP MAIN                    ;调转到 MAIN 函数

MAIN:
          MOV SP,#60H                 ;堆栈地址设为 60H
          MOV P1,#0FFH                ;P1口赋初值
          MOV P3,#0FFH                ;P3口赋初值
          MOV DPTR,#TABLE             ;表格数据放入指针
          MOV R0,#0                 ;显示赋初值,并放入寄存器 R0              LOOP:          MOV A,R0                   ;寄存器 R0 内容移入寄存器 A
          MOVC A,@A+DPTR             ;以 寄存器A 为基地址 DPTR为偏移地址,找表格内容移入A
          MOV P1,A                    ;寄存器A 的内容从 P1 口输出
          CLR LED                     ;P3.5 口输出0
          CALL DELAY                  ;调用延时子程序
          SETB LED                    ;P3.5 口输出1
          INC R0                      ;R0 加1
          CJNE R0,#16,LOOP            ;R0与立即数 16比较,不等跳转到LOOP,相等执行下一条指令
          JMP MAIN                    ;跳转到 MAIN 函数


DELAY:                                ;1秒延时子程序
          MOV R7,#20
D1:          MOV R6,#200
D2:          MOV R5,#250
          DJNZ R5,$
          DJNZ R6,D2
          DJNZ R7,D1
RET

TABLE:                                ;0-F 表格查询  
          DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H          ;0-9
          DB 90H,88H,80H,0C6H,0C0H,86H,8EH                     ;A-F
END


IMG_20190218_145011.jpg (2.35 MB, 下载次数: 36)

IMG_20190218_145011.jpg

IMG_20190218_145018.jpg (2.35 MB, 下载次数: 31)

IMG_20190218_145018.jpg

IMG_20190223_223052.jpg (1.57 MB, 下载次数: 26)

IMG_20190223_223052.jpg

IMG_20190223_222133.jpg (93.67 KB, 下载次数: 36)

IMG_20190223_222133.jpg

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2019-2-18 15:52 | 只看该作者
本帖需要重新编辑补全电路原理图即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:255377 发表于 2019-2-24 14:43 | 只看该作者
延续上次电路

/******************
语言:   汇编
项目:   2位数码管显示 0-FF      
芯片:   STC 12C2052AD   PDIP-20
日期:   2019.2.24
编写:   ZCT      


P3.5       接数码管COM
P3.4       接数码管COM
P1.0-P1.7  接数码管段位a b c d e f g dp
   
******************/

    LED BIT P3.5                      ;用 LED 表示 I/O口P3.5                  
    LED1 BIT P3.4

          ORG 000H                    ;程序从地址 00H 开始
          JMP MAIN                    ;调转到 MAIN 函数

MAIN:
          MOV SP,#60H                 ;堆栈地址设为 60H
          MOV P1,#0FFH                ;P1口值1
          MOV P3,#0FFH               
          MOV DPTR,#TABLE             ;表格数据放入指针
          MOV R0,#0FFH                 ;显示赋初值,并放入寄存器 R0
         

DISP:     MOV R1,#30                  ;刷新次数,可以更改立即数看效果。
          MOV A,R0                    ;装入初值
          MOV B,#16                   ;16进制调整.  可以载人 10  看看效果。
          DIV AB                      ;除
          MOV 30H,B                   ;余数放B
          MOV 31H,A                   ;商放A

LOOP:     MOV A,31H                   ;装入商
          MOVC A,@A+DPTR              ;查表
          MOV P1,A                    ;显示A的数据
          CLR LED1                    ;LED1 值0,打开
          CALL DELAY_5MS              ;延时
          SETB LED1                   ;LED1 值1,关闭

          MOV A,30H                   ;同上
          MOVC A,@A+DPTR              
          MOV P1,A                    
          CLR LED                     
          CALL DELAY_5MS              
          SETB LED                    
          DJNZ R1,LOOP                ;刷新次数循环,一定要调至LOOP。动手改跳到DISP看看效果
          INC R0                      ;R0 加1
          CJNE R0,#255,DISP           ;判断R0 是否等于 255,不等调至DISP
          MOV  R0,#0                  ;清R0
JMP MAIN
         



DELAY_5MS:
         
          MOV R3,#20
D3:          MOV R4,#250
          DJNZ R4,$
          DJNZ R3,D3
RET



TABLE:                                ;0-F 表格查询  
          DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H          ;0-9
          DB 90H,88H,80H,0C6H,0C0H,86H,8EH                     ;A-F
END
回复

使用道具 举报

地板
ID:7485 发表于 2019-2-25 09:38 | 只看该作者
1位数码管改成2位数码管了?可是你的电路图是4位数码管的啊!
回复

使用道具 举报

5#
ID:255377 发表于 2019-3-2 15:06 | 只看该作者
4位数码管显示FFFF,就不发了,自己动手改一下。
本次还是延续发表于 2019-2-18 电路

/******************

语言:   汇编
项目:   4位数码管时间显示   
芯片:   STC 12C2052AD   PDIP-20
日期:   2019.3.2
编写:   ZCT      


P3.5       接数码管COM
P3.4       接数码管COM
P3.3       接数码管COM
P3.2       接数码管COM
P1.0-P1.7  接数码管段位a b c d e f g dp


注意:时间精度不高,每分钟慢4.3秒
   
******************/




/**************数码管显示时间初始化***************************/
LED0  BIT  P3.5
LED1  BIT  P3.4
LED2  BIT  P3.3
LED3  BIT  P3.2
SEC   DATA  30H
MIN   DATA  31H
HOUR  DATA  32H

       ORG  0000H
       JMP MAIN
       ORG 000BH
       LJMP TIME_TF0
       ORG 0030H
MAIN:
       MOV SP,#60H
       MOV P1,#0FFH
       MOV P3,#0FFH
       MOV SEC,#59                ;秒钟初值
       MOV MIN,#59                ;分钟初值
       MOV HOUR,#00               ;时钟初值
       MOV DPTR,#TABLE

       MOV TMOD,#11H                   ;设置定时器工作方式为1
       SETB EA                         ;启动总中断
       SETB ET0                        ;启动定时器0中断
       MOV TH0,#HIGH(65535-50000)      ;定时器0高8位赋值
       MOV TL0,#LOW(65535-50000)       ;定时器0低8位赋值
       SETB TR0                        ;启动定时器0
       MOV R0,#11                      ;定时器中断循环次数

       LCALL DISPLAY_MIN               ;显示分钟初值      
       LCALL DISPLAY_HOUR              ;显示时钟初值
START:                           
       LCALL DISPLAY_MIN               ;显示定时值
       LCALL DISPLAY_HOUR              
       JMP START     

/***************定时器中断程序******************/  
TIME_TF0:
       CLR TR0                        ;关闭定时器
       MOV TH0,#HIGH(65535-50000)     ;定时器重新赋值  
       MOV TL0,#LOW(65535-50000)
       SETB TR0                       ;启动定时器      
       DJNZ R0,RETURN                 ;1秒定时。判断R0是否为零,返回到START。如等于零,执行下一条。
       MOV R0,#11                     ;重新赋值
       INC SEC                        ;秒寄存器加1
       MOV R3,SEC                     ;秒的值载人R3
       CJNE R3,#60,TIME_TF0           ;判断SEC不等于60,返回到定时器中断。 等于60下一条
       MOV SEC,#0                     ;秒值清零
       JMP TIME_MIN                   ;跳到分钟寄存器

RETURN:RETI

TIME_MIN:                             ;注释同上
       INC MIN
       MOV R3,MIN
       CJNE R3,#60,TIME_TF0
       MOV MIN,#0
       JMP TIME_HOUR

TIME_HOUR:
       INC HOUR
       MOV R3,HOUR
       CJNE R3,#24,TIME_TF0
       MOV HOUR,#0
       JMP TIME_TF0                   ;返回到定时器中断


/***************以下参考发表于2月24日的注释****************/
/***************分钟显示程序****************/
DISPLAY_MIN:
              
       MOV A,MIN
       MOV B,#10
       DIV AB

       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED1
       CALL DELAY_10MS
       SETB LED1
       CALL DELAY_10MS

       MOV A,B
       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED0
       CALL DELAY_10MS
       SETB LED0
       CALL DELAY_10MS      
RET
/***************时钟显示程序****************/  
DISPLAY_HOUR:
              
       MOV A,HOUR
       MOV B,#10
       DIV AB

       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED3
       CALL DELAY_10MS
       SETB LED3
       CALL DELAY_10MS

       MOV A,B
       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED2
       CALL DELAY_10MS
       SETB LED2
       CALL DELAY_10MS      
RET
/**************延时程序****************/           
DELAY_10MS:
        MOV R7,#10
D1:        MOV R6,#250
D2:        DJNZ R6,D2
        DJNZ R7,D1
RET

TABLE:     
           DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
           DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
回复

使用道具 举报

6#
ID:255377 发表于 2019-3-3 16:40 | 只看该作者
本次还是延续发表于 2019-2-18 电路
本次更换芯片:STC 12C2052AD更换为STC 12C5608AD
本次增加交替显示:   秒钟和分钟时钟交替显示

/******************
语言:   汇编
项目:   4位数码管时间显示    时钟分钟和秒钟交替显示
芯片:   STC 12C5608AD   PDIP-20
日期:   2019.3.3
编写:   ZCT      


P3.5       接数码管COM
P3.4       接数码管COM
P3.3       接数码管COM
P3.2       接数码管COM
P1.0-P1.7  接数码管段位a b c d e f g dp

晶振:12M
   
******************/

/**************数码管显示时间初始化***************************/
LED0  BIT  P3.5
LED1  BIT  P3.4
LED2  BIT  P3.3
LED3  BIT  P3.2
SEC   DATA  30H
MIN   DATA  31H
HOUR  DATA  32H

       ORG  0000H
       JMP MAIN
       ORG 000BH
       LJMP TIME_TF0
       ORG 0030H
MAIN:
       MOV SP,#60H
       MOV P1,#0FFH
       MOV P3,#0FFH
       MOV SEC,#57                ;秒钟初值
       MOV MIN,#58                ;分钟初值
       MOV HOUR,#19               ;时钟初值
       MOV 20H,#0
       MOV DPTR,#TABLE
       MOV TMOD,#11H                  ;设置定时器工作方式为1
       MOV IE,#10001010B                     ;启动总中断;启动定时器0中断                              
       MOV TH0,#HIGH(65535-50000)      ;定时器0高8位赋值
       MOV TL0,#LOW(65535-50000)       ;定时器0低8位赋值
       SETB TR0                        ;启动定时器
       MOV R0,#20                      ;定时器中断循环次数
       MOV R1,#20
       LCALL DISPLAY_MIN               ;显示分钟初值      
       LCALL DISPLAY_HOUR              ;显示时钟初值

START:
       LCALL DISPLAY_MIN               
       LCALL DISPLAY_HOUR
       CJNE R4,#6,START                ;分钟时钟显示时间

DIAPLAYSEC:      
       LCALL DISPLAY_SEC
       CJNE R4,#13,DIAPLAYSEC           ;秒钟显示时间
       MOV 20H,#0                       ;交替值清零
       JMP START


/***************定时器中断程序******************/  
TIME_TF0:
       CLR TR0                        ;关闭定时器
       MOV TH0,#HIGH(65535-50000)     ;定时器重新赋值  
       MOV TL0,#LOW(65535-50000)
       SETB TR0                       ;启动定时器
       DJNZ R0,RETURN                 ;1秒定时。判断R0是否为零,返回到START。如等于零,执行下一条。*/      
       MOV R0,#20                     ;重新赋值
       INC SEC                        ;秒寄存器加1

       INC 20H                        ;交替显示时间
       MOV R4,20H

       MOV R3,SEC                     ;秒的值载人R3
       CJNE R3,#60,TIME_TF0           ;判断SEC不等于60,返回到定时器中断。 等于60下一条
       MOV SEC,#0                     ;秒值清零
       JMP TIME_MIN                   ;跳到分钟寄存器

RETURN:RETI

TIME_MIN:                             ;注释同上
       INC MIN
       MOV R3,MIN
       CJNE R3,#60,TIME_TF0
       MOV MIN,#0
       JMP TIME_HOUR

TIME_HOUR:
       INC HOUR
       MOV R3,HOUR
       CJNE R3,#24,TIME_TF0
       MOV HOUR,#0
       JMP TIME_TF0                   ;返回到定时器中断

      
/***************以下参考2月24日的注释****************/
/***************秒钟显示程序****************/
DISPLAY_SEC:

       MOV A,SEC
       MOV B,#10
       DIV AB

       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED1
       CALL DELAY_10MS
       SETB LED1
       CALL DELAY_10MS

       MOV A,B
       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED0
       CALL DELAY_10MS
       SETB LED0
       CALL DELAY_10MS
RET      
/***************分钟显示程序****************/
DISPLAY_MIN:
              
       MOV A,MIN
       MOV B,#10
       DIV AB

       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED1
       CALL DELAY_10MS
       SETB LED1
       CALL DELAY_10MS

       MOV A,B
       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED0
       CALL DELAY_10MS
       SETB LED0
       CALL DELAY_10MS      
RET
/***************时钟显示程序****************/  
DISPLAY_HOUR:
              
       MOV A,HOUR
       MOV B,#10
       DIV AB

       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED3
       CALL DELAY_10MS
       SETB LED3
       CALL DELAY_10MS

       MOV A,B
       MOVC A,@A+DPTR
       MOV P1,A
       CLR LED2
       CALL DELAY_10MS
       SETB LED2
       CALL DELAY_10MS
RET
/**************延时程序****************/           
DELAY_10MS:
        MOV R7,#1
D1:        MOV R6,#5
D2:        DJNZ R6,D2
        DJNZ R7,D1
RET

TABLE:     
           DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
           DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
回复

使用道具 举报

7#
ID:255377 发表于 2019-3-5 17:50 | 只看该作者
本次还是延续发表于 2019-2-18 电路
本次更换芯片:STC 12C2052AD更换为STC 12C5608AD


/******************
语言:   汇编
项目:   数码管点闪烁
芯片:   STC 12C5608AD   PDIP-20
日期:   2019.3.4
编写:   ZCT      


P3.5       接数码管COM
P3.4       接数码管COM
P3.3       接数码管COM
P3.2       接数码管COM
P1.0-P1.7  接数码管段位a b c d e f g dp

晶振:12M
   
******************/



         ORG 0000H
         JMP START
         ORG 0030H
START:   MOV SP,#60H
         MOV P1,#0FFH
         CLR P3.5           ;设置LED初始状态
         MOV TMOD,#01H      ;设置定时器/计数器方式
         MOV R0,#10
LOOP:    MOV P1,#07FH
AGAIN:   MOV TH0,#HIGH(65535-50000)      ;设置计数值
         MOV TL0,#LOW(65535-50000)       ;设置计数值
         SETB TR0                      ;启动定时器0
TF0_0:    JBC TF0,TIMEOUT               ;查询定时器是否中断
         JMP TF0_0                      ;连续查询是否中断
TIMEOUT: CLR TR0                       ;关闭定时器         
         DJNZ R0,TF0_0               ;重复10次时间定时         
         CPL P3.5                      ;重复10次后,显示数字加1   
         MOV R0,#10
         JMP LOOP                     ;调至LOOP形成一个新循环
END
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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