DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 354|回复: 1
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:50:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

  
         
   
1.  实验任务  

用AT89S51单片机的P0.0/AD0-P0.7/AD7端口接数码管的a-h端,8位数码管的S1-S8通过74LS138译码器的Y0-Y7来控制选通每个数码管的位选端。AT89S51单片机的P1.0-P1.2控制74LS138的A,B,C端子。在8位数码管上从右向左循环显示“12345678”。能够比较平滑地看到拉幕的效果。

2. 电路原理图






3. 系统板上硬件连线

(1.       把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;

(2.       把“三八译码模块”区域中的Y0-Y7用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;

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

4. 程序设计方法

动态数码显示技术:如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms到4ms之间,所以为了保证正确显示,我必须每隔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  
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);
}
  
void t0(void) interrupt 1 using 0
{
  t5mscnt++;
  if(t5mscnt==4)
    {
      t5mscnt=0;
      P0=dispcode[dispbuf[dispbitcnt]];
      P1=dispbitcode[dispbitcnt];
      dispbitcnt++;
      if(dispbitcnt==8)
        {
          dispbitcnt=0;
        }
    }
  t02scnt++;
  if(t02scnt==1600)
    {
      t02scnt=0;
      u++;
      if(u==9)
        {
          u=0;
        }
      for(i=0;i<8;i++)
        {
          dispbuf=16;
        }
      for(i=0;i<u;i++)
        {
          dispbuf=8;
        }
    }
}
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 分享分享 支持支持 反对反对
沙发
发表于 2012-5-4 10:56:20 | 只看该作者
好!学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-25 14:35 , 耗时 0.111617 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表