历史上的今天
今天是:2025年06月07日(星期六)
2020年06月07日 | AT90S8515单片机对LED数码显示管的控制设计
2020-06-07 来源:elecfans
一、电路
附图是AT90S8515控制数码显示的电路略图(图中只画出了与数码管接口的电路,其余接线略)。单片机的PBO~PB7接LED共阴数码管的a~h脚,控制段码;单片机的PDO—PD5分别接六只LED数码管DO~D5的共阴极,控制位码。其中PDO~PD5是通过SL-AVR开发实验器上的LED数码管短路块DLED接至数码管DO—D5的。

二、字符8右循环移位显示程序
在SL-AVR开发实验器LED上实现字符8右循环移位显示的源程序清单如下:


第1行表示程序中包含定义AT90S8515特殊功能寄存器的头文件8515def.inc,指明所用器件为AT90S85150接着定义寄存器r16、r22分别为暂存器temp、scndp。在程序前面用伪指令equ为寄存器赋予能帮助编程者识别数据用途的符号,提高了程序的可读性,便于程序的修改,读者也应养成用这种方法编程的习惯。程序中其他语句的功能见注释。
本程序在SL-AVR开发实验器的随机光盘中的文件名为SLAVR731.ASM。
三、编辑、汇编、串行下载和运行
1.编辑、汇编
运行汇编程序wavr.asm,编辑SIJAVR731.ASM。
执行Assemble命令对SLAVR731.ASM程序进行汇编,生成SLAVR731.EEP、SLAVR731.OBJ、SLAVR731.HEX、SLAVR731.LST文件。
2.串行下载和运行
用串行下载线将SL-AVR的C22与AT3接好,将单片机AT90S8515插入锁紧插座并锁紧。将SL-AVR开发实验器与PC机串口连接好,接上电源,开电源,运行串行一F载程序Avl‘Prog,将SLAVR731.
HEX文件下载到SL-AVR开发实验器中的AT90S8515中。按复位键,程序开始运行,符号8从块接至左侧的发光二.极管,因此,程序运行时锁綮插座左侧对应于PD0一PD5输出状态指示的发光二极管也在同时循环显示。
四、修改显示程序练习
1.修改、显示字符
共阴数码管显示0—F,所对应的段码为3FH、06H、SBH、4FH、66H、6DH7DH、07H、7FH、6FH、77H、7CH、39H、5EH、79H、71H、F3H、76H.如欲点亮小数点;则要将最高位高位写为1.$修改显示字符只需修改源程序中的指令$lclitemp,秽’o如要循环显示字符A,则将“lditemp,7f”改成“lditemp,77”。tSL-AVR开发实验器的随机光盘中的SLAVR731.ASM为只读文件。先将其属性改为“正常”《修改文件属性的操作如下:选中待改文件SLAVR731.ASM,从显示框的左边可见文件属性为“只读”。单击鼠标右键,,弹出选择菜单,点击“属性”弹出属性显示框,取消属性显示选择框中只读栏的黑点,按“确定”键,就将SLAVR731.ASM文件的属性改为“正常”了。此时,从显示框的左边可见文件属J为“正常”)。运行汇编程序wavr.a$ni,打开文件SLAV$731.ASM,将指令“lditemp.7f”改成“ldlitemp.‘77”。按第三条进行汇编,串行“下载,并运行程序,显示的字符就改变了。
2.显示2位字符
置显示初值指令“ldiscndp,Ob11()11111”中的二进制数Ob11011111的低6位对应LED数码管的显示。
状态。其O的个数表示显示字符的个数。因此,最简单的方法是修改Ob11011111来改变同时显示的字符数。如要同时显示2位数,可将Ob11011111改成Ob11001111。但应当注意的是,由于数码管DO~D5的a—h直接接到单片机的PBO—PB7,同时显示的位数多了,会增加口线的负载电流,必须考虑单片机的口线驱动能力,故用此法同时显示的位数不宜多。
采用动态扫描的方式显示两位数若干次后,再向右循环显示下两位数,依此类推,则可根据需要同时显示任意位数的字符。
3.改变字符移动的方向
将指令“ldiscndp,Ob11011111”改为“ldiscndp,Ob11111110”,指令“rors.cndp”改为“r1scndp”,便可以将字符移动的方向改成从右向左。
4.改变字符移动的$速度
将指令“lditemp,40”中的立即数40改大,字右到左循环显示。由于SL-AVR中的PDO~PD5用短路符移动的.速度变慢,反之字符移动的速度变快。
以上为同一字符的移动显示,也可以:过程序进行修改,增加查表程序,实现字符O~F交替循环移动,还可以先将欲显示的字符存到指定的显示缓冲区,用查表的方式取出对应的段码,再进行动态显示。
通过以上实验,读者对AVR单片机的指令系统、AVR汇编软件、AVR串行下载软件,以及SL-AVR开发实验器的硬件环境有了进一步的了解,同时熟悉了利用SL-AVR开发实验器随机光盘中提供的程序进行编程实验的方法。
SL-AVR开发实验器随机光盘中的实验程序很多,读者可以自选程序进行实验,通过此法掌握AVR单片机的设计开发方法。
上一篇:单片机知识讲解:什么是高阻态?
下一篇:如何计算给单片机寄存器赋的值
史海拾趣
|
请问大家一个sdk定制问题 在定制系统时,我选择了开发板给的bsp,编译通过后生成新的sdk时却出现问题。 一般在生成新的sdk时,emulation项中可以设置长、宽的。而我这却是灰色,无法设置。当我编译sdk后安装成功后,在tools-》device emulator ma ...… 查看全部问答> |
|
能不能动态改变已经在初始化时设置了大小的窗体的大小?比如显示视频图像,原来是半屏现在要全屏显示!怎么实现? 能不能动态改变已经在初始化时设置了大小的窗体的大小?比如显示视频图像,原来是半屏现在要全屏显示!怎么实现? 通过重新调用MoveWindow( )函数来重新设置大小吗?… 查看全部问答> |
|
我现在想实现上位机与430单片机串口通信,单片机接受到pc机命令后就执行相应的命令,上位机程序通过vb或者vc实现。那位有相关的程序代码,或者清晰的思路,请多多指教 我是新手,很多问题都不懂,先谢谢各 ...… 查看全部问答> |
|
新手请教LCD1602的光标设置的问题,谢谢了 想实现以下功能:显示四个数值,光标停在第一个数下面闪动,按1号键右移一位,光标在第二位数位置闪,按2号键光标位置数值加1。 定位到第一个数下面并让数字闪动实现了,但是光标移位怎么都 ...… 查看全部问答> |
|
执行下列程序,输出不对,显示乱码!哪位大侠帮忙改正一下我QQ601694858 OK EQU 20H ;抢答开始标志位RING EQU 22H ;响铃标志位 DATA0 EQU 36H ;抢答按键口数据存放地址 ORG 0000HAJMP MAINORG 0003H AJMP INTT0ORG 000BHAJMP T0INTORG 001BHAJMP T ...… 查看全部问答> |




