00-99计数器

1. 实验任务

利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0P2.7接一个共阴数码管,作为0099计数的个位数显示,用单片机的P0.0P0.7接一个共阴数码管,作为0099计数的十位数显示;硬件电路图如图19所示。

2. 电路原理图

4.10.1

3. 系统板上硬件连线

(1.       把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P0.0/AD0对应着aP0.1/AD1对应着b……P0.7/AD7对应着h

(2.       把“单片机系统”区域中的P2.0/A8P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的ah端口上;

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

4. 程序设计内容

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

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

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

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

5. 程序框图

 

 

 

 

 

 

 

 

 

4.10.2

6. 汇编源程序

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);

            }

        }

    }

}
单片机课程设计 题 目 00~99计数器设计 1 课程设计的目的 (1) 利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。 (2) 综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备 设计单片机应用系统的能力。 (3) 通过本次课程设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复 习和掌握,对单片机实际的应用作进一步的了解。 (4) 通过本次试验,增强自己的动手能力。认识单片机在日常生活中的应用的广泛性,实用 性。 明确学习目的,端正学习态度,提高对课程设计重要性的认识,以积极认真的态度参加 课程设计工作,按要求完成规定的设计任务。 2 设计思路 本实验利用单片机的定时器/计数器定时和计数的原理,通过采用仿真软件来模拟实 现。模拟利用AT89C2052单片机、LED数码管以及各种控制器件来控制表的计数以及计数 的开启/暂停/继续与复位等。利用单片机AT89S51单片机来制作一个手动计数器,在AT8 9S51单片机的P1.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0- P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0- P0.7接一个共阴数码管,作为00-99计数的十位数显示。 3 设计过程 3.1 方案论证 3.1.1 用单片机技术来实现多功能定时计数器的控制 多功能定时计数器控制系统的原理。它主要由单片机、发光二极管、晶振和双位数码 管等部分组成。 1、总体描述 (1)单片机采用STC89C52型。 (2)数据显示电路:七段四位共阴极数码管,P1口控制八位段码,P3.4到P3.7控制 四位码。 (3)数据输入电路:四个按键完成输入,一号键控制个位加1,可以实现从1加到9; 二号键控制十位加一;三号键控制百位加一;四号键控制千位加一。 (4)功能指示电路:上电指示发光二极管,P26口控制蜂鸣器报警功能。 2、总体设计设计总体框架图如图3-1所示: 图3-1总体框架图 3.1.2 最小控制系统的设计 STC89C52单片机最小系统包括晶体振荡电路、复位开关和电源部分。图3- 2为STC89C52单片机的最小系统: 图3-2单片机最小控制系统 复位口为P3.0口,当RST引脚有一个高电平并维持两个机器周期,则 CPU就可以响应并将系统复位。需要200欧,1000欧电阻各一个,22微法电容一个,按键 一个。时钟电路需要在XTAL1,2,两个端口跨接石英晶体及两个电容,电容一般取30pF 左右。 3.2 电路的设计 3.2.1 指示电路 图3-3蜂鸣器电路 3.2.2 数码管显示电路 图3-4数码管电路 我的数码管为共阴极,八段选端接P1口,四个位选端接P3口,如上图所示。 3.2.3键盘输入 图3-4 键盘输入 上图为3*3矩阵键盘扫描电路的接法,三行分别相连接P2.5,P2.4,P2.3口,三列分 别相连接P2.2,P2.1,P2.0口。先给所有行线一个低电平,然后将线口的电平状态读入 单片机,如果有按键按下,总有一根线电平被拉至低电平,从而使输入不全为1. 判断键盘中哪一个键被按下是通过将行线逐行配置低电平后,检查列输入状态实现的。 方法是:依次进给低电平,然后检查所有列状态,称行扫描。如果全为1,则所按下的键 不在此行,如果不全为1,则所按下的键必在此行,而且是在与零电平线相交的交点上的 那个键。 3.2.4复位电路 图3-5 复位电路 3.2.5 总原理图 3-6电路图设计 编程: #include <reg52.h> Unsignecharcode LEDcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Count; sbit SP1=P1^7; void delay10ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--); } void main (void) {Count=0; P0=LEDcode[Count/10]; P2=LEDcode[Count%10]; while(1) {if(SP1==0) {delay10ms(); if(SP1==0) {Count++; if(Count==100) { Count=0;} P0=LEDcode[Count/10]; P2=LEDcode[Count%10]; while(SP1==0); do {delay10ms();} while(SP1==0); } } } } 4 系统调试与结果 系统通电后,进入计数设置功能,等待信号的数据输入,当完
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值