数码管可调倒计时器

发布者:创意探险最新更新时间:2015-07-21 来源: eechina关键字:数码管  倒计时器 手机看文章 扫描二维码
随时随地手机看文章
调节精度:5分钟   调节范围:0~650分钟 数码管显示格式:000(分钟)-00(秒)
按下P1^0口开始倒计时   P1^1口停止   P1^2加时间    P1^3减时间 
#include
#define KeyPort P1
sbit Key_UP=P1^0;
sbit Key_DOWN=P1^1;
unsigned char KeyV,TempKeyV,num;           
sbit P25=P2^0;//数码管第1位
sbit P26=P2^1;//数码管第2位
sbit P29=P2^2; 
sbit gang=P2^3;
sbit P27=P2^4;//数码管第4位
sbit P28=P2^5;
sbit P12=P1^2;//时间加
sbit P13=P1^3; //时间减
sbit JDQ=P3^7;//继电器
 unsigned int js;
 unsigned int ds=6000,x,y;//倒计时初始时间,加时,减时
 unsigned char jsflag;
static unsigned int i;
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
  unsigned char KeyScan(void);//键盘扫描
  void tiaojie(void);
void Delay(unsigned int ii) //1MS
{
unsigned int jj;
for(;ii>0;ii--)
for(jj=0;jj<125;jj++);
}
void main()
{
    EA = 1;     //允许CPU中断
 ET0 = 1;     //定时器0中断打开
 ET1=1;     //定时器1中断打开
 TMOD = 0x11;   //设定时器0 1为模式1,16位模式
 TH0=0xB8;
 TL0=0x00;    //设定时值为(20ms)
 TH1=0xdc;     //设定时值为(10ms)
 TL1=0x00;
 TR0 = 1;
 TR1=1;
     
 KeyV = 0;
 TempKeyV = 0;
 jsflag=0;
while(1);
}
//定时器0中断外理中键扫描和显示
void Key_Time0(void) interrupt 1 using 2
{
  TH0=0xB8;
 TL0=0x00;    //设定时值为20000us(20ms)
  if (!Key_UP)
    KeyV = 1;
  if (!Key_DOWN)
    KeyV = 2;
 
   if(P12==0)
   {
    Delay(20);
    if(P12==0)
     ds=ds+500;//定时加5分钟  (调节精度)
  while(!P12);
   }
   if(P13==0)
   {
    Delay(20);
    if(P13==0)
    ds=ds-500; //定时减5分钟
    while(!P13);
   }
   if (KeyV!= 0)      //有键按下
    {
      Delay(10);   //延时防抖  按下10ms再测
      if (!Key_UP)
        TempKeyV = 1;
      if (!Key_DOWN)
        TempKeyV = 2;
   if (KeyV == TempKeyV)   //两次值相等为确定接下了键
    {
        if (KeyV == 1)
     {
                     jsflag=0;
            if(ds==0)
         {
         ds=100;
         }
        js=js+1;
       JDQ=1;   //继电器吸合
      
                        if(js==50)
                            {
                          js=0;
                          ds=ds-1;
  
                             }
           }
if(KeyV==2)
{
   jsflag=1;
 }
}
}
   if(jsflag==1)
   {
   JDQ=0;
   }
   if(ds==0)
   {
   JDQ=0;
   jsflag=1;
   KeyV=0;
   }
 
}
void disp_Time1(void) interrupt 3 using 3
{
 TH1=0xdc;
 TL1=0x00;
 x=ds/10000;
    P0=LEDDis[x]; //分钟百位
     P25=0;
     Delay(2);
  P25=1;
   y=(ds%10000)/1000;//分钟十位
      P0=LEDDis[y];
      P26=0;
      Delay(2);
      P26=1;
     P0=LEDDis[((ds%10000)%1000)/100];//分钟各位
     P29=0;
     Delay(2);
     P29=1;    
P0=0xbf; //分钟与秒的间隔符
gang=0;
Delay(2);
gang=1;
  P0=LEDDis[(((ds%10000)%1000)%100)/10]; //秒十位
  if(((ds%1000)%100)/10>=6)   //满60,百位减一
  {
  ds=ds-10;
  P0=LEDDis[6];
  }
  P27=0;
  Delay(2);
  P27=1;
  P0=LEDDis[(((ds%10000)%1000)%100)%10]; //秒个位
  P28=0;
  Delay(2);
  P28=1;
}
关键字:数码管  倒计时器 引用地址:数码管可调倒计时器

上一篇:单片机解码万能红外遥控器C51程序
下一篇:世上最简单的遥控(数码管显示)电子钟(C语言编写)

推荐阅读最新更新时间:2024-03-16 14:25

第37节:数码管作为仪表盘显示跑马灯的方向,速度和状态
开场白: 我在第24节中讲过按键控制跑马灯的方向,速度和运行状态的项目程序,只可惜那个程序不能直观地显示运行中的三种状态,这节我决定在24节的基础上,增加一个数码管显示作为类似汽车仪表盘的界面,实时显示跑马灯的方向,速度,和运行状态。 这一节要教会大家一个知识点:继续加深理解运动,按键与数码管三者之间的关联程序框架。 具体内容,请看源代码讲解。 (1)硬件平台: 基于朱兆祺51单片机学习板。用S1键作为控制跑马灯的方向按键,S5键作为控制跑马灯方向的加速度按键,S9键作为控制跑马灯方向的减速度按键,S13键作为控制跑马灯方向的启动或者暂停按键。记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。 (2)实现
[单片机]
(5)单片机动态数码管
#include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { while(i--); } void digdisplay() { u8 i; for (i=0;i 8;i++) { switc
[单片机]
PIC16F877A开发板 数码管动态扫描实验
//************************************************************************* #include pic.h #include ../head/config.h __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN); //HS振荡,禁止看门狗,低压编程关闭,启动延时定时器 #define srclk RC3 //移位寄存器时钟 (74595:11脚) #define rclk RC4 //存储寄存器时钟 (74595:12脚) #define ser RC5 //串行数据口 (74595:14脚)
[单片机]
八位数码管动态显示程序
这个是51hei开发板专区里转来的一个程序,注释很详细,运行也没有问题,原文地址:http://www.51hei.com/bbs/dispbbs.asp?boardid=10&id=4140 /*动态数显的设计思路,首先是我们要先知道怎样才能使哪个位亮,显示的段是什么数值,接下来就是中断时间 的问题了,设计步骤如下,如果要让八个数码管静态显示1到8,我们可以修改中断时间,如把50000改成100或更低*/ #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit duan=P2^6;
[单片机]
数码管电路的制做与驱动
数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图: 一般来说大部分的逻辑IC的吸收电流要强于输出电流。因此,大家都爱使用共阴极的数码管,因为可选的IC多些。很可惜,我的这组数码管是共阳的,因此公共端我打算用三级管来驱动。 我的最小系统板: 我用最常用的S9012,首先我得计划好电路方式,就采用最常用的动态扫描显示。先搭建最简电路,调试出需采用元件的参数。 先不接上图的R2和74HC
[单片机]
<font color='red'>数码管</font>电路的制做与驱动
MSP430数码管的使用Ⅰ
首先应该了解数码管及其工作原理。了解你使用的是共阴还是共阳数码管,其次了解数码管的段选位选。 接下来是一个例程 #include msp430f149.h typedef unsigned char uchar; #define wei_h P5OUT |= BIT5 #define wei_l P5OUT &= BIT5 #define duan_l P6OUT &= ~BIT6 #define duan_h P6OUT |= BIT6 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,
[单片机]
单片机学习札记2---调试数码管电路
在上一节中,我们交代了为什么要做这样一个项目,以及我们提出了需求,并根据具体的需求分析,将其转化为硬件设计,画出了具体的原理图,但是还有许多的问题没有交代清楚,比如数码管的引脚判断,12个管脚哪8个是数码管的段码?4个是数码管的位码?这个我们刚买来并不清楚,还需要测量,这就要用到万用表了,将万用表拨到二极管档位,二极管有单向导电性,我们知道数码管就是8个小灯组成的,如果我们买的是共阳极的数码管,也就是如下图所示: 如果我们将万用表的红表笔接12个引脚中的任意一个,黑表笔接其余11的任意一个引脚,如果小灯亮的话,说明红表笔管脚是数码管的位码,而我们的数码管有四个,所以有4个位码,可以按照点亮小灯的方法查找,找完位码之后,记下来,
[单片机]
单片机学习札记2---调试<font color='red'>数码管</font>电路
串行接口LED数码管及键盘管理器件ZLG7289A的原理与应用
摘要:介绍了LED数码管及键盘管理器ZLG7289A的原理与应用。该芯片具有SPI串行接口,可同时驱动8位共阴式数码管(或64只独立LED),还可连接多达64键的键盘矩阵,单块芯片即可完成LED显示、键盘接口等全部功能。文章给出了ZLG7289A的特点、引脚功能、指令说明和经典电路,并以单片机AT89C51为例,给出了其接口电路及相应源程序。 关键词:ZLG7289A;LED显示;键盘接口;SPI 1 概述 ZLG7289A是广州周立功单片机发展有限公司自行设计的、具有SPI串行接口功能的、可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片。 该芯片同时可连接多达64键的键盘矩阵。单块芯片即可完成LED
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved