找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4382|回复: 2
收起左侧

求教!如何把倒计时60s的程序改成“00:00”用4位led显示的2分钟程序

[复制链接]
ID:72803 发表于 2015-1-26 10:07 | 显示全部楼层 |阅读模式
下面是倒计时60s的程序
求大神改写

#include<reg51.h>

sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
unsigned char j,k,a1,a0,s=60;
unsigned int m;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display(unsigned char sh_c,unsigned char g_c)
{
   dula=0;
   P0=table[sh_c];
   dula=1;
   dula=0;

   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);

   P0=table[g_c];
   dula=1;
   dula=0;

   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
}

void main()
{
        TMOD=0x01;
        TR0=1;
        TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
        TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
        ET0=1;
        EA=1;
        while(1)
        {
                if(m==20)
                {        m=0;
                        s--;
                }
                a0=s%10;
                a1=s/10;
                display(a1,a0);
                if(s==0)
                {
                        TR0=0;//时间到,定时器关闭
                        beep=0;//蜂鸣器响,报时。
                }       
        }
}

void time0() interrupt 1
{TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        m++;
}


回复

使用道具 举报

ID:72751 发表于 2015-1-26 11:33 | 显示全部楼层
楼主有点不明白你的意思的,至少使用5位的数码管才能显示出你要的这种形式啊,前两位是分钟,后两位代表秒,是这意思吗?这个程序显示的000:00,你可以自己把高位的0去掉,变成00:00
#include"reg52.h"

#define uchar unsigned char
#define uint unsigned int

sbit DULA = P2^6;  //74H573控制位,控制数码管段码输出
sbit WELA = P2^7;  //74H573控制位,控制数码管位码输出

uchar minute = 0;
uchar second = 0;
uchar T0RH = 0;         
uchar T0RL = 0;        
uint cnt = 0; //秒计数器
uchar LedBuff[6] = {0X00,0X00,0X00,0X00,0X00,0X00};        //数码管显示缓冲区
uchar code LedChar[] = { //数码管显示编码表
        0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,  //0~7
        0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X09 //8~15 :
};

void ConfigTimer0(uint ms);        //定时器0初始化,确定定时时间
void LedShow(uchar minute,uchar second);  

void main()
{
        EA = 1;
        ConfigTimer0(1); //初始化定时器0,定时时间1ms
        while(1)
        {
                if(cnt>=1000)
                {
                        cnt = 0;
                        second++;
                        if(second>=60)
                        {
                                second = 0;
                                minute++;
                                if(minute>=2)
                                {
                                        minute = 0;
                                }
                        }
                }
                LedShow(minute,second);
        }
}


void ConfigTimer0(uint ms)
{
        unsigned long temp;
        temp = 11059200/12;
        temp = temp*ms/1000;
        temp = 65536 - temp;
        T0RH = (uchar)(temp>>8);
        T0RL = (uchar)temp;
        TMOD &= 0XF0;
        TMOD |= 0X01;
        TH0 = T0RH;
        TL0 = T0RL;
        TR0 = 1;
        ET0 = 1;
}

void LedShow(uchar minute,uchar second)
{
        uchar buff[6];
        uchar i;
        buff[0] = second%10;
        buff[1] = second/10;
        buff[2] = 16;
        buff[3] = minute%10;
        buff[4] = minute/10;
        buff[5] = 0;
        for(i=0;i<6;i++)
        LedBuff[ i] = LedChar[buff[ i]];
        
}
void LedScanf()
{
        static uchar i = 0;
        P0 = 0X00;
        DULA = 1;
        P0 = LedBuff[ i];
        DULA = 0;
        P0 = 0XFF;
        WELA = 1;
        P0 = ~(0X20>>i);
        WELA = 0;
        i++;
        if(i>5)
        i = 0;
}

void interrupttimer0() interrupt 1
{
        TH0 = T0RH;
        TL0 = T0RL;
        LedScanf();
        cnt++;
}




评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2015-1-28 15:37 | 显示全部楼层
wind02072107 发表于 2015-1-26 11:33
楼主有点不明白你的意思的,至少使用5位的数码管才能显示出你要的这种形式啊,前两位是分钟,后两位代表秒 ...

[ i ]导致了 斜体   现在已经修正了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表