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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機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

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2019-5-9 18:19 | 只看該作者
好東東,能分享下仿真工程文件嗎?
回復

使用道具 舉報

板凳
ID:448556 發表于 2019-5-13 11:26 | 只看該作者
自己建立一個工程區仿真也可以 的啊
回復

使用道具 舉報

地板
ID:537650 發表于 2019-5-14 09:55 | 只看該作者
我是學生能問一下六個數碼管是怎么接的嗎?
回復

使用道具 舉報

5#
ID:564003 發表于 2019-6-16 23:47 | 只看該作者
數碼管顯示一部分是怎么回事吖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲综合日韩精品欧美综合区 | 日韩欧美中文字幕在线观看 | a毛片 | 久久黄色精品视频 | 日韩视频免费 | 国产精品无码久久久久 | 久久蜜桃资源一区二区老牛 | 在线一区二区三区 | 成人免费淫片aa视频免费 | 视频在线观看一区 | 在线中文一区 | 亚洲国产片 | 欧美最猛黑人xxxx黑人 | 在线观看av不卡 | 精品视频一区二区三区在线观看 | aa级毛片毛片免费观看久 | 欧美专区在线 | 免费色网址 | 99在线免费视频 | 夜夜爽99久久国产综合精品女不卡 | 在线视频一区二区 | 久久久久无码国产精品一区 | 亚洲福利精品 | 国产欧美一区二区三区另类精品 | 久久精品亚洲精品国产欧美 | 日本人麻豆 | 国产精品久久久久久久7电影 | 黄色毛片视频 | 在线免费观看毛片 | 精品人伦一区二区三区蜜桃网站 | 日韩视频在线观看中文字幕 | 91看片视频| 久久国产精品久久久久久久久久 | 午夜精品一区 | 久草视频在线播放 | 国产毛片视频 | 国产一区二区精品在线观看 | 日韩中文字幕在线观看 | 欧美中文字幕一区二区 | www.亚洲免费 | 婷婷丁香在线视频 |