久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機24小時制時鐘顯示,且可調鬧鐘程序 [打印本頁]

作者: hualihushao    時間: 2019-5-9 15:24
標題: 單片機24小時制時鐘顯示,且可調鬧鐘程序
運用6位集成數碼管;蜂鳴器;4個按鍵開關;(我用的是4*4掃描按鍵的開關沒有改圖,不影響)
k1為模式按鍵,第一次按下調整時,第二次按下調整分,第三次按下調整秒;
K2為調鬧鐘(同K1);
k3為時間加一;
k4為時間減一;

proteus接發如下:


程序如下:

#include <reg51.h>

void delay(unsigned int i)
{
        unsigned int k;
        for(k = 0; k < i; k++);
}

unsigned char count = 0;
unsigned char miao = 0, min = 0, hour = 0;
unsigned char miao2 = 0, min2 = 0, hour2 = 0;
unsigned int b = 0, c = 0, d = 0; i = 0, bm = 0, btime = 0;

sbit keymode = P2^3;
sbit keyclock = P2^2;
sbit keyup = P2^1;
sbit keydown = P2^0;
sbit beep_b = P3^6;

void dispall();
void key_mode();
void key_clock();
void key_scan();
void key_scan2();
void set();
void set2();
void disp();
void disp2();
void beep();


void main()
{
        TMOD = 0x10;
        TH1 = (65536 - 50000)/256;                                        //重新設置T1計數初值高8位
        TL1 = (65536 - 50000)%256;                                        //重新設置T1計數初值低8位
        ET1 = 1;                                                                                                                //開放T1中斷允許
        EX1 = 1;
        IT1 = 1;
        EA = 1;                                                                                                                        //開放總中斷允許
        TR1 = 1;                                                                                                                //啟動T1開始計數
        while(1)
        {
                key_scan();
                key_scan2();
                disp();
                disp2();
                beep();
        }
}

void key_mode()
{
        if(!keymode)
        {
                delay(1000);
                if(!keymode)
                {
                        b++;
                        if(b > 3)
                                b = 0;
                }
                while(!keymode);
        }
}

void key_clock()
{
        if(!keyclock)
        {
                delay(1000);
                if(!keyclock)
                {
                        c++;
                        if(c > 3)
                        c = 0;
                }
                d++;
                while(!keyclock);
        }
}        

void key_scan()
{
        P2=0x0f;
        key_mode();
        if(b == 1)
        {
                c = 0;
                disp(); set();
        }
        else if(b == 2)
        {
                c = 0;
                disp(); set();
        }
        else if(b == 3)
        {
                c = 0;
                disp(); set();
        }
}

void key_scan2()
{
        P2=0x0f;
        key_clock();
        if(c == 1)
        {
                b = 0;
                disp2(); set2();
        }
        else if(c == 2)
        {
                b = 0;
                disp2(); set2();
        }
        else if(c == 3)
        {
                b = 0;
                disp2(); set2();
        }
}


void set()
{
                if(keyup == 0)                                                                //時間增加按鍵
                {
                        if(b == 1) {hour++;        if(hour > 23)        hour = 0;}
                        else if(b == 2) {min++; if(min > 59) min = 0;}
                        else if(b == 3) {miao++; if(miao > 59) miao = 0;}
                }
                while(!keyup);
               
                if(keydown == 0)                                                        //時間減少按鍵
                {
                        if(b == 1) {if(hour != 0) hour--; else hour = 23;}
                        else if(b == 2) {if(min != 0) min--; else min = 59;}
                        else if(b == 3) {if(miao != 0) miao--; else miao = 59;}                        
                }
                while(!keydown);        
}

void set2()
{
                if(keyup == 0)                                                                //時間增加按鍵
                {
                        if(c == 1) {hour2++;        if(hour2 > 23)        hour2 = 0;}
                        else if(c == 2) {min2++; if(min2 > 59) min2 = 0;}
                        else if(c == 3) {miao2++; if(miao2 > 59) miao2 = 0;}
                }
                while(!keyup);
               
                if(keydown == 0)                                                        //時間減少按鍵
                {
                        if(c == 1) {if(hour2 != 0) hour2--; else hour2 = 23;}
                        else if(c == 2) {if(min2 != 0) min2--; else min2 = 59;}
                        else if(c == 3) {if(miao2 != 0) miao2--; else miao2 = 59;}                        
                }
                while(!keydown);        
}

int timer() interrupt 3
{
        TH1 = (65536 - 50000)/256;                                        //重新設置T1計數初值高8位
        TL1 = (65536 - 50000)%256;                                        //重新設置T1計數初值低8位
        count++;                                                                                                                //50ms計數器加1
        if(count == 20)                                                                                        //1s時間到
        {
                count = 0;
                if(bm)
                {btime ++;
                }
                miao++;
                if(miao == 60)
                {
                        miao = 0;
                        min++;
                        if(min == 60)
                        {
                                min = 0;
                                hour++;
                                if(hour == 24) hour = 0;
                        }
                }
        }
}

void disp()
{
        unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        if(b == 1)
        {
                P1 = 0x3e; P0 = led[hour/10]; delay(100);
                P1 = 0x3d; P0 = led[hour%10]; delay(100);
        }
        else if(b == 2)
        {
                P1 = 0x3b; P0 = led[min/10]; delay(100);        
                P1 = 0x37; P0 = led[min%10]; delay(100);
        }
        else if(b == 3)
        {        P1 = 0x2f; P0 = led[miao/10]; delay(100);        
                P1 = 0x1f; P0 = led[miao%10]; delay(100);        
        }
        else if((b == 0) && (c == 0))
        {
                dispall();
        }
}

void disp2()
{
        unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        if(c == 1)
        {
                P1 = 0x3e; P0 = led[hour2/10]; delay(100);
                P1 = 0x3d; P0 = led[hour2%10]; delay(100);
        }
        else if(c == 2)
        {
                P1 = 0x3b; P0 = led[min2/10]; delay(100);        
                P1 = 0x37; P0 = led[min2%10]; delay(100);
        }
        else if(c == 3)
        {        P1 = 0x2f; P0 = led[miao2/10]; delay(100);        
                P1 = 0x1f; P0 = led[miao2%10]; delay(100);        
        }
        else if((b == 0) && (c == 0))
        {
                dispall();
        }
}

void dispall()
{
        unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        P1 = 0x2f; P0 = led[miao/10]; delay(100);        
        P1 = 0x1f; P0 = led[miao%10]; delay(100);        
        P1 = 0x3b; P0 = led[min/10];        delay(100);        
  P1 = 0x37; P0 = 0x80; delay(100); P0 = led[min%10]; delay(100);
        P1 = 0x3e; P0 = led[hour/10];        delay(100);
  P1 = 0x3d; P0 = 0x80; delay(100); P0 = led[hour%10]; delay(100);
}

void beep()
{
        if((hour==hour2) && (min==min2) && (miao==miao2) && (d != 0))                                                                                //計數10秒后 P3^6 輸出低電平,啟動蜂鳴器
        {
                bm = 1;
                beep_b = 0;
        }
        if(btime == 10)
        {
                beep_b = 1;
                bm = 0;
                btime = 0;
                d = 0;
        }
}



24小時制可調鬧鐘.rar

29.28 KB, 下載次數: 56, 下載積分: 黑幣 -5


作者: 51hei團團    時間: 2019-5-9 18:19
好東東,能分享下仿真工程文件嗎?
作者: liyezhao2019    時間: 2019-5-13 11:26
自己建立一個工程區仿真也可以 的啊
作者: 非入歐    時間: 2019-5-14 09:55
我是學生能問一下六個數碼管是怎么接的嗎?
作者: 2195538520    時間: 2019-6-16 23:47
數碼管顯示一部分是怎么回事吖




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩欧美在线免费观看 | 欧美日韩在线视频一区 | 久夜精品 | 久久成人综合 | 在线亚洲人成电影网站色www | 国产一区二区小视频 | 成人乱人乱一区二区三区软件 | 国产小网站 | 日本免费一区二区三区视频 | 天堂综合 | 高清黄色 | 91传媒在线观看 | 亚洲欧美在线一区 | 久久精品国产久精国产 | 久久av网 | 久久亚洲一区二区 | 成人免费网站在线 | 成人av鲁丝片一区二区小说 | 乱码av午夜噜噜噜噜动漫 | 国产一级淫片a直接免费看 免费a网站 | 在线观看www| 亚洲国产一区二区三区 | 成人欧美一区二区三区在线观看 | 日本啊v在线 | 91麻豆精品国产91久久久资源速度 | 少妇特黄a一区二区三区88av | 久久亚洲欧美日韩精品专区 | 国产成人免费视频网站高清观看视频 | 日韩成人免费 | 国产精品乱码一区二区三区 | 中文字幕在线中文 | 黄网站在线播放 | 人人干人人舔 | 91亚洲精品在线 | 日韩三级一区 | 精品产国自在拍 | 国产精品99久 | 欧美一级特黄aaa大片在线观看 | 精品久久久久久 | 日韩蜜桃视频 | 国产视频精品在线观看 |