
A25基于51单片机汇编语言独立按键8X8点阵显示字符Proteus设计
A24是点阵自动轮播数字,A25换成手动:独立按键按一次换一幅图,三幅自定义字符循环切换。扫描部分和A24同源(定时器4毫秒中断、列码+字模二维查表),区别在于显示内容由按键次数决定,按键处理里加了消抖和等抬起。资料包含Proteus仿真文件和完整汇编源码。
一、设计实现功能
本设计功能简介:使用51单片机和汇编语言设计一个独立按键控制8X8点阵显示字符的proteus仿真,要求以下功能:
1、使用汇编语言编写程序。
2、8×8 LED点阵行线接P0、列线接P3,动态扫描显示。
3、独立按键接P1.7,每按一次切换一幅字符图形,按三次回到第一幅。
二、资源汇总
1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。
2、程序文件:main.asm汇编源码,以及编译好的cx.hex。
3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。
三、设计介绍
拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。
硬件和A24一样:点阵行线P0、列线P3,多了个按键接P1.7(低电平有效)。字模表GRAPH里放了三组数据,每组8个字节,一组就是一幅图。
图1 Proteus仿真总览

扫描中断和A24是同一套骨架,只是字模表换成GRAPH,偏移量用按键次数NUMB:
`asm
INT_T0: MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256
MOV DPTR,#TABLE ;列码表
MOV A,R_CNT
MOVC A,@A+DPTR
MOV P3,A
MOV DPTR,#GRAPH ;字符字模表
MOV A,NUMB ;NUMB=第几次按键
MOV B,#8
MUL AB ;按键次数×8
ADD A,R_CNT ;+当前列号
MOVC A,@A+DPTR
CPL A ;行码取反
MOV P0,A
INC R_CNT
MOV A,R_CNT
CJNE A,#8,RETUNE
MOV R_CNT,#00H
RETUNE: RETI`
按键处理这一段值得逐行看,它把"消抖—启动—等抬起—计数"四步写全了:
`asm
WAIT: JB KEY,$ ;1. 等按键按下
CALL DELAY ;2. 延时消抖(20×250次空循环)
JB KEY,$ ;3. 再确认一次,还是低才算真按下
SETB TR0 ;4. 启动扫描
MOV IE,#82H
JNB KEY,$ ;5. 等按键抬起,防止一次按压换好几幅
MOV R_CNT,#00H ;6. 复位列号,新图从第0列开始扫
CLR TR0 ;7. 停扫描
INC NUMB ;8. 按键次数+1
MOV A,NUMB
CJNE A,#3,WAIT ;9. 不到3次继续等
LJMP START ;10. 满3次回到第一幅`
| 步骤 | 作用 | 少了会怎样 |
| 延时+二次判断 | 滤掉机械抖动 | 按一下跳两三幅图 |
| 等抬起 | 一次按压只算一次 | 按住不放会连续切换 |
| R_CNT清零 | 新图从第一列开始扫 | 新图从中间开始,出现错位 |
| NUMB对3取模 | 三幅图循环 | 按到第4次跑飞或显示乱码 |
关于第7步的CLR TR0:这是源码的原始写法,扫描只在按键按下期间进行,松手后画面停在最后一次刷新的那一列。想改成松手后保持整幅显示,把这行CLR TR0删掉(或改成注释),定时器会一直扫描,显示就不会停——这是改动成本最低、效果最明显的一处优化,建议你先按原版跑通,再动手改成常显示。
字模换算方法和A24完全一致,想换图只需要替换GRAPH里的数据:每幅图8个字节,每个字节的8个bit对应8列,1表示点亮(代码里CPL A后变低电平)。用取模软件生成时选"阴码、逐列式、逆向",和这份表就对得上。
特别注意: 按一次换好几幅,是消抖延时太短,把DELAY里R6的值从20加大到40;按键完全没反应,先确认接的是P1.7而不是P1.0~P1.6(代码里KEY定义成P1.7);画面只亮一列或者松手就黑,就是上面说的TR0被关掉,删掉CLR TR0即可;图形上下颠倒或左右镜像,把字模的取模方向换一下重新生成;按到第三次以后画面错乱,检查CJNE A,#3,WAIT这句,NUMB满3必须跳回START清零。
四、日期修改
资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。
五、资料下载
付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。
/

