位置:51电子网 » 技术资料 » 单 片 机

用AT89S51单片机来制作的手动计数器

发布时间:2008/8/14 0:00:00 访问次数:1010

  1. 实验任务

  利用at89s51单片机来制作一个手动计数器,在at89s51单片机的p3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的p2.0-p2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的p0.0-p0.7接一个共阴数码管,作为00-99计数的十位数显示。

  2。系统板上硬件连线

  1.把“单片机系统”区域中的p0.0/ad0-p0.7/ad7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:p0.0/ad0对应着a,p0.1/ad1对应着b,……,p0.7/ad7对应着h。

  2.把“单片机系统”区域中的p2.0/a8-p2.7/a15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;

  3.把“单片机系统”区域中的p3.7/rd端口用导线连接到“独立式键盘”区域中的sp1端口上;

  4. 程序设计内容

  1.单片机对按键的识别的过程处理

  2.单片机对正确识别的按键进行计数,计数满时,又从零开始计数;

  3.单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。如何拆开十位和个位我们可以把所计得的数值对10求余,即可个位数字,对10整除,即可得到十位数字了。

  4.通过查表方式,分别显示出个位和十位数字。

  5. 汇编源程序


  count equ 30h


  sp1 bit p3.7


  org 0


  start: mov count,#00h


  next: mov a,count


  mov b,#10


  div ab


  mov dptr,#table


  movc a,@a+dptr


  mov p0,a


  mov a,b


  movc a,@a+dptr


  mov p2,a


  wt: jnb sp1,wt


  wait: jb sp1,wait


  lcall dely10ms


  jb sp1,wait


  inc count


  mov a,count


  cjne a,#100,next


  ljmp start


  dely10ms: mov r6,#20


  d1: mov r7,#248


  djnz r7,$


  djnz r6,d1


  ret


  table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh


  end


  7. c语言源程序


  #include <at89x51.h>


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


  0x6d,0x7d,0x07,0x7f,0x6f};


  unsigned char count;

  void delay10ms(void)


  {


  unsigned char i,j;


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


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


  }

  void main(void)

  {

  count=0;

  p0=table[count/10];


  p2=table[count%10];


  while(1)


  {


  if(p3_7==0)


  {


  delay10ms();


  if(p3_7==0)


  {


  count++;


  if(count==100)


  {


  count=0;


  }


  p0=table[count/10];


  p2=table[count%10];


  while(p3_7==0);


  }


  }


  }


  }



  1. 实验任务

  利用at89s51单片机来制作一个手动计数器,在at89s51单片机的p3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的p2.0-p2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的p0.0-p0.7接一个共阴数码管,作为00-99计数的十位数显示。

  2。系统板上硬件连线

  1.把“单片机系统”区域中的p0.0/ad0-p0.7/ad7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:p0.0/ad0对应着a,p0.1/ad1对应着b,……,p0.7/ad7对应着h。

  2.把“单片机系统”区域中的p2.0/a8-p2.7/a15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;

  3.把“单片机系统”区域中的p3.7/rd端口用导线连接到“独立式键盘”区域中的sp1端口上;

  4. 程序设计内容

  1.单片机对按键的识别的过程处理

  2.单片机对正确识别的按键进行计数,计数满时,又从零开始计数;

  3.单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。如何拆开十位和个位我们可以把所计得的数值对10求余,即可个位数字,对10整除,即可得到十位数字了。

  4.通过查表方式,分别显示出个位和十位数字。

  5. 汇编源程序


  count equ 30h


  sp1 bit p3.7


  org 0


  start: mov count,#00h


  next: mov a,count


  mov b,#10


  div ab


  mov dptr,#table


  movc a,@a+dptr


  mov p0,a


  mov a,b


  movc a,@a+dptr


  mov p2,a


  wt: jnb sp1,wt


  wait: jb sp1,wait


  lcall dely10ms


  jb sp1,wait


  inc count


  mov a,count


  cjne a,#100,next


  ljmp start


  dely10ms: mov r6,#20


  d1: mov r7,#248


  djnz r7,$


  djnz r6,d1


  ret


  table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh


  end


  7. c语言源程序


  #include <at89x51.h>


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


  0x6d,0x7d,0x07,0x7f,0x6f};


  unsigned char count;

  void delay10ms(void)


  {


  unsigned char i,j;


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


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


  }

  void main(void)

  {

  count=0;

  p0=table[count/10];


  p2=table[count%10];


  while(1)


  {


  if(p3_7==0)


  {


  delay10ms();


  if(p3_7==0)


  {


  count++;


  if(count==100)


  {


  count=0;


  }


  p0=table[count/10];


  p2=table[count%10];


  while(p3_7==0);


  }


  }


  }


  }



相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

硬盘式MP3播放器终级改
    一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式