【51单片机Keil+Proteus8.9】AT89C51+7段数码管两位计数器

  两位计数器显示

  • 设计思路

电路设计

  1. 使用AT89C51单片机,外部引出两个管脚P3^3和P3^4当作按钮分别作为start和stop,对计时状态进行控制,由于是两位计数器,引出两个管脚P3^0和P3^1作为两个数码管的片选信号,工作时快速交替利用人眼视觉暂留效应实现不间断显示。
  2. 显示屏选用共阳极7段两位数码管7seg-mpx2-ca-blue,将其A至G引脚接至单片机AT89C51单片机的P2组引脚,工作时单片机向显示屏发出数据,进行计数值的显示。

代码设计

  1. 根据共阳极数码管特性,提前在函数内部定义一个arr[10]数组,以16进制形式包含了0-9数值的数据,使用时直接调用数组中的一个就可以。
  2. 定义了一个时间延时函数delay(int d),用于作为计数器两位数值高位和低位的交替时间。
  3. 利用整型变量i从0-99自增作为时间,将i/10就可以得到高位的值,i%10就得到低位的值,从而完成计数。
  • 原理图
  • 测试过程及结果说明
  • 1.在keil端进行代码编写,将实验代码进行编译,结果正确无任何错误。

  • 2.打开Proteus软件,绘制原理图,放置元件,双击AT89C51单片机芯片,将keil端编译之后生成的HEX文件加载到芯片内。

  • 启动仿真

    按下第一个按钮,即P3^3对应的start按钮,电路开始计数,显示屏开始显示数字并自增,如下图

  • 然后按下第二个按钮,即P3^4对应的stop按钮,电路暂停计数,显示屏数字保持不变,如下图

  • 最后按下第一个按钮start,电路从0开始计数

  • #include<reg51.h>

    sbit S1 = P3^0; // Select line 1 for Display 1

    sbit S2 = P3^1; // Select Line 2 for Display 2

    sbit START = P3^3; //START

    sbit STOP  = P3^4; //STOP

    void delay(int d)

    {

    int i,j;

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

    for(j=0;j<255;j++);

    }

    void main()

    {

    //DPδÁ¬½Ó£¬×î¸ßλÈÎÒâ

    int arr[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90}; // ******Your codes is required here!!!

    int i,on,off;

    static int num1,num2,temp1,temp2;

    while(1){

    if ((START==0)&&(STOP==1))

    {

     on = 1;

    off = 0;

    }

    else

    {

     on = 0;

    off = 1;

    }

    while(on && !off)

    {

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

    {

    num1 = i/10;    //First Digit Separated

    temp1 = num1;

    S1 = 1; //Select Line 1

    S2 = 0;

    P2 = arr[num1];  //Display 1 will indicate number

    delay(45);

    num2 = i%10;    //Second Digit Separated

                    // *****Your codes is required here!!!

    temp2 = num2;

    S1 = 0;

    S2 = 1;

    P2 = arr[num2];

    delay(45);

    if(STOP==0)

    {

    off = 1;

     on = 0;

    break;

    }

    }

    while(off && !on)

    {

    S1=1;

    S2=0;

    P2 = arr[temp1];

    delay(10);

    S1=0;

    S2=1;

    P2 = arr[temp2];

    delay(30);

    if (START==0)

    {

    off = 0;

     on = 1;

    break;

    }

    }

    }

    }

    }

    #include<reg51.h>
    sbit S1 = P3^0; // Select line 1 for Display 1
    sbit S2 = P3^1; // Select Line 2 for Display 2
    sbit START = P3^3; //START 
    sbit STOP  = P3^4; //STOP
    void delay(int d)
    {int i,j;for(i=0;i<d;i++)for(j=0;j<255;j++);
    }
    void main()
    {//DPδÁ¬½Ó£¬×î¸ßλÈÎÒâint arr[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90}; // ******Your codes is required here!!!int i,on,off;static int num1,num2,temp1,temp2;while(1){if ((START==0)&&(STOP==1)){on = 1;off = 0;}else{on = 0;off = 1;}while(on && !off){for(i=0;i<100;i++){num1 = i/10;    //First Digit Separatedtemp1 = num1;S1 = 1;					//Select Line 1S2 = 0;P2 = arr[num1];  //Display 1 will indicate numberdelay(45);num2 = i%10;    //Second Digit Separated// *****Your codes is required here!!!temp2 = num2;S1 = 0;S2 = 1;P2 = arr[num2];delay(45);if(STOP==0){off = 1;on = 0;break;}}while(off && !on){S1=1;S2=0;P2 = arr[temp1];delay(10);S1=0;S2=1;P2 = arr[temp2];delay(30);if (START==0){off = 0;on = 1;break;}}}}
    }

    可私信获取项目文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415763.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日温度00

题目链接 每日温度 题目描述 注意点 列表对应位置的输出为&#xff1a;要想观测到更高的气温如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替 解答思路 利用栈先进后出的特点将低温度的下标存储到栈中&#xff0c;如果当前温度比栈顶下标对应温度更高&#…

2024--Django平台开发-订单项目管理用户认证+动态菜单+权限控制(十三)

day13 订单管理项目开发 1.表结构设计 1.1 abstract类 from django.db import modelsclass ActiveBaseModel(models.Model):active models.SmallIntegerField(verbose_name"状态", default1, choices((1, "激活"), (0, "删除"),))class Meta:…

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中&#xff0c;前端通过以下三种方式来与后端进行交互&#x1f31f; ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对&#xff0c;一般用doGet方法进行交互 代码如下 …

『MySQL快速上手』-⑩-索引特性

文章目录 1.索引的作用2.索引的理解建立测试表插入多条记录查看结果 2.1 MySQL与磁盘交互的基本单位2.1 为何IO交互要是 Page2.3 理解单个Page2.4 理解多个Page2.5 页目录2.6 单页情况2.7 多页情况2.8 B vs B2.9 聚簇索引 vs 非聚簇索引非聚簇索引聚簇索引 3.索引操作3.1 创建主…

Redis实战之-分布式锁

一、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xff0c;让程序串行…

『Open3D』1.10 Tensor数据处理

open3d中实现了自身的数据类型,用于open3d中内部算法的数值计算,但基础使用上与numpy类似。 目录 1、tensor创建 2、tensor数据属性 3、 Tensor数据在CPU与GPU上的转换

51单片机中断系统编程

一.外部中断 1.编程思想 中断准备&#xff1a;中断初始化函数打开中断开关 &#xff0c;选择中断传输方式中断处理&#xff1a;为了便于观察&#xff0c;让我们知道单片机进入中断处理函数&#xff0c;在这里我们选择打开流水灯电路搭建&#xff1a;由于P3^3引脚不便直接接地…

用LED数码显示器循环显示数字0~9

#include<reg51.h> // 包含51单片机寄存器定义的头文件 /************************************************** 函数功能&#xff1a;延时函数&#xff0c;延时一段时间 ***************************************************/ void delay(void) { unsigned …

C语言总结十二:文件操作详细总结

在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同的硬件设备也都被看成一个文件。对这些文件的操作&#xff0c;等同于对磁盘上普通文件的操作。我们不去探讨硬件设备是如何被映射成文件的&#xff0c;把任意 I/O 设备&#xff0c;转换成…

Doris配置外表以及多个Hive外表的配置

1.场景分析 以Clickhouse、Doris、Starrocks等为代表的mpp分析数据库正在快速的兴起&#xff0c;以其高效查询、跨库整合能力收到广大技术人员的喜爱。本文主要浅显介绍下作者在使用Doris时&#xff0c;通过建立catlog进行跨库查询。 废话不多少&#xff0c;直接上代码 2.相关…

使用Python+pygame实现贪吃蛇小游戏

使用Pythonpygame贪吃蛇小游戏 使用第三方库pygame&#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 给出两种实现。 第一种 运行效果如下&#xff1a; 游戏源码如下&#xff1a; import pygame import sy…

HCIA-HarmonyOS设备开发认证-序

序 最近涉及到HarmonyOS鸿蒙系统设备开发&#xff0c;在网络上已经有很多相关资料&#xff0c;视频教程&#xff0c;我也移植了公司的一个stm32G474板卡&#xff0c;运行LiteOS-m L0系统。 一面看资料一面移植&#xff0c;遇到不少坑&#xff0c;当看到运行的LOGO时&#xff0…