找回密码
 立即注册

QQ登录

只需一步,快速开始

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

电子时钟

[复制链接]
跳转到指定楼层
楼主
ID:291657 发表于 2018-3-14 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0X87,0xFF,0xDF};
uchar seconde=0;
uchar minite=0;
uchar hour=12;
uchar mstcnt=0;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
void delay(uint k);
void delay1(uchar h);
void time_pro();
void display();
void keyscan();
void delay1(uchar h)
{
        uchar j;
        while((h--)!=0)
        {
                for(j=0;j<125;j++)
                {
                        ;
}
}
}
void delay(uint k)
{
        uint a,b,c;
        for(c=k;c>0;c--);
        for(b=38;b>0;b--);
        for(a=130;a>0;a--);
}
void time_pro(void)
{
        if(seconde==60)
        {
                seconde=0;
                minite++;
                if(minite==60)
                {
                        minite=0;
                        hour++;
                        if(hour==24)
                        {
                                hour=0;
}
}
}
}
void display(void)
{
        P2=0xfe;
        P0=dispcode[hour/10];
        delay1(4);
        P2=0xfd;
        P0=(dispcode[(hour%10)]);
        delay1(4);
        P2=0xfb;
        P0=dispcode[minite/10];
        delay1(4);
        P2=0xf7;
        P0=dispcode[minite%10];
        delay1(4);
        P2=0xef;
        P0=dispcode[seconde/10];
        delay1(4);
        P2=0xdf;
        P0=dispcode[seconde%10];
        delay1(4);
}
void keyscan(void)
{
        if(P1_1==0)
        {
                delay(8000);
                if(P1_0==0)
                {
                        delay(8000);
                        seconde++;
                        if(seconde==60)
                        {
                                seconde=0;
}
}
}
        if(P1_1==0)
        {
                delay(8000);
                if(P1_1==0)
                {
                        delay(8000);
                        minite++;
                        if(minite==60)
                        {
                                minite=0;
}
}
}       
        if(P1_2==0)
        {
                delay(8000);
                if(P1_2==0)
                {
                        delay(8000);
                        hour++;
                        if(hour==24)
                        {
                                hour=0;
}
}
}       
}
void timer0(void) interrupt 1 using 0
{
        TH0=0x3c;
        TMOD=0x11;
        mstcnt++;
        if(mstcnt==20)
        {
                seconde++;
                mstcnt=0;
}
}
void main(void)
{
        P1=0xff;
        TMOD=0x11;
        TH0=0x3c;
        TL0=0xb0;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
                keyscan();
                time_pro();
                display();
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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