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

i++;

m++;

if(m>=20)

{

m=0;

}

if(i==2)                                //50ms*2=0.1s转换状态

{

i=0;

Second_Counts++;

if(Second_Counts>=600)

{

Second_Counts=0;

min++;

}

DisplayData[0] = DIG_CODE2[min%10];          //显示百位

DisplayData[1] = DIG_CODE[Second_Counts/100%10];          //显示十位

DisplayData[2] = DIG_CODE2[Second_Counts/10%10];          //显示个位

DisplayData[3] = DIG_CODE[Second_Counts%10];                  //显示小数点后一位

//                if(Second_Counts==10000) Second_Counts=0;                          //当秒计数到1000秒又变为0

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

四位数码管秒表 c语言编程,4位共阴极数码管秒表设计仿真与程序相关推荐

  1. [STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字

    本节我们目标是实现TM1640点亮16位共阴极数码管,显示"0~F"数字: 1. 硬件设计 GPIO初始化配置 SCL(PB6)  SDA(PB7):开漏输出,通过IO模拟驱动TM ...

  2. 按键自加自减的c语言数码管编程,8位共阴数码管动态扫描自增自减

    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit duan=P2^2;//定义P2.2为段操作,爱设置哪个都行 sbit wei=P2^3;//定义P2.3为位操作 /*- ...

  3. 四位共阳极数码管显示函数_74LS164驱动4位共阳数码管代码

    #include "reg52.h" #define u16 unsigned int #define u8 unsigned char sbit CLK=P2^0; sbit D ...

  4. c语言六个数码管显示123456,用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF,六个数码管是连续不同的六个数?...

    # include # define uint unsigned int # define uchar unsigned char code uchar shu[] = {0x3f,0x06,0x5b ...

  5. 4位共阴极数码管驱动

    这个是考核时候做的,期间做了消隐,感受良多,现在分享给大家看看. #include <STC15F2K60S2.H> #include <Digital595.h> #incl ...

  6. 汽车距离报警系统c语言编程,基于单片机的超声波汽车报警系统的设计

    目前汽车报警装置已被广泛应用,并种类繁多,但大多报警装置均有其局限性.如早期出现的红外报警系统,最大的缺点是红外线波易受干扰,整个系统的警示音常呈现不稳定的乱鸣状态,另外对深黑色粗糙表面物体的反应也较 ...

  7. 四位共阴极数码管显示“12.34”的主程序

    四位共阴极数码管显示"12.34"的主程序 本程序使用共阴极数码管,使用了TM1650驱动芯片,在stm32F103调试成功 #include "gpio.h" ...

  8. 三位共阴数码管动态显示按键控制加减

    用这个软件也有一两个月了,学习了很多大神的教程代码,让我飞速的进步学习了解电子科技的知识,现在我也想回报大家,慢慢写文章发布我所了解的项目的教程,尽可能写简单通俗,让大部分初学者都能看懂. 买这东东将 ...

  9. 共阳数码管段码表_简单共阴极数码管电路图大全

    共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a.b.c.d.e.f.g及dp(小数点),如下图所示.图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个L ...

最新文章

  1. 浅谈 javascript 中的this绑定问题
  2. sockaddr数据结构
  3. 深度相机之TOF原理详解
  4. 深度模型不work?这有一份超全的Debug检查清单
  5. 《算法图解》笔记与总结
  6. Visual Studio2022 离线安装包下载
  7. 2×3卡方检验prism_SPSS之卡方检验
  8. 读胡适先生《赠与今年的大学毕业生》和《赠与大学毕业生的话》后感
  9. AM437x——LED驱动
  10. 【全】可供选择的软件开源协议的罗列
  11. Unity音频可视化
  12. ubuntu16.04下安装网易云音乐(官网已经换为18.04)
  13. 关于curses 安装
  14. uniapp调用百度智能云身份证识别
  15. 网页中文翻译成英文简单方法
  16. Oracle VARCHAR2超过4000字节-数据库修改
  17. kdbx后缀文件打开
  18. 《软件方法》第六章 自测题
  19. 机器人瓦力材质库下载_机器人总动员 4K蓝光原盘下载+高清MKV版/ 大空奇兵·威E(港) / 瓦力(台) 2008 60.4G...
  20. 2022年制冷与空调设备运行操作操作考试题及在线模拟考试

热门文章

  1. xgboost实例_XGBoost超详细推导,终于有人讲明白了!
  2. 2016年10月计算机网络技术,2016年10月自考计算机网络技术练习题及答案(2)
  3. 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!
  4. 【思考】PHP——成也Web,败也Web
  5. 美团DB数据同步到数据仓库的架构与实践
  6. 论文浅尝 | Iterative Cross-Lingual Entity Alignment Based on TransC
  7. 维多利亚的秘密 2005-2018年视频合集
  8. 各种损失函数比较-带你斩获offer
  9. 18-Gm-TransH:Group-Constrained Embedding of Multi-fold Relations in Knowledge Bases,嵌入,transH,n-ary
  10. Java 代码复用 —— 泛型