您的位置:首页技术文栏毕业课程设计
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

用51单片机做的拉幕式数码显示课程设计

[日期:2008-06-24 ] [来源:net 作者:佚名] [字体: (投递新闻)

1  实验任务 

AT89S51单片机的P0.0/AD0P0.7/AD7端口接数码管的ah端,8位数码管的S1S8通过74LS138译码器的Y0Y7来控制选通每个数码管的位选端。AT89S51单片机的P1.0P1.2控制74LS138ABC端子。在8位数码管上从右向左循环显示“12345678”。能够比较平滑地看到拉幕的效果。

2 电路原理图

 

3 系统板上硬件连线

1       把“单片机系统”区域中的P0.0/AD0P0.7/AD78芯排线连接到“动态数码显示”区域中的ah端口上;

2       把“三八译码模块”区域中的Y0Y78芯排线连接到“动态数码显示”区域中的S1S8端口上;

3       把“单片机系统”区域中的P1.0P1.2端口用3根导线连接到“三八译码模块”区域中的ABC“端口上;

4 程序设计方法

动态数码显示技术:如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms4ms之间,所以为了保证正确显示,我必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器T0来控制,每定时1ms对数码管刷新一次,T0采用方式2。在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。

5 程序框图

 主程序框图

 

中断服务程序

 

6 汇编源程序

DISPBUF         EQU 30H

DISPCNT         EQU 38H

DISPBIT         EQU 39H

T1CNTA          EQU 3AH

T1CNTB          EQU 3BH

CNT             EQU 3CH

 

                ORG 00H

              LJMP START

                ORG 0BH

                LJMP INT_T0

START:          MOV DISPCNT,#8

                MOV A,#10

                MOV R1,#DISPBUF

LP:             MOV @R1,A

                INC R1

                DJNZ DISPCNT,LP

                MOV DISPBIT,#00H

                MOV T1CNTA,#00H

                MOV T1CNTB,#00H

                MOV CNT,#00H

                MOV TMOD,#01H

                MOV TH0,#(65536-1000) / 256

                MOV TL0,#(65536-1000) MOD 256

                SETB TR0

                SETB ET0

                SETB EA

                SJMP $

 

INT_T0:

                MOV TH0,#(65536-1000) / 256

                MOV TL0,#(65536-1000) MOD 256

                MOV A,DISPBIT

                ADD A,#DISPBUF

                MOV R0,A

                MOV A,@R0

                MOV DPTR,#TABLE

                MOVC A,@A+DPTR

                MOV P0,A

                MOV A,P1

                ANL A,#0F8H

                ADD A,DISPBIT

                MOV P1,A                

                INC DISPBIT

                MOV A,DISPBIT

                CJNE A,#08H,NEXT

                MOV DISPBIT,#00H

NEXT:           INC T1CNTA

                MOV A,T1CNTA

                CJNE A,#50,LL1

                MOV T1CNTA,#00H

                INC T1CNTB

                MOV A,T1CNTB

                CJNE A,#8,LL1

                MOV T1CNTB,#00H

                INC CNT

                MOV A,CNT

                CJNE A,#9,LLX

                MOV CNT,#00H

                MOV A,CNT

LLX:            CJNE A,#01H,NEX1

                MOV 30H,#8

LL1:            LJMP DONE

NEX1:           CJNE A,#02H,NEX2

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX2:           CJNE A,#03H,NEX3

                MOV 32H,#8

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX3:           CJNE A,#04H,NEX4

                MOV 33H,#8

                MOV 32H,#8

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX4:           CJNE A,#05H,NEX5

                MOV 34H,#8

                MOV 33H,#8

                MOV 32H,#8

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX5:           CJNE A,#06H,NEX6

                MOV 35H,#8

                MOV 34H,#8

                MOV 33H,#8

                MOV 32H,#8

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX6:           CJNE A,#07H,NEX7

                MOV 36H,#8

                MOV 35H,#8

                MOV 34H,#8

                MOV 33H,#8

                MOV 32H,#8

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX7:           CJNE A,#08H,NEX8

                MOV 37H,#8

                MOV 36H,#8

                MOV 35H,#8

                MOV 34H,#8

                MOV 33H,#8

                MOV 32H,#8

                MOV 31H,#8

                MOV 30H,#8

                LJMP DONE

NEX8:           CJNE A,#00H,DONE

                MOV 37H,#10

                MOV 36H,#10

                MOV 35H,#10

                MOV 34H,#10

                MOV 33H,#10

                MOV 32H,#10

                MOV 31H,#10

                MOV 30H,#10

LL:             LJMP DONE

DONE:           RETI

TABLE:          DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H

                END

7 C语言源程序

#include <AT89X51.H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

                               0x66,0x6d,0x7d,0x07,

                               0x7f,0x6f,0x77,0x7c,

                               0x39,0x5e,0x79,0x71,0x00};

unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,

                             0xfc,0xfd,0xfe,0xff};

unsigned char dispbuf[8]={16,16,16,16,16,16,16,16};

unsigned char dispbitcnt;

unsigned int t02scnt;

unsigned char t5mscnt;

unsigned char u;

unsigned char i;

 

void main(void)

{

  TMOD=0x02;

  TH0=0x06;

  TL0=0x06;

  TR0=1;

  ET0=1;

  EA=1;

  while(1);

}