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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1247|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

書到用時方恨少啊,輕觸開關(guān)沒有反應(yīng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1129664 發(fā)表于 2024-8-17 21:32 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
網(wǎng)上搜的,自己做了個板,可程序?qū)懭耄?1,12腳接的輕觸開關(guān)沒有反應(yīng),大佬們給看看,指教一下。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1 = P3^0 ;
sbit key0 = P3^1 ;                 
sbit key2 = P3^2 ;
sbit key3 = P3^3 ;

uchar s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};           //共陰數(shù)碼管0~9
uchar hour = 10 , min = 10 , sec = 0 ,day = 25 , month = 1 , year = 20 ;                                          
uchar a = 0 ,b = 0 , c = 0 , d = 0 , e = 0 ,f = 0 ;
uchar b_1 = 0 ,c_1 = 0 ;                  

void time0_server_() interrupt 1      
{
        TH0 = 0x4c ;
        TL0 = 0x00 ;
        a++;
        e = 2000 + year ;
        if(a == 20)                                       
        {
                a = 0 ;
                sec = sec + 1 ;
        }
        if(sec == 60)                                   
        {
                min = min + 1 ;
                sec = 0 ;
        }
        if(min == 60)                                 
        {
                hour = hour + 1 ;
                min = 0 ;
        }
        if(hour == 24)                                 
        {
                day = day + 1 ;
                hour = 0 ;        
        }
        switch(month)                        //根據(jù)月份來控制天數(shù)
        {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:if(day == 32)
                                {
                                        month = month + 1 ;
                                        day = 1 ;
                                }
                                break ;
                case 4:
                case 6:
                case 9:
                case 11:if(day == 31)
                                {
                                        month =month + 1;
                                        day = 1 ;
                                }
                                break ;
                case 2:if(e%400==0||e%4==0&&e%100!=0)
                            {
                                         if(day == 30)
                                        {
                                                month = month + 1 ;
                                                day = 1 ;        
                                        }
                                }
                                else if(day == 29)
                                         {
                                                 month = month + 1 ;
                                                day = 1 ;        
                                         }
                                break ;
        }
        if(month == 13)
        {
                year = year + 1 ;
                month = 1 ;
        }

}

void init_t0()
{
        TMOD = 0x01 ;           
        TH0 = 0x4C ;           
        TL0 = 0x00 ;            
        EA = 1 ;                  
        ET0 = 1 ;                           
        TR0 = 1 ;                                    
}

void delay(uint n)         //延時函數(shù)        大約1ms           
{
        uint i,j;
        for(i = 0 ; i < n ; i ++)
        {
                for(j = 0 ; j < 120 ; j ++);
        }        
}

void display1()                //顯示 “時、分、秒”                                 
{
        uchar t0 = 0 ,t1 = 0 , t2 = 0 , t3 = 0 , t4 = 0 , t5 = 0 ;
        t0 = hour / 10 ;                  
        t1 = hour % 10 ;                  
        t2 = min / 10 ;               
        t3 = min % 10 ;                          
        t4 = sec / 10 ;                        
        t5 = sec % 10 ;
/************* 74HC138譯碼器 輔助控制數(shù)碼管 ******/                          
//        P2 = 0x1c ;
//        P0 = s[t0] ;
//        delay(2) ;
//        P2 = 0x18 ;
//        P0 = s[t1] ;
//        delay(2) ;
//        P2 = 0x14 ;
//        P0 = 0x40 ;
//        delay(2) ;
//        P2 = 0x10 ;
//        P0 = s[t2] ;
//        delay(2) ;
//        P2 = 0x0c ;
//        P0 = s[t3] ;
//        delay(2) ;
//        P2 = 0x08 ;
//        P0 = 0x40 ;
//        delay(2) ;
//        P2 = 0x04 ;
//        P0 = s[t4] ;
//        delay(2) ;
//        P2 = 0x00 ;
//        P0 = s[t5] ;
        delay(2) ;
/*********** P2直接控制數(shù)碼管 *********/
        P2 = 0x7f ;                                 
        P0 = s[t0] ;               
        delay(1) ;                        
        P2 = 0xbf ;                                 
        P0 = s[t1] ;               
        delay(1) ;
        P2 = 0xdf ;                        
        P0 = 0x40 ;                        
        delay(1) ;
        P2 = 0xef ;                        
        P0 = s[t2] ;                          
        delay(1) ;
        P2 = 0xf7 ;                                 
        P0 = s[t3] ;                        
        delay(1) ;
        P2 = 0xfb ;                                 
        P0 = 0x40 ;                                
        delay(1) ;
        P2 = 0xfd ;                                
        P0 = s[t4] ;                        
        delay(1) ;
        P2 = 0xfe ;                        
        P0 = s[t5] ;               
        delay(1) ;        
}

void display2()           //顯示 “年、月、日”
{
        uchar t0 = 0 ,t1 = 0 , t2 = 0 , t3 = 0 , t4 = 0 , t5 = 0 ;
        t0 = year / 10 ;                  
        t1 = year % 10 ;                  
        t2 = month / 10 ;               
        t3 = month % 10 ;                          
        t4 = day / 10 ;                        
        t5 = day % 10 ;        
        /************* 74HC138譯碼器 輔助控制數(shù)碼管 ******/        
//        P2 = 0x1c ;
//        P0 = s[t0] ;
//        delay(2) ;
//        P2 = 0x18 ;
//        P0 = s[t1] ;
//        delay(2) ;
//        P2 = 0x14 ;
//        P0 = 0x40 ;
//        delay(2) ;
//        P2 = 0x10 ;
//        P0 = s[t2] ;
//        delay(2) ;
//        P2 = 0x0c ;
//        P0 = s[t3] ;
//        delay(5) ;
//        P2 = 0x08 ;
//        P0 = 0x40 ;
//        delay(2) ;
//        P2 = 0x04 ;
//        P0 = s[t4] ;
//        delay(2) ;
//        P2 = 0x00 ;
//        P0 = s[t5] ;
//        delay(2) ;
/*********** P2直接控制數(shù)碼管 *********/
        P2 = 0x7f ;                                 
        P0 = s[t0] ;               
        delay(1) ;                        
        P2 = 0xbf ;                                 
        P0 = s[t1] ;               
        delay(1) ;
        P2 = 0xdf ;                        
        P0 = 0x40 ;                        
        delay(1) ;
        P2 = 0xef ;                        
        P0 = s[t2] ;                          
        delay(1) ;
        P2 = 0xf7 ;                                 
        P0 = s[t3] ;                        
        delay(1) ;
        P2 = 0xfb ;                                 
        P0 = 0x40 ;                                
        delay(1) ;
        P2 = 0xfd ;                                
        P0 = s[t4] ;                        
        delay(1) ;
        P2 = 0xfe ;                        
        P0 = s[t5] ;               
        delay(1) ;                                
}

void KEY0()                //控制按鈕2的位移
{
        if(key0 == 0 && c == 0)
        {
                c = 1 ;
        }
        if(key0 == 1 && c == 1)
        {
                c = 0 ;
                c_1 = c_1 + 1 ;
        }
        if(c_1 == 4)
        {
                c_1 = 0 ;
        }
}

void KEY1()                  //控制 "秒"、“分”、“時”、“天”、“月”、“年”        的加1
{
        switch(c_1)
        {
                case 1: if(b_1 == 0)
                                {
                                         if(key1 == 0 && d == 0)
                                        {
                                                d = 1 ;
                                        }
                                        if(key1 == 1 && d == 1)
                                        {
                                                d = 0 ;
                                                sec = sec + 1 ;
                                        }
                                }
                                else if(b_1 == 1)
                                {
                                        if(key1 == 0 && d == 0)
                                        {
                                                d = 1 ;
                                        }
                                        if(key1 == 1 && d == 1)
                                        {
                                                d = 0 ;
                                                day = day + 1 ;
                                        }        
                                }
                                break ;
                case 2: if(b_1 == 0)
                                {
                                        if(key1 == 0 && d == 0)
                                        {
                                                d = 1 ;
                                        }
                                        if(key1 == 1 && d == 1)
                                        {
                                                d = 0 ;
                                                min = min + 1 ;
                                        }
                                }
                                else if(b_1 == 1)
                                {
                                        if(key1 == 0 && d == 0)
                                        {
                                                d = 1 ;
                                        }
                                        if(key1 == 1 && d == 1)
                                        {
                                                d = 0 ;
                                                month = month + 1 ;
                                        }
                                }
                                break ;
                case 3: if(b_1 == 0)
                                {
                                        if(key1 == 0 && d == 0)
                                        {
                                                d = 1 ;
                                        }
                                        if(key1 == 1 && d == 1)
                                        {
                                                d = 0 ;
                                                hour = hour + 1 ;
                                        }
                                }
                                else if(b_1 == 1)
                                {
                                        if(key1 == 0 && d == 0)
                                        {
                                                d = 1 ;
                                        }
                                        if(key1 == 1 && d == 1)
                                        {
                                                d = 0 ;
                                                year = year + 1 ;
                                        }
                                }
                                break ;
        }
}

void KEY2()                  //控制 "秒"、“分”、“時”、“天”、“月”、“年”        的減1
{
        switch(c_1)
        {
                case 1: if(b_1 == 0)
                                {
                                         if(key2 == 0 && f == 0)
                                        {
                                                f = 1 ;
                                        }
                                        if(key2 == 1 && f == 1)
                                        {
                                                f = 0 ;
                                                sec = sec - 1 ;        
                                                if(sec == 255)
                                                {
                                                        sec = 59 ;
                                                }
                                        }
                                }
                                else if(b_1 == 1)
                                {
                                        if(key2 == 0 && f == 0)
                                        {
                                                f = 1 ;
                                        }
                                        if(key2 == 1 && f == 1)
                                        {
                                                f = 0 ;
                                                day = day - 1 ;
                                                if(day <= 1)
                                                {
                                                        day = 1 ;
                                                }
                                        }
                                }
                                break ;
                case 2: if(b_1 == 0)
                                {
                                        if(key2 == 0 && f == 0)
                                        {
                                                f = 1 ;
                                        }
                                        if(key2 == 1 && f == 1)
                                        {
                                                f = 0 ;
                                                min = min - 1 ;
                                                if(min == 255)
                                                {
                                                        min = 0 ;
                                                }
                                        }
                                }
                                else if(b_1 == 1)
                                {
                                        if(key2 == 0 && f == 0)
                                        {
                                                f = 1 ;
                                        }
                                        if(key2 == 1 && f == 1)
                                        {
                                                f = 0 ;
                                                month = month - 1 ;
                                                if(month <= 1)
                                                {
                                                        month = 1 ;
                                                }
                                        }
                                }
                                break ;
                case 3: if(b_1 == 0)
                                {
                                        if(key2 == 0 && f == 0)
                                        {
                                                f = 1 ;
                                        }
                                        if(key2 == 1 && f == 1)
                                        {
                                                f = 0 ;
                                                hour = hour - 1 ;
                                                if(hour == 255)
                                                {
                                                        hour = 0 ;
                                                }
                                        }
                                }
                                else if(b_1 == 1)
                                {
                                        if(key2 == 0 && f == 0)
                                        {
                                                f = 1 ;
                                        }
                                        if(key2 == 1 && f == 1)
                                        {
                                                f = 0 ;
                                                year = year - 1 ;
                                                if(year == 255)
                                                {
                                                        year = 0 ;
                                                }
                                        }
                                }
                                break ;
        }
}
void KEY3()                //控制“時、分、秒”與“年、月、日”的轉(zhuǎn)換
{
        if(key3 == 0 && b == 0)
        {
                b = 1 ;
        }
        if(key3 == 1 && b == 1)
        {
                b = 0 ;
                b_1 = b_1 + 1;
        }
        if(b_1 == 2)
        {
                b_1 = 0 ;
        }
        switch(b_1)
        {
                case 0: display1() ;
                                break ;
                case 1: display2() ;
                                break ;
        }
}

void main()
{
        init_t0();
        while(1)
        {
                KEY0();
                KEY1();
                KEY2();
                KEY3();
        }        
}


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

使用道具 舉報

沙發(fā)
ID:876606 發(fā)表于 2024-8-18 16:00 | 只看該作者
在PROTEUS 仿真中可以使用, 先按K3選擇  ( “秒”,“分”,“小時” 輪流切換),K2增加,K4減少。
回復(fù)

使用道具 舉報

板凳
ID:857072 發(fā)表于 2024-8-18 16:07 來自手機(jī) | 只看該作者
89c52應(yīng)該不能設(shè)置內(nèi)部上拉你需要自己加上拉電阻。
回復(fù)

使用道具 舉報

地板
ID:712097 發(fā)表于 2024-8-19 11:20 | 只看該作者
定時器中斷里面代碼耗費太多時間了,可能還沒執(zhí)行到按鍵掃描又進(jìn)入中斷了。定時器里只做最基礎(chǔ)的運算如狀態(tài)字累加,其它放在while(1)循環(huán)里面執(zhí)行。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日韩欧美一区二区三区 | 奇米影视在线 | 国产精品成人免费 | 精品国产欧美 | 97视频在线观看网站 | 亚洲精品在线视频 | 欧美日韩不卡合集视频 | 欧美色综合网 | 国产福利视频网站 | 亚洲一区 | 一区二区三区免费在线观看 | 日韩精品在线观看一区二区三区 | 高清国产午夜精品久久久久久 | 久草新在线 | 精品亚洲一区二区三区 | www.操.com| 黄色一级片视频 | 久久精品亚洲一区二区三区浴池 | 国产成人精品999在线观看 | 毛片毛片毛片毛片毛片 | 一区视频在线 | 亚洲欧美日韩在线一区二区 | 午夜欧美 | 欧美日批| 99成人在线视频 | 成人性生交大片免费看中文带字幕 | 超碰电影 | 婷婷狠狠 | 国产免费一级片 | 精品久久精品 | 日韩在线免费 | 国产精品亚洲一区 | 日韩免费一区二区 | 亚洲精品电影在线观看 | 日韩欧美在线免费观看 | 国产综合久久久久久鬼色 | 久久久久久国产精品 | 国产精品欧美一区二区 | 国产亚洲日本精品 | 欧美日韩国产综合在线 | 欧美黄色一级毛片 |