//采用8位数码管动态显示程序

//使用AT89C51单片机,12MHz晶振,P0输出字段码,P2口输出位选码

//用共阳极LED数码管,key0为调时分位选择键,key1为加1键,key2为减1键,key3为确定键

#include  "reg51.h"

//包含头文件

#define char unsigned char

//定义无符号字符型

char code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

//共阳极LED数码管"0~9","-"的字段码

char code scan_con[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//位选择码

char data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};

//显示缓冲区,时、分、秒初始为0,0x0b为"-"的编码

char data timedata[3]={0x00,0x00,0x00};

//分别为秒、分和小时的值

char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;

sbit  key0=P1^0;

sbit  key1=P1^1;

sbit  key2=P1^2;

sbit  key3=P1^3;

//定义四个按键

//1ms延时函数

delay1ms(int t)

{

int i,j;

for (i=0;i

{

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

}

}

//按键处理函数

keyscan()

{

EA=0;

//关总中断

if (key0==0)         //判断第一个按键是否按下

{

delay1ms(10);

//按键消抖

while (key0==0);

//再次判断按键是否按下

con++;

TR0=0;

ET0=0;

//关定时/计数器,关T0中断

if (con>=3)

{

con=0;

TR0=1;

ET0=1;

}

}

if (con!=0)

{

if (key1==0)

//如果第二个按键按下

{

delay1ms(10);

while (key1==0);

timedata[con]++;

//加一功能

if (con==2)

con1=24;

else con1=60;

if (timedata[con]>=con1)

{timedata[con]=0;}

}

}

if (con!=0)

{

if (key2==0)

//如果第三个按键按下

{

delay1ms(10);

while (key2==0);

timedata[con]--;

//减一功能

if (con==2)

con2=23;

else con2=59;

if (timedata[con]<=0)

{

timedata[con]=con2;

}

}

}

if(key3==0)

//如果第四个按键按下

{

delay1ms(10);

while(key3==0);

EA=1;

TR0=1;

ET0=1;

}

EA=1;

//开总中断

}

//数码管显示函数

scan()

{

char k;

dis[0]=timedata[0]%10;

dis[1]=timedata[0]/10;

dis[3]=timedata[1]%10;

dis[4]=timedata[1]/10;

dis[6]=timedata[2]%10;

dis[7]=timedata[2]/10;

for (k=0;k<8;k++)

{

P0=dis_7[dis[k]];

P2=scan_con[k];

delay1ms(1);

P2=0x00;

}

}

//主函数

main()

{

TH0=0x3c;

TL0=0xb0;

TMOD=0x01;

//选择工作方式1

ET0=1;

TR0=1;

EA=1;

while (1)

{

scan();

//调用数码管显示scan()子函数

keyscan();

//调用按键处理keyscan()子函数

}

}

//定时器/计数器T0中断服务函数

void time_intt0(void) interrupt 1

{

ET0=0;

TR0=0;

TH0=0x3c;

TL0=0xb0;

TR0=1;

ms50++;

if (ms50==20)

{

ms50=0x00;

timedata[0]++;

if (timedata[0]==60)

{

timedata[0]=0;

timedata[1]++;

if (timedata[1]==60)

{

timedata[1]=0;

timedata[2]++;

if (timedata[2]==24)

{

timedata[2]=0;

}

}

}

}

ET0=1;

//开T0中断

}

2020-1-4 14:23 上传

protues仿真图,实物加了9012pnp型的三极管驱动数码管的位选。

四位共阳极数码管显示函数_求各位大神指正,四位一体共阳极数码管数字钟程序,仿真能运行,实物就只显8个8,不动...相关推荐

  1. aoc显示器开机显示计算机,_求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面_...

    网友求助:_求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面_ 问题求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面 ...

  2. 四位共阳极数码管显示函数_新手求助四位共阳数码管显示函数

    #include #include "DS1302.H" sbit K_S = P1^0;    //显示模式sbit K_M = P1^1;    //修改sbit K_I = ...

  3. 四位共阳极数码管显示函数_【项目8-任务10-小组13】利用四位数码管实现动态扫描显示...

    学习任务 1.四位数码管的电路结构与显示原理 (什么是位选.什么是段选.共阴与共阳的区别.显示4位数字,需要多少条口线?显示n位数字呢?) 2.Arduino直接连接四位数码管实现四位阿拉伯数字显示 ...

  4. 四位共阳极数码管显示函数_数码管模块.doc

    数码管模块 数码管 1.概 述 数码管模块采用四位共阳极数码管,用于显示数字和少数特殊字符.可以在机器人项目中使用该模块,用于显示速度.时间.分数.温度.距离等传感器的值.同时,Makeblock提供 ...

  5. 四位共阳极数码管显示函数_初学者,求助!!设计一个4位LED数码管动态扫描显示电路,用...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; ...

  6. java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 附上蓝牙串口通讯代码, package com.test.BTClient; import java.io.File; import java.io.Fi ...

  7. 2个JAVA程序能放在一起吗_求JAVA大神把2程序功能组合在一起

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下程序为 图片旋转功能 import java.awt.*; import java.awt.event.*; import java.awt.imag ...

  8. java大神请出来_求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因。...

    求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因.classPlate{publicPlate(){System.out.println("inPlateconstru ...

  9. js访问对方手机文件夹_求JS大神帮我写个利用JS来实现手机端和PC端访问自动选择样式文件代码...

    展开全部 现在比较流行的办法是 一个网站2套代码,一套是手机一套pc, 在网站首页开e68a84e8a2ad3231313335323631343130323136353331333363353735 ...

  10. 用java编写圆锥_求java大神帮忙 求大神帮助!Java

    导航:网站首页 > 求java大神帮忙 求大神帮助!Java 求java大神帮忙 求大神帮助!Java 相关问题: 匿名网友: 普通类 public class CircularA { //求圆 ...

最新文章

  1. linux 下的dd,Linux中的dd命令
  2. Python帮你识破双11的套路
  3. 将COM+ Events进行到底[转]
  4. linux将访问日志切成每天,最简单自动切割 nginx 访问日志示例
  5. 单调栈解木板倒水问题
  6. Bootstrap 模态对话框只加载一次 remote 数据的解决办法 转载
  7. 线性同余法[纯理论]
  8. ROS 教程——从入门到入土
  9. yytext显示html并编辑,YYText的使用
  10. 手机网页 弹窗layerUI
  11. C语言实现64格棋盘,在第1个方格放1粒小麦、第2个方格放2粒、第3个方格放4粒小麦,第4个方格放8粒小麦、计算出每个方格应放多少小麦,并计算了总数。把计算的小麦总数与世界小麦年产量相比较。
  12. 读者提问:如何提高效率?
  13. VMware Workstation Pro的安装详细过程
  14. php如何判断一个数是不是整数,php判断变量是否是整数的两种方法
  15. 我的世界服务器显示大字,我的世界上面指令让界面出现字体 | 手游网游页游攻略大全...
  16. win10计算机启动慢,如何解决win10系统启动缓慢的问题
  17. Sam Altman 山姆奥特曼:关于生产率(工作效率)
  18. linux中nginx启动,重启,关闭命令
  19. 文件管理系统软件---爱米云网盘
  20. Python OCR识别图片验证码(二)

热门文章

  1. wnmp支持php文件,Windows下配置nginx+php(wnmp)
  2. innodb_buffer_pool_reads、innodb_buffer_pool_read_requests分析与innodb 缓存命中率计算
  3. java话费充值代码_话费充值接口示例代码
  4. java代码是干嘛的_程序员究竟是干嘛的呢?
  5. 计算机网络图标在哪里照,网络设备图标-电脑上的网络图标怎么显示
  6. html页面字体美化,网页字体的美化-网页设计,HTML/CSS
  7. 二进制转8421bcd码_码制 || BCD码 || 格雷码 || 奇偶校验码 || 字母数字码 || 数电
  8. 什么是OBD及组成和作用、工作原理
  9. 【win10】安装wsl,报错WslRegisterDistribution failed with error: 0x8007019e
  10. 基于STM32F407格式化SD卡