打印

求助!!!在我程序里加入一段小功能模块

[复制链接]
1844|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dong2007|  楼主 | 2008-10-24 00:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用Proteus模拟做了个电子钟,但还有个模块一直实现不了。就是要在:到了1:00响一声,,  2:00响两声,,依次。。。。
哪位大哥大姐能帮我修正一下,下面这段程序能实现基本功能,就差扬声器驱动了。。。在此感谢各位了。

相关帖子

沙发
dong2007|  楼主 | 2008-10-24 00:18 | 只看该作者

程序忘了贴上

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SEC=P1^7;
sbit MIN=P1^6;
sbit HOU=P1^5;
uchar code table[]=             //0 1 2 3 4 5 6 7 8 9 10 11 12    13 14 15  16  17  //
{0xc0,0xF9,0xA4,0xB0,0x99,     //0 1 2 3 4 5 6 7 8 9  A  B  C  D  E  F  OFF  - //
0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e,0xff,0xbf};


void delay(uint);
uchar econd[8]={16,16,16,16,16,16,16,16};
void display(unsigned char display_buffer[8]);
uchar flag=0,hour=12,minute=0,second=0;
void main()
{        
    uchar keyval=0,miao=0;
    EA=1;
    ET0=1;
    TMOD=0X11;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    TR0=1;
//    econd[0]=1;      //
//    econd[1]=2;      //显示hour
    econd[2]=17;      //显示 -
//    econd[3]=0;      //
//    econd[4]=0;      //显示minute
    econd[5]=17;      //显示 -
//    econd[6]=0;      //
//    econd[7]=0;      //显示second

    while(1)
    {
        if(flag==20)
        {
            flag=0;
            second++;
        }
        if(second==60)
            {second=0;minute++;}
        if(minute==60)
            {minute=0;hour++;}
        if(SEC==0)
            {delay(5);if(SEC==0){while(!SEC);}second++;}
        if(MIN==0)
            {delay(5);if(MIN==0){while(!MIN);}minute++;}
        if(HOU==0)
            {delay(5);if(HOU==0){while(!HOU);}hour++;}
    /////////////////////////////////////////////////
        econd[6]=second/10;
        econd[7]=second%10;
    /////////////////////////////////////////////////
    /////////////////////////////////////////////////
        econd[3]=minute/10;
        econd[4]=minute%10;
    /////////////////////////////////////////////////
    /////////////////////////////////////////////////
        econd[0]=hour/10;
        econd[1]=hour%10;
    /////////////////////////////////////////////////        
        display(econd);
    }
        
}

///////////////////////////////////////////////////////
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=100;y>0;y--);
}

//////////////////////////////////////////////////
void display(unsigned char display_buffer[8])       
{        
        uchar temp,i;
        temp=0x01;
        for(i=0;i<8;i++)
        {
            P2=temp;
            temp=_crol_(temp,1);
            P0=table[display_buffer]];
            delay(2);
        }
}
void timer0() interrupt 1
{
    TH0=(65535-50000)/256;     //延时50ms
    TL0=(65535-50000)%256;
    flag++;    
}

使用特权

评论回复
板凳
dong2007|  楼主 | 2008-10-24 00:40 | 只看该作者

扬声器忘了画上去,随便用个 I/O口都行

使用特权

评论回复
地板
taoest| | 2008-10-26 22:22 | 只看该作者

hour

if(minute==0 && second<=hour && flag<10)beepPin=1;else beepPin=0;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

185

帖子

0

粉丝