六位LED数字钟的设计与制作。求单片机程序。

如题所述

#include <reg51.h>
#define uchar unsigned char
uchar i=0;
uchar k=0;
void InitTimer0(void);
void control_sec(void);
void control_min(void);
void control_hor(void);

void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x3C;
    TL0 = 0x0B0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void control_sec(void)
{
    //second
    
    if((P0 & 0x0f)==0x09)//秒最后一位是9
    {
        if((P0&0xf0)!=0x05)//秒第二位不是5
        {
            P0=P0+0x10;
            (P0&0x0f)=0x00;
        }
        else//59秒
        {
            P0=0x00;
            control_min();
        }
    }
    else
    {
        P0++;
    }
}


void control_min(void)
{
    //minute
    
    if((P1 & 0x0f)==0x09)//分最后一位是9
    {
        if((P1&0xf0)!=0x05)//分第二位不是5
        {
            P1=P1+0x10;
            (P1&0x0f)=0x00;
        }
        else//59秒
        {
            P1=0x00;
            control_hor();
        }
    }
    else
    {
        P0++;
    }
}

void control_hor(void)
{
    //hour
    if(P2=0x23)
    {
        P2=0x00;
    }
    else
    {
        if((P2 & 0x0f)==0x09)//时最后一位是9
        {
            P2=P2+0x10;
            (P1&0x0f)=0x00;
        }
        else
        {
            P2++;
        }
    }
}

void main(void)
{
    P1=0x00;//minute
    P0=0x00;//second
    P2=0x00;//hour
    InitTimer0();
}

void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x3C;
    TL0 = 0x0B0;
    i++;
    if(i==20)
    {
        i==0;
        control_sec();
    }
}

 电路图基本是这样,排阻还得加个vcc


正经搞肯定不像我这么整,得用1302能方便点,引脚也尽量用595省点io,led更不可能用这个肯定是

这种,我这个就是你要交报告来不及了糊弄糊弄老师的

追问

亲。plc16F877A的程序。

追答

亲你没说啊

追问

实训作业哦!写不出程序要死了。

追答

我记得PIc好像是portd之类的吧,io口先定义一下思路跟这个差不多就醒了,led用6个的

追问

学渣不会。亲你会不会?

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-05
找个DS1302,6位数码管要拆分成一个4位和一个2位的,需要扫描。1302的程序有的是,拿过来就可以用。数码管的程序跟电路关系比较大,要结合硬件电路一起设计本回答被网友采纳
第2个回答  2015-01-05
不难哟追问

那程序呢?

给力者的

相似回答