加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

单片机实验之 数码管跑马显示

(2012-09-24 14:44:12)
标签:

单片机实验

数码管

显示

             实验一   数码管跑马显示

一、实验目的

1、 熟悉51单片机并行口的输入方式,输出方式的编程;

2、 熟悉共阴极LED的工作特性及控制方法;

3、 学习在系统烧写单片机程序(在系统编程ISP)的方法。

二、实验电路和程序

1、 实验电路

一个数码管由8个发光二极管组成,由于是共阴极,所以低电平选通。如图4-1所示,SN74ALS245A接成直通方式通过P0口驱动数码管。由74LS138对P1口译码控制SN74ALS245A驱动6个数码管的位选,剩余两路,一路接到发光二极管,另一路控制蜂鸣器。由程序进行选通控制。

2、 程序

(1)    汇编程序:

通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管继续闪亮。通过复位按键进行复位。

 

http://s9/middle/7cedfd30xca6cef1329e8&690数码管跑马显示" TITLE="单片机实验之 数码管跑马显示" />

图4-1  实验电路图

 

图表 1

 

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、 复位按键复位,重复执行。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有