找回密码
 立即注册

QQ登录

只需一步,快速开始

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

书到用时方恨少啊,轻触开关没有反应

[复制链接]
跳转到指定楼层
楼主
网上搜的,自己做了个板,可程序写入,11,12脚接的轻触开关没有反应,大佬们给看看,指教一下。

#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};           //共阴数码管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)                        //根据月份来控制天数
        {
                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)         //延时函数        大约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译码器 辅助控制数码管 ******/                          
//        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直接控制数码管 *********/
        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译码器 辅助控制数码管 ******/        
//        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直接控制数码管 *********/
        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()                //控制“时、分、秒”与“年、月、日”的转换
{
        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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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