找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3081|回復: 0
打印 上一主題 下一主題
收起左側

單片機電子時鐘仿真程序 可以設置鬧鐘,時鐘調節(jié)

[復制鏈接]
跳轉到指定樓層
樓主
ID:511094 發(fā)表于 2019-12-27 22:54 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
設置鬧鈴鍵第3下設置鬧鈴小時,第4下設置鬧鈴分鐘,第5下確定鬧鈴,第6下結束鬧鈴設置
時間到達設置的鬧鈴時,led燈開始流水,直到過了一分鐘后(鬧鈴沒有秒)led燈停止

可以設置鬧鐘,時鐘調節(jié)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar abc[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar moshi=0,a=0,b=0,c=0,i=0,j=0,bb=0;
char sec = 00,min = 11,hou = 12,hou_nl = 0,min_nl = 0;
char moshi_num = 0;
char n = 0;
char Close_naozhong = 0;
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit key7 = P1^6;
#define led P3
void delay(uchar x)
{
        while(x--);
}
void key(void)
{
        if(key1 == 1)
        delay(200);
        if(key1 == 1)a = 1;
        if(a == 1 && key1 == 0)
        {
                moshi++;
                if(moshi > 5)moshi = 0;
                a = 0;
                moshi_num = moshi;
        }
        if(key2 == 1)
        delay(200);
        if(key2 == 1)bb = 1;
        if(bb == 1 && key2 == 0)
        {
                if(moshi == 1)hou++;
                if(moshi == 2)min++;
                if(moshi == 3)hou_nl++;if(hou_nl > 23)hou_nl = 0;
                if(moshi == 4)min_nl++;if(min_nl > 59)min_nl = 0;
                bb = 0;
        }
        if(key3 == 1)
        delay(200);
        if(key3 == 1)c = 1;
        if(c == 1 && key3 == 0)
        {
                if(moshi == 1)hou--;if(hou < 0)hou = 23;
                if(moshi == 2)min--;if(min < 0)min = 59;
                if(moshi == 3)hou_nl--;if(hou_nl < 0)hou_nl = 23;
                if(moshi == 4)min_nl--;if(min_nl < 0)min_nl = 59;
                c = 0;
        }
        if(key4 == 0)moshi = 5;
        if(key4 == 1)moshi = moshi_num;

        if(key5==0)
        {
                delay(200);
                TR0 = 1;
        }
        if(key6==0)
        {
                delay(200);
                TR0 = 0;
        }
        if(key7==0)
        {
                delay(200);
                Close_naozhong = 1;
        }
}
void t0_init(void)
{
        TMOD = 0X01;
        TH0 = 60536 / 256;
        TL0 = 60536 % 256;
        ET0 = 1;
        EA = 1;
        TR0 = 1;
}
void t0(void)interrupt 1
{
        TH0 = 60536 / 256;
        TL0 = 60536 % 256;
        i++;
        if(i == 200)
        {
                i = 0;
                if(moshi == 0)sec++;
                b = ~b;
        }
        if(sec > 59)
        {
                sec = 0;
                min++;
        }
        if(min == 60)
        {
                min = 0;
                hou++;
        }
        if(hou > 23)hou = 0;
}
void main(void)
{
        t0_init();
        led = 0;
        while(1)
        {
                key();
                P0 = 0xff;
                if(moshi == 0)
                {        
                        switch(j)
                        {
                                case 0:P0 = abc[hou/10];P2 = ~0x01;break;
                                case 1:P0 = abc[hou%10]&(0x7f|b);P2 = ~0x02;break;
                                case 2:P0 = abc[min/10];P2 = ~0x04;break;
                                case 3:P0 = abc[min%10]&(0x7f|b);P2 = ~0x08;break;
                                case 4:P0 = abc[sec/10];P2 = ~0x10;break;
                                case 5:P0 = abc[sec%10];P2 = ~0x20;break;
                        }
                }
                if(moshi == 1)
                {
                        switch(j)
                        {
                                case 0:P0 = abc[hou/10]|b;P2 = ~0x01;break;
                                case 1:P0 = abc[hou%10]&0x7f|b;P2 = ~0x02;break;
                                case 2:P0 = abc[min/10];P2 = ~0x04;break;
                                case 3:P0 = abc[min%10]&(0x7f|b);P2 = ~0x08;break;
                                case 4:P0 = abc[sec/10];P2 = ~0x10;break;
                                case 5:P0 = abc[sec%10];P2 = ~0x20;break;
                        }
                }
                if(moshi == 2)
                {        
                        switch(j)
                        {
                                case 0:P0 = abc[hou/10];P2 = ~0x01;break;
                                case 1:P0 = abc[hou%10]&(0x7f|b);P2 = ~0x02;break;
                                case 2:P0 = abc[min/10]|b;P2 = ~0x04;break;
                                case 3:P0 = abc[min%10]&0x7f|b;P2 = ~0x08;break;
                                case 4:P0 = abc[sec/10];P2 = ~0x10;break;
                                case 5:P0 = abc[sec%10];P2 = ~0x20;break;
                        }
                }
                if(moshi == 3)
                {
                        switch(j)
                        {
                                case 0:P0 = abc[hou_nl/10]|b;P2 = ~0x01;break;
                                case 1:P0 = abc[hou_nl%10]&0x7f|b;P2 = ~0x02;break;
                                case 2:P0 = abc[min_nl/10];P2 = ~0x04;break;
                                case 3:P0 = abc[min_nl%10]&(0x7f|b);P2 = ~0x08;break;
                                case 4:P0 = 0xc6;P2 = ~0x10;break;
                                case 5:P0 = abc[1];P2 = ~0x20;break;
                        }
                }
                        if(moshi == 4)
                {
                        switch(j)
                        {
                                case 0:P0 = abc[hou_nl/10];P2 = ~0x01;break;
                                case 1:P0 = abc[hou_nl%10]&(0x7f|b);P2 = ~0x02;break;
                                case 2:P0 = abc[min_nl/10]|b;P2 = ~0x04;break;
                                case 3:P0 = abc[min_nl%10]&0x7f|b;P2 = ~0x08;break;
                                case 4:P0 = 0xc6;P2 = ~0x10;break;
                                case 5:P0 = abc[2];P2 = ~0x20;break;
                        }
                }
                        if(moshi == 5)
                {
                        switch(j)
                        {
                                case 0:P0 = abc[hou_nl/10];P2 = ~0x01;break;
                                case 1:P0 = abc[hou_nl%10]&(0x7f|b);P2 = ~0x02;break;
                                case 2:P0 = abc[min_nl/10];P2 = ~0x04;break;
                                case 3:P0 = abc[min_nl%10]&(0x7f|b);P2 = ~0x08;break;
                                case 4:P0 = 0xc6;P2 = ~0x10;break;
                                case 5:P0 = 0xc6;P2 = ~0x20;break;
                        }
                }
                j++;
                if(j > 5)j = 0;
                if(hou == hou_nl && min == min_nl && moshi<=2)
                {
                        if( Close_naozhong == 0 )
                         {
                           led = 0x01<<n;
                           n++;
                           if(n > 8)
                           n = 0;
                           switch(j)
                                {
                                        case 0:P0 = abc[hou/10]|b;P2 = ~0x01;break;
                                        case 1:P0 = abc[hou%10]&0x7f|b;P2 = ~0x02;break;
                                        case 2:P0 = abc[min/10]|b;P2 = ~0x04;break;
                                        case 3:P0 = abc[min%10]&0x7f|b;P2 = ~0x08;break;
                                        case 4:P0 = abc[sec/10]|b;P2 = ~0x10;break;
                                        case 5:P0 = abc[sec%10]|b;P2 = ~0x20;break;
                                }

                          }
                          if( Close_naozhong == 1 )
                          led = 0x00;
                 }
                 else
                 {
                         led = 0;
                         Close_naozhong = 0;
                        }

        }
}



GG%`PXRZG15J72~29QMI$NI.png (26.19 KB, 下載次數(shù): 93)

GG%`PXRZG15J72~29QMI$NI.png

電子時鐘仿真.rar

3.21 MB, 下載次數(shù): 41, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表