51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > C51教程 > 详细内容
【吉林科技大学】第三章:89S51实践课题--拉幕式数码显示技术
发布时间:2009/6/16  阅读次数:747  字体大小: 【】 【】【

Lesson 22


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

开 始
显示缓冲区初始化
必要参数初始化
T0初始化,TH0,TL0装入初值
T0工作并开中断
等待中断

中断服务程序

T0中断入口
通过查表方式,获得显示代码送入P0
位选数据送P1
位选数据=8吗?
位选数据加1
位选数据=0
CNT加1
0.4秒定时到了吗?
CNT=9吗?
CNT=0
根据CNT来决定显示几位数据
中断返回

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);
}
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[i]=16;
               }
           for(i=0;i<u;i++)
               {
                   dispbuf[i]=8;
               }
       }
}
  
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号