找回密码
 立即注册

QQ登录

只需一步,快速开始

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

按键控制数码管显示学号,汇编程序。

[复制链接]
跳转到指定楼层
楼主
ID:254465 发表于 2018-1-3 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
; By Paprika
;                2017.10.31
; 程序内容: 1开机显示四位8确定数码管好坏和程序的正确性
;2 摁第一个键显示班级,第其余三位显示学号的四位 摁动四个数字键依次显示为1503 1504 0130 2###
                CH452_DCLK BIT   P2.5   ;串行数据时钟,上升沿激活  
                CH452_DIN  BIT   P2.6  ;串行数据输出,接CH452的数据输入
                CH452_LOAD BIT   P3.3  ;串行命令加载,上升沿激活
                CH452_DOUT BIT   P2.7   ;接 CH452 的数据输出  
                ORG 0000H
START:        ACALL CH452_INIT;调用初始化程序      
                MOV R5,#00H;R5清零      
                MOV R4,#00H;R清零
ceshi:;检测数码管是否OK显示四位8
            MOV B,#0CH      ;B是高四位     
                MOV A,#0fdH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0dH      ;B是高四位     
                MOV A,#0FDH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0eH      ;B是高四位     
                MOV A,#0FDH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0fH      ;B是高四位     
                MOV A,#0FDH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE  
xianshi:         ACALL jiance ;检测是否有按键按下            
                SJMP xianshi ;显示功能
                SJMP $  
jiance:
                MOV C,CH452_DOUT  ;判断是否有按键按下,位判断      
                JC jiance         ;没有按键按下,继续检测
                ACALL CH452_READ  ;有按键按下,通过452读值   
                MOV R1,A
                C0: CJNE R1,#44H,C1   ;由键码得
                ACALL banji         
                AJMP TES
                C1: CJNE R1,#45H,C2        
                ACALL xuehao1   
                AJMP TES   
                C2: CJNE R1,#46H,C3           
                ACALL xuehao2     
                C3: CJNE R1,#47H,jiance   ;由键码得
                ACALL xuehao3  
                AJMP TES
                TES:            
                RET               
                JC jiance
banji:
                ; 显示班级  具体写入数据为: 段选+数字1503
                MOV B,#0CH      ;B是高四位     
                MOV A,#18H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0dH      ;B是高四位     
                MOV A,#0e9H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0eH      ;B是高四位     
                MOV A,#0bdH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0fH      ;B是高四位     
                MOV A,#0d9H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE  
                RET

xuehao1:
                ; 显示1504 具体写入数据为: 段选+数字
                MOV B,#0CH      ;B是高四位     
                MOV A,#18H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0dH      ;B是高四位     
                MOV A,#0e9H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0eH      ;B是高四位     
                MOV A,#0bdH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0fH      ;B是高四位     
                MOV A,#078H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE  
                RET
xuehao2:
                ; 显示学号0130 具体写入数据为: 段选+数字
                MOV B,#0CH      ;B是高四位     
                MOV A,#0bdH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0dH      ;B是高四位     
                MOV A,#018H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0eH      ;B是高四位     
                MOV A,#0d9H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0fH      ;B是高四位     
                MOV A,#0bdH      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE  
                RET


xuehao3:
                ; 显示2###  具体写入数据为: 段选+数字
                MOV B,#0cH      ;B是高四位     
                MOV A,#0d5H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0dH      ;B是高四位     
                MOV A,#0H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0eH      ;B是高四位     
                MOV A,#0H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#0fH      ;B是高四位     
                MOV A,#0H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE  
                RET
                               
                  
                ;****************************************************************************   CH452初始程序  
CH452_INIT:     ;CH452初始化      
                CLR  CH452_DIN  ;先低后高,输出上升沿通知 CH452 选择 4 线串行接口      
                SETB  CH452_DCLK;置为默认的高电平      
                SETB  CH452_DIN   
                SETB  CH452_LOAD      
                SETB  CH452_DOUT;置为输入                  
                MOV B,#04H      ;B是高四位     
                MOV A,#03H      ;设置为键盘与显示开 ;A 是低八位                                                                                            
                ACALL CH452_WRITE   
                MOV B,#05H           ;设定显示参数
                MOV A,#0AH                ;设置no bcd 扫描极限最高1000B
                ACALL CH452_WRITE      
                RET
                ;****************************************************************************串口通信读出写入程序
CH452_WRITE:                 
                CLR  CH452_LOAD;命令开始        
                MOV   R7,#08H;设置循环次数,将 ACC 中 8 位送出  
CH452_WRITE_8:   
                RRC   A;右移,低位在前,高位在后        
                CLR   CH452_DCLK        
                MOV   CH452_DIN,C;送出一位数据        
                SETB  CH452_DCLK;产生时钟上升沿通知 CH452 输入位数据        
                DJNZ  R7,CH452_WRITE_8;位数据未完继续        
                MOV   A,B        
                MOV   R7,#04H;设置循环次数,将 B 中 高4 位送出   
CH452_WRITE_4:   
                RRC   A;低位在前,高位在后        
                CLR   CH452_DCLK      
                MOV   CH452_DIN,C;送出一位数据      
                SETB  CH452_DCLK;产生时钟上升沿通知 CH452 输入位数据        
                DJNZ  R7,CH452_WRITE_4;位数据未完继续      
                SETB  CH452_LOAD;产生加载上升沿通知 CH452 处理命令数据               
                RET  
                ; 读取数据
CH452_READ:         
                CLR   CH452_LOAD ;命令开始      
                MOV   A,#07H;读取键值命令的高 4 位 0111B        
                MOV   R7,#04H ;忽略 12 位命令的低 8 位   1111 0000        ;改过#040H
CH452_READ_4:  ;读出按键代码命令
                RRC   A   ;低位在前,高位在后        
                CLR   CH452_DCLK      
                MOV   CH452_DIN,C;送出一位数据      
                SETB  CH452_DCLK;产生时钟上升沿锁通知 CH452 输入位数据      
                DJNZ  R7,CH452_READ_4  ;位数据未完继续      
                SETB  CH452_LOAD;产生加载上升沿通知 CH452处理命令数据        
                CLR   A;先清除键值单元以便移位        
                MOV   R7,#07H;读入 7 位键值   
CH452_READ_7:  ;读入按键代码      
                MOV   C,CH452_DOUT;读入一位数据      
                CLR   CH452_DCLK;产生时钟下升沿通知 CH452输出下一位        
                RLC   A;数据移入 ACC,高位在前,低位在后        
                SETB  CH452_DCLK      
                DJNZ  R7,CH452_READ_7  ;位数据未完继续      
                RET


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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