|
实验4:数码管静态扫描
74LS47是一个7段码数码管的驱动芯片, 通过它解码,
可以直接把数字转换为数码管的显示数字, 从而简化了程序,节约了
单片机的IO开销。但是由于目前从节约成本的角度考虑, 此类芯片已较少用,
大部份情况下都是用动态扫描数码管的形式来实现数码管显示。 作为学习而言,
我们还是很有必要了解此类IC的应用。
相关原理:

程序运行照片:

接线方法:
用一条4PIN的排线,把数码管译码部份的JP19接到CPU部份P1口的JP44的P1.0,P1.1,P1.2,P1.3
四个端口。
(即插入P1口的上半部份)
程序流程序图:

汇编语言参考程序:
org 0000h ;开始
ajmp loop
org 0080h ;到0030h处避开00-30之间的敏感地址
LOOP:
MOV P1,#1 ;p1口送数字1
CALL DELAY ;延时
MOV P1,#2 ;p1口送数字2
CALL DELAY ;延时
MOV P1,#3
CALL DELAY
MOV P1,#4
CALL DELAY
JMP LOOP ;重新开始
DELAY: MOV R5,#50 ;延时子程序
D1: MOV R6,#40
D2:MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
c语言参考程序:
#include<reg51.h> //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define DIGI P1 //宏定义,将P1口定义为数码管
void delay() //延迟函数,决定数码管跳变的间隔时间
{
uint ii=50000;
while(ii--);
}
char code SST516[3] _at_ 0x003b;
//仿真器插入代码
main() //主函数
{
uchar ii=0;
while(1)
{
while(ii<10) //数码管显示范围为0-9
{
P1=ii; //将当前值赋给P1,驱动74ls47驱动数码管
ii++; //当前值加1
delay(); //延迟函数
}
ii=0; //若显示数字到10,则当前值变为0
}
} |