注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! 打开购物车 查看留言付款方式联系我们
初中电子 单片机教材一 单片机教材二
搜索上次看见的商品或文章:
商品名、介绍 文章名、内容
首页 电子入门 学单片机 免费资源 下载中心 商品列表 象棋在线 在线绘图 加盟五一 加入收藏 设为首页
本站推荐:
21. 拉幕式数码显示技术
文章长度[] 加入时间[2008/5/30] 更新时间[2024/12/26 8:20:34] 级别[0] [评论] [收藏]
 
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. 电路原理图
图4.21.1
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;
        }
    }
}
1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。
2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! 以上可能是本站收集或者转载的文章,本站可能没有文章中的元件或产品,如果您需要类似的商品请 点这里查看商品列表!
本站协议 | 版权信息 |  关于我们 |  本站地图 |  营业执照 |  发票说明 |  付款方式 |  联系方式
深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102
E-mail:51dz$163.com($改为@);Tel:(0755)27947428
工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389