找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7796|回复: 5
打印 上一主题 下一主题
收起左侧

求单片机程序 用四位数码管分别显示小时和分钟

[复制链接]
跳转到指定楼层
楼主
ID:207654 发表于 2017-6-5 00:06 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用四位数码管分别显示小时和分钟(其中第二位数码管倒置安放,用第二和第三位数码管的小数点闪烁指示秒);设置两个功能按键,A键作为数字加键,B键作为小时、分钟切换键。第一次按下B键时钟进入调整小时状态,第二次按下B键进入调整分钟状态,第三次按下B键退出调整时间回到正常走时状态。进入调整状态后,时间位对应数码管闪烁显示,以提示用户,未被调整的时间位应保持正常显示状态。按下A键修改相应时间位。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82765 发表于 2017-6-5 06:17 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:207654 发表于 2017-6-6 00:02 来自手机 | 只看该作者
cjjcjj1 发表于 2017-6-5 06:17
你好!是51单片机吗?程序是c语言写吗?可以加我QQ 1413753805

程序有了 就是实物出了点问题
回复

使用道具 举报

地板
ID:207654 发表于 2017-6-6 22:54 来自手机 | 只看该作者
#include <reg51.h>//<stc15.h>

#define uchar unsigned char
#define uint unsigned int

void BCSegNum();
void XSSegNum();
void DelayMs(uint n);

uchar Second=59, Hour=8, Minute=13;
static uchar Counter;
uchar flag0=0;


sbit dp=P2^7;
SegNum[]={1,2,3,4};//四个数码管
SegCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
BitCode[]={0x01,0x02,0x04,0x08};

void main()
{

        TMOD = 0x01;    //16位不自动重装,方式1
        TH0 = 0x4c;     //50ms
        TL0 = 0x00;
        ET0 = 1;
        EA = 1;
        TR0 = 1;
        EX0 = 1;
        EX1 =1;
        IT0 = 1;
        IT1 = 1;
        P1 = 0;
        while(1)
        {
                BCSegNum();
                XSSegNum();

        }
}

void BCSegNum()
{
        SegNum[3] = Hour/10;   //时十位
        SegNum[2] = Hour%10;
        SegNum[1] = Minute/10;
        SegNum[0] = Minute%10;
}

void XSSegNum()
{
        uchar i;
        for(i=0;i<4;i++)
{
         P2=SegCode[SegNum[i]];
         P1=BitCode[i];
         DelayMs(3);
         P1=0x00;
}
}

void T0_Isr(void)interrupt 1
{

        TH0 = 0x4c;
        TL0 =0x00;
        Counter++;
        if(Counter<=10)dp = 0;
        else dp = 1;
        if(Counter==20)
        {
                Second++;
                Counter = 0;
                if(Second==60)
                {
                        Second=0;
                        Minute++;
                        if(Minute==60)
                        {
                                Minute=0;
                                Hour++;
                                if(Hour==24)
                                {
                                        Hour=0;
                                }
                        }
                }
        }

}

void DelayMs(uint n)
{
        uchar j;
        while(n--)
        {
                for(j=0;j<113;j++);
        }
}

void Ex0Isr() interrupt 0 //选择键
        {
                TR0 = 0;
    flag0++;        //flag0=0无键按下
                if(flag0==3)
                {
                        flag0=0;
                        TR0 = 1;
                }
        }
       
        void Ex1tsr() interrupt 2 //加键
        {
                if(flag0==1)   //分加1
                {
                        Minute++;
                       
                        if(Minute==60)
                                        Minute=0;
                }
                if(flag0==2)   //时加1
                {
                        Hour++;                       
                        if(Hour==24)
                                Hour=0;       
                }
               
        }
回复

使用道具 举报

5#
ID:207654 发表于 2017-6-6 22:56 来自手机 | 只看该作者
程序如下 怎么把它改成双机通信呀

#include <reg51.h>//<stc15.h>

#define uchar unsigned char
#define uint unsigned int

void BCSegNum();
void XSSegNum();
void DelayMs(uint n);

uchar Second=59, Hour=8, Minute=13;
static uchar Counter;
uchar flag0=0;


sbit dp=P2^7;
SegNum[]={1,2,3,4};//四个数码管
SegCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
BitCode[]={0x01,0x02,0x04,0x08};

void main()
{

        TMOD = 0x01;    //16位不自动重装,方式1
        TH0 = 0x4c;     //50ms
        TL0 = 0x00;
        ET0 = 1;
        EA = 1;
        TR0 = 1;
        EX0 = 1;
        EX1 =1;
        IT0 = 1;
        IT1 = 1;
        P1 = 0;
        while(1)
        {
                BCSegNum();
                XSSegNum();

        }
}

void BCSegNum()
{
        SegNum[3] = Hour/10;   //时十位
        SegNum[2] = Hour%10;
        SegNum[1] = Minute/10;
        SegNum[0] = Minute%10;
}

void XSSegNum()
{
        uchar i;
        for(i=0;i<4;i++)
{
         P2=SegCode[SegNum[i]];
         P1=BitCode[i];
         DelayMs(3);
         P1=0x00;
}
}

void T0_Isr(void)interrupt 1
{

        TH0 = 0x4c;
        TL0 =0x00;
        Counter++;
        if(Counter<=10)dp = 0;
        else dp = 1;
        if(Counter==20)
        {
                Second++;
                Counter = 0;
                if(Second==60)
                {
                        Second=0;
                        Minute++;
                        if(Minute==60)
                        {
                                Minute=0;
                                Hour++;
                                if(Hour==24)
                                {
                                        Hour=0;
                                }
                        }
                }
        }

}

void DelayMs(uint n)
{
        uchar j;
        while(n--)
        {
                for(j=0;j<113;j++);
        }
}

void Ex0Isr() interrupt 0 //选择键
        {
                TR0 = 0;
    flag0++;        //flag0=0无键按下
                if(flag0==3)
                {
                        flag0=0;
                        TR0 = 1;
                }
        }
       
        void Ex1tsr() interrupt 2 //加键
        {
                if(flag0==1)   //分加1
                {
                        Minute++;
                       
                        if(Minute==60)
                                        Minute=0;
                }
                if(flag0==2)   //时加1
                {
                        Hour++;                       
                        if(Hour==24)
                                Hour=0;       
                }
               
        }
回复

使用道具 举报

6#
ID:260987 发表于 2017-12-13 11:04 | 只看该作者
在吗兄弟 有电路吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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