4位共阴极数码管秒表设计仿真与程序

发布者:数据小巨人最新更新时间:2019-12-05 来源: 51hei关键字:4位  共阴极数码管  秒表设计 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

#include "reg51.h"

#include "intrins.h"


#define GPIO_DIG   P2                           //数据端


#define uchar unsigned char                   //重命名关键字

#define uint unsigned int                   //重命名关键字


sbit K1=P3^0;                //开始

sbit K2=P3^1;                //暂停

sbit K3=P3^2;                //复位


sbit L1=P1^4;                //数码管1位选

sbit L2=P1^5;                //数码管2位选

sbit L3=P1^6;                //数码管3位选

sbit L4=P1^7;                //数码管4位选


sbit beep=P1^0;


unsigned char code DIG_CODE[10] = {

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

//0、1、2、3、4、5、6、7、8、9的显示码

unsigned char code DIG_CODE2[10] = {

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,

0xff,0xef};

//0、1、2、3、4、5、6、7、8、9带小数点的显示码

unsigned char DisplayData[4];

//用来存放要显示的8位数的值


uchar i,m;           //定义变量

uchar min=0;

long int k=0;

uint Second_Counts;                   //定义变量


void DigDisplay()                   //数码管显示子函数

{

        unsigned int j;                   //定义变量


        L1=0;                          //位选

        L2=1;

        L3=1;

        L4=1;

        GPIO_DIG = DisplayData[0];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;               


        L1=1;

        L2=0;                          //位选

        L3=1;

        L4=1;

        GPIO_DIG = DisplayData[1];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;      


        L1=1;

        L2=1;

        L3=0;                           //位选

        L4=1;

        GPIO_DIG = DisplayData[2];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;      


        L1=1;

        L2=1;

        L3=1;

        L4=0;                           //位选

        GPIO_DIG = DisplayData[3];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;      

        

}


void main()

{

//        Second_Counts=570;

//        min=9;

        GPIO_DIG = 0x00;                 //初始化数据口

    

        TMOD=0x01;                                //定时器0方式1

        TH0=(65536-50000)/256;                //定时器0:50ms

        TL0=(65536-50000)%256;

        TH1=(65536-2000)/256;                

        TL1=(65536-2000)%256;

        EA=1;   

//        ET1=1;

//        TR1=1;         

    while (1)

    {

                if(K1==0)

                {

                        ET0=1;

                        TR0=1;                //开启定时器

                }

                if(K2==0)

                {

                        ET0=0;

                        TR0=0;                //关闭定时器

                }

                if(K3==0)                                                 //复位按键按下时

                {

                        ET0=0;

                        TR0=0;                //关闭定时器

                        DisplayData[0] = DIG_CODE2[0];          //清零显示

                        DisplayData[1] = DIG_CODE[0];          //清零显示

                        DisplayData[2] = DIG_CODE2[0];          //清零显示

                        DisplayData[3] = DIG_CODE[0];          //清零显示

                        i=0;                                                          //清零计数

                        Second_Counts=0;                                  //清零秒

                }


                if((Second_Counts>0)&&(m==0))

                {

                        ET1=1;

                        TR1=1;   

                }


                if((min==9)&&(Second_Counts==599))

                {

                        ET0=0;

                        TR0=0;                //关闭定时器

                        ET1=1;

                        TR1=1; 

                }


                DigDisplay();                 //执行数码管显示函数

    }

}



//T0中断函数

void DSY_Refresh() interrupt 1

{

        TH0=(65536-50000)/256;                //恢复定时器0初值

        TL0=(65536-50000)%256;

[1] [2]
关键字:4位  共阴极数码管  秒表设计 引用地址:4位共阴极数码管秒表设计仿真与程序

上一篇:基于NRF24L01的DS18B20温度无线传输单片机源码
下一篇:单片机四层电梯控制系统设计最终版(含仿真+报告+程序源码)

推荐阅读最新更新时间:2024-11-12 06:44

644G芯片出状况 联发科传遇小乱流
市场传出,联发科即将量产的64位元4G低阶芯片「MT6732」(指芯片代号)搭配的电源管理芯片出状况,因此改以旧款应急,联发科也因此为客户端吸收新增成本,恐冲击联发科毛利率。 联发科昨(1)日表示,没听说「MT6732」周边搭配的电源管理芯片有任何问题,产品将于第4季如期出货。 联发科进军4G市场,上半年以双芯片抢市,但整体成本偏高,加上市场进入64位元时代,因此下半年改推64位元4G芯片「MT6732」、「MT6752」及「MT6795」,分别锁定低、中、高阶机款。 联发科原本规划,低阶的「MT6732」和中阶的「MT6752」,将于9月小量生产,10月正式量产。 近期市场传出,联发科「MT6732」
[网络通信]
英飞凌32微控制器AURIX™ TC4x丨英飞凌科技确认申报2024金辑奖
申请技术丨英飞凌32位微控制器AURIX™ TC4x 申报领域丨智能驾驶 独特优势: 1.性能提升:内核全锁步高达500MHz,支持高速硬件路由 2.集成并行处理单元:矢量DSP并行处理,多场景AI加速 3.支持硬件虚拟化:虚机机多应用集成,隔离互不干拢 4.功能安全: ISO26262-2018 ASIL-D 认证 5.信息安全: ISO21434认证,支持国密算法 6.丰富的软件生态:可信赖的全球和本地合作伙伴提供丰富可靠的工具链和软件解决方案 应用场景: 电动汽车,域控制器、区域控制器,智能驾驶系统,雷达系统,底盘,运动控制系统等 未来前景: AURIX™ TC4x随着今年下
[汽车电子]
英飞凌32<font color='red'>位</font>微控制器AURIX™ TC<font color='red'>4</font>x丨英飞凌科技确认申报2024金辑奖
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved