单片机实验之 数码管跑马显示
2012-09-24 14:44阅读:
实验一 数码管跑马显示
一、实验目的
1、 熟悉51单片机并行口的输入方式,输出方式的编程;
2、 熟悉共阴极LED的工作特性及控制方法;
3、 学习在系统烧写单片机程序(在系统编程ISP)的方法。
二、实验电路和程序
1、 实验电路
一个数码管由8个发光二极管组成,由于是共阴极,所以低电平选通。如图4-1所示,SN74ALS245A接成直通方式通过P0口驱动数码管。由74LS138对P1口译码控制SN74ALS245A驱动6个数码管的位选,剩余两路,一路接到发光二极管,另一路控制蜂鸣器。由程序进行选通控制。
2、 程序
(1)
汇编程序:
通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管继续闪亮。通过复位按键进行复位。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#00H
MOV P1,A
MOV R0,#00H
LS:
MOV A,R0
MOV DPTR,#TAB0
MOVC A,@A+DPTR
MOV P1,A
;数码管位选跑马
MOV A,R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P0,A
;数码管数字显示
INC R0
ACALL DELAY
MOV P1,#0E0H
ACALL DELAY
SJMP LS
DELAY:
MOV R5,#08H
;延时
DELAY1:
MOV R6,#0FAH
DELAY2:
MOV R7,#0FAH
DJNZ
R7,$
DJNZ
R6,DELAY2
DJNZ
R5,DELAY1
RET
TAB0:
DB
00H,20H,40H,60H,80H,0A0H,00H,20H,40H,60H
DB
80H,0A0H,00H,20H,40H,60H,80H,0A0H,00H,20H
TAB1:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,
7FH,6FH
DB
0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END
(2)
C语言程序:
通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管长亮。通过复位按键进行复位。
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uint
a[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uint
b[20]={0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20,0x40,0x60,
0x80,0xa0,0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20};
void delay(uint count)
{
uint i;
while(count--!=0)
{
for(i=0;i<72;i++);
}
}
main()
{
uint j;
for(j=0;j<20;j++)
{
P0=a[j];
P1=b[j];
delay(1000);
P1=0xe0;
delay(1000);
}
P1=0xe0;
}
(3)
自编程序:
编程并烧写程序,6个数码管依次显示6,5,2,3,0.,9;然后,6个数码管同时点亮,显示65230.9。再编一个小程序,在五个数码管上显示“HELLO”。
三、编写程序并在实验板上执行通过
1、 数码管跑马显示0~9,0.~9.,测试数码管性能;
2、
数码管依次显示6,5,2,3,0.,9,由于数码管位选决定每次只有一个数码管点亮,所以利用视觉误差使6个数码管同时点亮,显示65230.9;
3、 自编数码管段代码,用数码管显示英文“HELLO”;
4、 复位按键复位,重复执行。