最新日志

发表于:2007-5-12 23:57:35
标签:8051  

1

13.动态数码显示技术四

13.动态数码显示技术四

——利用中断实现数码管动态显示

1.  实验任务

   数据端与P0口相连(参见原理图),控制端分别与P2.4到P2.7相联接,将需要显示的数字(字母)所对应的8位编码送到P0口,然后通过P2.4到P2.7口开关数码管的控制线,就可以实现对应位的显示.
    本程序实现四位数码管上循环动态扫描显示 0,1,2,3,显示的内容可以通过赋给变量,LED1,LED2,LED3,LED4不同的值来实现,不防试试!

2.  电路原理图

点击看大图

3.    汇编源程序

;=================================================
; 定时中断动态四数码管显示
;=================================================

LED1 EQU 08H
LED2 EQU 09H
LED3 EQU 0AH
LED4 EQU 0BH

LedT0 EQU 0CH

ORG 0000H

LJMP START ;转入主程序


ORG 000BH ;定时器0中断入口

INT_TO:
PUSH ACC
PUSH PSW

CLR TF0 ;清定时0中断标志
MOV TH0,#0F6H ;2MS
MOV TL0,#03DH

MOV A,#11110000B ;关数码管
ORL P2,A

MOV A,LedT0
CJNE A,#0,INT_T0_1
MOV A,LED1
MOVC A,@A+DPTR
MOV P3,A
CLR P2.7
MOV LedT0,#1
LJMP INT_T0_END
INT_T0_1:

MOV A,LedT0
CJNE A,#1,INT_T0_2
MOV A,LED2
MOVC A,@A+DPTR
MOV P3,A
CLR P2.6
MOV LedT0,#2
LJMP INT_T0_END
INT_T0_2:

MOV A,LedT0
CJNE A,#2,INT_T0_3
MOV A,LED3
MOVC A,@A+DPTR
MOV P3,A
CLR P2.5
MOV LedT0,#3
LJMP INT_T0_END
INT_T0_3:

MOV A,LED4
MOVC A,@A+DPTR
MOV P3,A
CLR P2.4
MOV LedT0,#0
LJMP INT_T0_END

INT_T0_END:

POP PSW
POP ACC

RETI

 

START:
MOV SP,#60H


MOV TMOD,#01H ;设定T0为十六位定时模式。
MOV TH0,#0F6H ;2MS
MOV TL0,#03DH
SETB TR0 ;开定时器0
SETB ET0 ;开定时0中断
CLR TF0 ;清定时0中断标志
SETB EA ;开总中断

MOV LedT0,#00H
MOV DPTR,#TABLE

MAIN:

MOV LED1,#0
MOV LED2,#1
MOV LED3,#2
MOV LED4,#3

SCAN:

LJMP SCAN

TABLE:
DB 10111111B ;0
DB 10000110B ;1
DB 11011011B ;2
DB 11001111B ;3
DB 11100110B ;4
DB 11101101B ;5
DB 11111101B ;6
DB 10000111B ;7
DB 11111111B ;8
DB 11101111B ;9
DB 11110111B ;A
DB 11111111B ;b
DB 10111001B ;C
DB 10111111B ;d
DB 11111001B ;E
DB 11110001B ;F
DB 11000000B ;-
DB 10000000B ;
END

4.仿真文件

rar

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(1) | 阅读(1634)
发表于:2007-5-12 23:41:23
标签:无标签

1

13.动态数码显示技术三

13.动态数码显示技术三

——LED数码管动态扫描显示“12345”和“HELLO”字样

1.  实验任务

如图4.13.1所示,P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。

2.  电路原理图

点击看大图

3.  程序设计内容

(1.       动态扫描方法

动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。

(2.       在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。

(3.       对于显示的字形码数据我们采用查表方法来完成。

4.  程序框图

点击看大图

5.  汇编源程序

              ORG 00H

START:        JB P1.7,DIR1

               MOV DPTR,#TABLE1

              SJMP DIR

DIR1:         MOV DPTR,#TABLE2

DIR:     MOV R0,#00H

              MOV R1,#01H

NEXT:         MOV A,R0

               MOVC A,@A+DPTR

              MOV P0,A

               MOV A,R1

              MOV P2,A

              LCALL DAY

               INC R0

              RL A

              MOV R1,A

               CJNE R1,#0DFH,NEXT

              SJMP START

DAY:          MOV R6,#4

D1:           MOV R7,#248

               DJNZ R7,$

              DJNZ R6,D1

              RET

TABLE1:       DB 06H,5BH,4FH,66H,6DH

TABLE2:       DB 78H,79H,38H,38H,3FH

              END

6.  C语言源程序

#include <AT89X51.H>

unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d};

unsigned char code table2[]={0x78,0x79,0x38,0x38,0x3f};

unsigned char i;

unsigned char a,b;

unsigned char temp;

void main(void)

{

  while(1)

    {

      temp=0xfe;

      for(i=0;i<5;i++)

        {

          if(P1_7==1)

            {

              P0=table1[i];

            }

            else

              {

                P0=table2[i];

              }

          P2=temp;

          a=temp<<(i+1);

          b=temp>>(7-i);

          temp=a|b;

     for(a=4;a>0;a--)

          for(b=248;b>0;b--);

        }

    }

}

7. 仿真文件

rar

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(896)
发表于:2007-5-12 23:23:50
标签:8051  

2

13.动态数码显示技术二

13.动态数码显示技术一
——LED数码管动态扫描显示数字1~8

一、电路和效果

点击看大图

二、汇编源程序

LED        EQU   P0
            ORG 00H

START:       MOV DPTR,#TABLE


DIR:          MOV R0,#0

              MOV R1,#01H

NEXT:         MOV A,R0

              MOVC A,@A+DPTR

              MOV LED,A
               
              MOV A,R1

              MOV P2,A

              LCALL DAY

              MOV P2,#00H  ;
            
              INC R0

              RL A

              MOV R1,A
          
             CJNE R0,#8,NEXT           

              SJMP START
;延时15ms

DAY:          MOV R6,#10H

LOOP1:           MOV R7,#38H

LOOP2:         DJNZ R7,LOOP2

              DJNZ R6,LOOP1

              RET

TABLE:       DB 01111001B,00100100B,00110000B,00011001B
                     DB 00010010B,00000010B,01111000B,00000000B


              END

 

三、仿真文件下载
rar

 

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(1093)
发表于:2007-5-9 22:33:01
标签:8051  

0

51单片机使用点滴

来源:电子世界  作者:吴健
点击看大图
  8051单片机是我们最常见的一种单片机,我用8051已经很久了,也教过一段时间的单片机课程,在这里把自己的心得与大家分享一下。

一、硬件部分
  • 一定要记得接晶振和复位电路。很多学生在Proteus上仿真成功后,焊板子的时候总是不记得把晶振和复位电路接上,这样板子是不会工作的。
  • 一般没有特殊要求的话,选用11.0592MHZ的晶振。这样有利于得到没有误差波特率。特别是当与PC机进行通信的话,选用这种晶振比较好。
  • 复位电路的电容可以选择10uF或者22uF。如果是10uF的话,充电电阻R的值要高于4K欧姆,如果你的单片机工作速度很慢,可以选择8.2K欧姆。
  • 每个大规模的数字IC旁边都要放一个0.1uF的电容(一端接电源,一端接地)来去除高频的干扰。
  • 在板子上最好做一个ISP下载座子与单片机相连,这样调试改写程序的时候就不用把单片机拔来拔去的,调试的周期也可以缩短。
  • 目前比较好用的51单片机有ATMEL公司的AT89S系列、SST公司的SST89系列,现在新出现一个公司的好51单片机,价格更便宜,听说性能也不错,就是STC系列单片机

二、软件部分

  • 能用C语言开发就用C语言,这样开发速度比较快,而且代码也比较容易维护。
  • 将你常用的芯片的服务编成函数库,这样就能重复利用了,降低开发的周期。
  • 善于利用KEIL C51的开发环境与PROTEUS仿真环境的联合调试,可以降低开发的成本。
  • 平常多做设计练习,多学多看,尤其要多多地收集别人公开的驱动源程序,这样可以在设计的时候少写很多代码。
  • 设计完成后,要结合电路图和代码写出设计说明书,这样可以很好地保存自己的设计思路,对以后维护设计和移植设计都是很有好处的。
  • 多看看《软件工程》和《数据结构与算法》,提高自己代码的可重用能力。
  • 好的程序员是热爱程序的程序员,把你编写的每个源代码文件都加上自己的名字和版权说明,在能保护自己的知识产权的同时,也是对自己的一种激励。
  • 大一点的设计都要写出数据词典,这样在用变量、写功能的时候就不会晕头转向。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(711)
发表于:2007-5-9 22:29:39
标签:复位电路  

0

什么是复位电路?

  简单地说,单片机的复位就和计算机的重起是一样的概念、任何单片机在工作之前都要有个复位的过程,复位对单片机来说,是程序还没有开始执行,是在做准备工作。一般的复位只需要5ms的时间。
  如何进行复位呢?只要在单片机的RET引脚上加上高电平就可以了.按上面所说时间不少于5ms。为了达到这个要求,需要在外部设计复位电路。
  复位电路的实现可以用很多种方法.但是从功能上一般分为两种:一种是电源源位,即外部的复位电路在系统通上电源之后直接使单片机工作,单片机的起停通过电源控制;另一种方法是在复位电路中设计按键开关.通过按键开关触发复位电平,控制单片机的复位。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(1826)
发表于:2007-5-9 22:27:38
标签:8051  

0

什么是单片机的定时器?

  MCS—51系列的单片机一般有两个内部的16位定时器/计数器.分别称为T0和Tl。这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。
  那么这个定时/计数器是如何产生定时作用的呢?举个例子,如果将时钟定时到1分钟,那么秒针计数到60次后,时钟闹铃就会响。这里有个计数和定时之间的概念转化,时间表示为秒针计数值,即秒针每一次走动的时间正好是ls。
  单片机中的定时器和计数器是复用的,计数器是记录外部脉冲的个数,而定时器则是由单片机提供的一个非常稳定的计数源。定时器是由单片机的晶振经过12分频后获得的一个脉冲源。当单片机的晶振为12MHz时,计数值1代麦的时间就是1us。
  计数器的容星是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。当定时器/计数器计溢出时,就会使得相关的寄存器标志产生变化,单片机将由此I而产生定时中断,在中断服务程序中处理定时到而需要完成的任务。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(3) | 阅读(1348)
发表于:2007-5-7 22:35:54
标签:proteus  

0

13.动态数码显示技术一

13.动态数码显示技术一
——LED数码管的驱动原理与动态扫描显示

一、实验原理

    这里用的共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。原理示意图:


            


        从上图可以看出,要是数码管显示数字,有两个条件:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。这样才能显示的。
       如要显示“0”,则要  a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;这样只要向P0口送出相应的代码即可,编码方法如下表:

dp g f e d c b a 显示的字符 编码
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
1 1 0 0 0 0 0 0 0 C0H
1 1 1 1 0 0 1 1 1 F3H
1 0 1 0 0 1 0 0 2 A4H
1 0 1 1 0 0 0 0 3 B0H
1 0 0 1 1 0 0 1 4 99H
1 0 0 1 0 0 1 0 5 92H
1 0 0 0 0 0 1 0 6 82H
1 1 1 1 1 0 0 0 7 F8H
1 0 0 0 0 0 0 0 8 80H
1 0 0 1 0 0 0 0 9 90H
1 0 0 0 1 0 0 0 A 88H
1 0 0 0 1 1 1 0 F 8EH

        程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符;程序如下:
       LED  EQU  P0
       ORG 0000H
       ajmp start
       org  0030h
start: mov sp,#60h;
       mov LED,#0A4H    ;将数字2的编码送LED口
       SETB P2.0        ;打开第一位数码管的显示电源
       ACALL D1MS       ;调用延时1MS子程序
       CLR P2.0         ;显示1MS后关第一位数码管显示
       MOV LED,#0B0H    ;数字3的编码
       SETB P2.1        ;打开第二位数码管的显示电源
       ACALL D1MS       ;调用延时1MS子程序
       CLR  P2.1        ;显示1MS后关第二位数码管显示
      
       MOV LED,#99H     ;数字4的编码
       SETB P2.2        ;打开第三位数码管的显示电源
       ACALL D1MS       ;调用延时1MS子程序
       CLR P2.2         ;显示1MS后关第三位数码管显示
       MOV LED,#92H     ;数字5的编码
       SETB P2.3        ;打开第四位数码管的显示电源
       ACALL D1MS       ;调用延时1MS子程序
       CLR P2.3         ;显示1MS后关第四位数码管显示
       AJMP start       ;返回从第一位显示循环
     ;1MS延时子程序1MS延时(按12MHZ算)
      
D1MS: MOV R7,#80
      DJNZ R7,$
      RET
   END ;

二、仿真实验电路

 点击看大图  

 

三、仿真文件下载

rar  

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(1263)
发表于:2007-4-21 10:29:25
标签:无标签

1

6.报警产生器

1. 实验任务

P1.0输出1KHz500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。

2. 电路原理图

点击看大图

1

点击看大图
图2

3.程序设计内容

(1.       信号产生的方法

500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次;

 

4. 程序框图

点击看大图

图3

5. 汇编源程序

FLAG                           BIT 00H                                       ;用FLAG代替地址00H

                                      ORG 00H

START:                        JB P1.7,START                         ;P1.7为1时跳转

                                      JNB FLAG,NEXT                     ;FLAG(00H)为0时跳转

                                      MOV R2,#200

DV:                               CPL P1.0                                     ;P1.0取反

                                      LCALL DELY500                       ;跳转到DELY500延时

                                      LCALL DELY500

                                      DJNZ R2,DV                              ;R2减1,不为0时转移到DV

                                      CPL FLAG

NEXT:                         MOV R2,#200

DV1:                   CPL P1.0

                                      LCALL DELY500

                                      DJNZ R2,DV1

                                      CPL FLAG

                                      SJMP START

DELY500:           MOV R7,#250

LOOP:                         NOP                                       ;空操作,占1个机器周期

                                      DJNZ R7,LOOP

                                      RET

                                      END

6. C语言源程序

#include

#include

 

bit flag;

unsigned char count;

 

void dely500(void)

{

  unsigned char i;

  for(i=250;i>0;i--)

    {

      _nop_();

    }

}

 

void main(void)

{

  while(1)

    {

      if(P1_7==0)

        {

          for(count=200;count>0;count--)

            {

              P1_0=~P1_0;

              dely500();

            }

          for(count=200;count>0;count--)

            {

              P1_0=~P1_0;

              dely500();

              dely500();

            }

        }

    }

}

7. 仿真文件

rar

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(0) | 阅读(744)
发表于:2007-4-15 0:58:30
标签:无标签

1

5.广告灯(利用取表方式)

1. 实验任务

利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。

2.电路原理图

 

图1

3. 程序设计内容

在用表格进行程序设计的时候,要用以下的指令来完成

(1).  利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。

(2).  利用MOVC A,@A+DPTR的指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC指到表格内所要取出的数据。

因此,只要把控制码建成一个表,而利用MOVC 工,@A+DPTR做取码的操作,就可方便地处理一些复杂的控制动作,取表过程如下图所示:

3.程序框图

图2

4.汇编源程序

                            ORG 0

START:               MOV DPTR,#TABLE

LOOP:                CLR A

                            MOVC A,@A+DPTR

                &nb