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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4387|回復(fù): 4
收起左側(cè)

數(shù)碼管電子鐘不能調(diào)時(shí),咋整啊!

[復(fù)制鏈接]
ID:221185 發(fā)表于 2017-7-20 20:54 | 顯示全部樓層 |閱讀模式
程序如下:

#include <STC12C2052AD.H> //STC頭文件

/**********************************************************************************************/
//“程序開發(fā)調(diào)試設(shè)置項(xiàng)”
#define DY_LI            9     //設(shè)置LED顯示的亮度(值域:1~9)
#define DY_DELAY        12     //設(shè)置每一個(gè)點(diǎn)顯示的時(shí)間長(zhǎng)度(1~20)
/**********************************************************************************************/
sbit    DY_KEY = P3 ^ 7; //按鍵1

sbit    DY_LED1_L1    =P3 ^ 0; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_L2    =P3 ^ 1; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_L3    =P3 ^ 2; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_L4    =P3 ^ 3; //設(shè)置LED點(diǎn)陣屏連接的I/O口

sbit    DY_LED1_H1    =P1 ^ 0; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H2    =P1 ^ 1; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H3    =P1 ^ 2; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H4    =P1 ^ 3; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H5    =P1 ^ 4; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H6    =P1 ^ 5; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H7    =P1 ^ 6; //設(shè)置LED點(diǎn)陣屏連接的I/O口
sbit    DY_LED1_H8    =P1 ^ 7; //設(shè)置LED點(diǎn)陣屏連接的I/O口

#define DY_P1M0SET        0x00 //設(shè)置I/O口工作方式//00000000(左到右,高到低位)
#define DY_P1M1SET        0xff //設(shè)置I/O口工作方式//00101000
#define DY_P3M0SET        0x00 //設(shè)置I/O口工作方式//00000000
#define DY_P3M1SET        0x00 //設(shè)置I/O口工作方式//10010100

bit PD;//秒點(diǎn)顯示標(biāo)志
unsigned char MENU;//菜單切換標(biāo)志位
data unsigned char  DY_PWM,bn, cou  = 0, TIME_YY,TIME_MO,TIME_DD,TIME_WW,TIME_HH,TIME_MM,TIME_SS;//設(shè)置時(shí)、分、秒存放區(qū)
data bit DAY_BIT = 0;//天數(shù)增加標(biāo)志位(用于日期進(jìn)位的啟動(dòng))
unsigned int aa;
unsigned char code disdata[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40 //無(wú)小數(shù)點(diǎn)數(shù)碼管段碼表(0~9)
};
/*********************************************************************************************/
void delay (unsigned int a){ // 用于點(diǎn)掃描的延時(shí)
    unsigned int i;
    while( a-- != 0){
        for(i = 0; i < DY_DELAY; i++);
    }                     
}
/*********************************************************************************************/

/*****************************************************************************/
void dis_off (void){
    P1 = ~DY_P1M1SET; //關(guān)所有顯示
    P3 = ~DY_P3M1SET;
    delay(10-DY_PWM);
}
/*********************************************************************************************/
void displayHH1 (unsigned char d){ //第1列橫向顯示程序
    unsigned char i;
    i = d & 0x01;
    if(i == 0x01){
        DY_LED1_L1 = 0;DY_LED1_H1 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x02;
    if(i == 0x02){
        DY_LED1_L1 = 0;DY_LED1_H2 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x04;
    if(i == 0x04){
        DY_LED1_L1 = 0;DY_LED1_H3 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x08;
    if(i == 0x08){
        DY_LED1_L1 = 0;DY_LED1_H4 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x10;
    if(i == 0x10){
        DY_LED1_L1 = 0;DY_LED1_H5 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x20;
    if(i == 0x20){
        DY_LED1_L1 = 0;DY_LED1_H6 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x40;
    if(i == 0x40){
        DY_LED1_L1 = 0;DY_LED1_H7 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x80;
    if(i == 0x80){
        DY_LED1_L1 = 0;DY_LED1_H8 = 1;}delay(DY_PWM);dis_off();
}
/*********************************************************************************************/
void displayHH2 (unsigned char d){ //第2列橫向顯示程序
    unsigned char i;
    i = d & 0x01;
    if(i == 0x01){
        DY_LED1_L2 = 0;DY_LED1_H1 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x02;
    if(i == 0x02){
        DY_LED1_L2 = 0;DY_LED1_H2 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x04;
    if(i == 0x04){
        DY_LED1_L2 = 0;DY_LED1_H3 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x08;
    if(i == 0x08){
        DY_LED1_L2 = 0;DY_LED1_H4 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x10;
    if(i == 0x10){
        DY_LED1_L2 = 0;DY_LED1_H5 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x20;
    if(i == 0x20){
        DY_LED1_L2 = 0;DY_LED1_H6 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x40;
    if(i == 0x40){
        DY_LED1_L2 = 0;DY_LED1_H7 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x80;
    if(i == 0x80){
        DY_LED1_L2 = 0;DY_LED1_H8 = 1;}delay(DY_PWM);dis_off();
                                
}
/*********************************************************************************************/
void displayHH3 (unsigned char d){ //第3列橫向顯示程序
    unsigned char i;
    i = d & 0x01;
    if(i == 0x01){
        DY_LED1_L3 = 0;DY_LED1_H1 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x02;
    if(i == 0x02){
        DY_LED1_L3 = 0;DY_LED1_H2 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x04;
    if(i == 0x04){
        DY_LED1_L3 = 0;DY_LED1_H3 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x08;
    if(i == 0x08){
        DY_LED1_L3 = 0;DY_LED1_H4 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x10;
    if(i == 0x10){
        DY_LED1_L3 = 0;DY_LED1_H5 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x20;
    if(i == 0x20){
        DY_LED1_L3 = 0;DY_LED1_H6 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x40;
    if(i == 0x40){
        DY_LED1_L3 = 0;DY_LED1_H7 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x80;
    if(i == 0x80){
        DY_LED1_L3 = 0;DY_LED1_H8 = 1;}delay(DY_PWM);dis_off();

}
/*********************************************************************************************/
void displayHH4 (unsigned char d){ //第4列橫向顯示程序
    unsigned char i;
    i = d & 0x01;
    if(i == 0x01){
        DY_LED1_L4 = 0;DY_LED1_H1 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x02;
    if(i == 0x02){
        DY_LED1_L4 = 0;DY_LED1_H2 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x04;
    if(i == 0x04){
        DY_LED1_L4 = 0;DY_LED1_H3 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x08;
    if(i == 0x08){
        DY_LED1_L4 = 0;DY_LED1_H4 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x10;
    if(i == 0x10){
        DY_LED1_L4 = 0;DY_LED1_H5 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x20;
    if(i == 0x20){
        DY_LED1_L4 = 0;DY_LED1_H6 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x40;
    if(i == 0x40){
        DY_LED1_L4 = 0;DY_LED1_H7 = 1;}delay(DY_PWM);dis_off();
    i = d & 0x80;
    if(i == 0x80){
        DY_LED1_L4 = 0;DY_LED1_H8 = 1;}delay(DY_PWM);dis_off();
}  
/*********************************************************************************************/
void diplay_data (unsigned char l,unsigned char d){
        switch (l){//顯示的列位置        
                case 1://            
                    displayHH1(d); //將顯示數(shù)據(jù)送入        
                    break;//        
                case 2://            
                    displayHH2(d); //將顯示數(shù)據(jù)送入        
                    break;//        
                case 3://            
                    displayHH3(d); //將顯示數(shù)據(jù)送入        
                    break;//        
                case 4://            
                    displayHH4(d); //將顯示數(shù)據(jù)送入        
                    break;//        
        }
}
/*********************************************************************************************/
bit IsLeapYear(void){    //計(jì)算本年是否是潤(rùn)年
    unsigned int a;
    a = 2000+TIME_YY;//加2000表示成完整的年
    if((a%4==0 && a%100!=0)||(a%400==0)){ //潤(rùn)年的計(jì)算公式
            return 1;//是潤(rùn)年返回1
        }else{
             return 0;//不是潤(rùn)年返回0
        }
}
/**********************************************************************************************/   
void month_day(void){  
    unsigned char mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
    TIME_DD++;//天加1
    TIME_WW++;//星期值加1
    if(TIME_WW > 7){
        TIME_WW = 1;//時(shí)期值限定
    }
    if(TIME_DD > mon_day[TIME_MO-1]){//檢查天是否大于當(dāng)月的最大值
        if(IsLeapYear()&&TIME_MO==2){ //計(jì)算本月是否是潤(rùn)年的2月份
            TIME_DD = 29;//如果是潤(rùn)年又是2月,則天為29
        }else{
            TIME_DD = 1; //否則就等于1
            TIME_MO++;//月加1
            if(TIME_MO > 12){
                TIME_MO = 1; //如果月大于12則月等于1
                TIME_YY++;//年加1 (公歷年無(wú)限積加)
            }
        }
    }
}

/*********************************************************************************************/

void xianshi()    {

                    for(aa=0;aa<1000;aa++){
                    diplay_data (3,disdata[TIME_MM/10]);
                    diplay_data (4,disdata[TIME_MM%10]);
                    if(PD){
                    diplay_data (1,disdata[TIME_HH/10]);
                    diplay_data (2,disdata[TIME_HH%10]);
                    }else{
                    diplay_data (1,disdata[TIME_HH/10]);
                    diplay_data (2,disdata[TIME_HH%10]+0x80);           
                         }
                         }                                   
                    for(aa=1000;aa<2000;aa++){
                    diplay_data (1,disdata[TIME_MO/10]);
                     diplay_data (2,disdata[TIME_MO%10]);
                    diplay_data (3,disdata[TIME_DD/10]);
                    diplay_data (4,disdata[TIME_DD%10]);
                            }
                        
                    for(aa=2000;aa<3000;aa++){
                     diplay_data (2,disdata[10]);               
                    diplay_data (3,disdata[TIME_WW]);
                    diplay_data (4,disdata[10]);
                    if(aa==3000)
                        aa=0;  
                          }
                        }                 

/*********************************************************************************************/
void init (void){ //上電初始化
    P1M0 = DY_P1M0SET;
    P1M1 = DY_P1M1SET;
    P3M0 = DY_P3M0SET;
    P3M1 = DY_P3M1SET;
    dis_off();
    DY_PWM = DY_LI;
    TMOD = 0x11;         // 定時(shí)/計(jì)數(shù)器0,1工作于方式1   
    TH0 = 0x3c;          // 預(yù)置產(chǎn)生50ms時(shí)基信號(hào)   
    TL0 = 0xb0;   
    TH1=0x3c;
    TL1=0xb0;
    EA = 1;    //中斷總開關(guān)
    ET0 = 1;             // 定時(shí)/計(jì)數(shù)器0允許中斷   
    TR0 = 1;             // 開閉定時(shí)/計(jì)數(shù)器0   
    ET1 = 1;             // 定時(shí)/計(jì)數(shù)器0允許中斷   
    TR1 = 1;             // 開閉定時(shí)/計(jì)數(shù)器0   
    TIME_DD = 19; //時(shí)間在首次使用的值,之后會(huì)在EEPROM自動(dòng)記錄上一天的值
    TIME_MO    = 7; //初始時(shí)間:2009年5月18日周一,20時(shí)13分40秒
    TIME_YY = 17;
    TIME_WW = 3;
    TIME_HH    = 22;
    TIME_MM = 40;
    TIME_SS = 0;
}
/*********************************************************************************************/
void main (void){ //主程序
    unsigned char s;
    init();
    MENU=0;
    s=0;
    aa=0;
    while (1){
                if(DAY_BIT == 1){ //檢查天數(shù)是否更新,是則計(jì)算公歷
            month_day();//計(jì)算公歷日期   
            DAY_BIT = 0;//計(jì)算完成后將日期變更標(biāo)志位置0
                     }
               if(MENU==0)    //顯示正常走時(shí)主界面
            xianshi();

            if(DY_KEY==0){
                EA = 0;    //中斷總開關(guān)
                TR1 = 0;             // 關(guān)閉定時(shí)/計(jì)數(shù)器
                s++;
                if(s>200){
                    s=0;MENU++;
                    while(DY_KEY==0){
                        diplay_data (1,disdata[TIME_HH/10]);
                        diplay_data (2,disdata[TIME_HH%10]);
                    }
                }
            }//長(zhǎng)短按鍵處理//長(zhǎng)按轉(zhuǎn)到MENU1
            if(DY_KEY==1 && s>10 && s<200){s=0;DY_PWM++;if(DY_PWM>4)DY_PWM=1;}//短按設(shè)置亮度
            
        }
        if(MENU==1){//設(shè)置時(shí)間:小時(shí)
            diplay_data (1,disdata[TIME_HH/10]);
            diplay_data (2,disdata[TIME_HH%10]);
            diplay_data (3,0x80);
            diplay_data (4,0x80);

            if(DY_KEY==0){

                s++;
                if(s>200){
                    s=0;MENU++;
                    while(DY_KEY==0){
                        diplay_data (3,disdata[TIME_MM/10]);
                        diplay_data (4,disdata[TIME_MM%10]);
                    }
                }
            }//長(zhǎng)短按鍵處理//長(zhǎng)按轉(zhuǎn)到MENU1
            if(DY_KEY==1 && s>10 && s<200){s=0;TIME_HH++;if(TIME_HH>23)TIME_HH=0;}//短按設(shè)置亮度

        }
        if(MENU==2){//設(shè)置時(shí)間:分鐘
            diplay_data (3,disdata[TIME_MM/10]+0x80);
            diplay_data (4,disdata[TIME_MM%10]+0x80);

            if(DY_KEY==0){
                s++;
                if(s>200){
                    s=0;MENU=0;
                    while(DY_KEY==0){
                        diplay_data (1,disdata[TIME_HH/10]);
                        diplay_data (2,disdata[TIME_HH%10]);
                        diplay_data (3,disdata[TIME_MM/10]);
                        diplay_data (4,disdata[TIME_MM%10]);
                    }
                }
            }//長(zhǎng)短按鍵處理//長(zhǎng)按轉(zhuǎn)到MENU1
            if(DY_KEY==1 && s>10 && s<200){s=0;TIME_MM++;TIME_SS=0;if(TIME_MM>59)TIME_MM=0;}//短按設(shè)置亮度
        
            }            
        }
/**********************************************************************************************/   
void tiem0(void) interrupt 1{   // T/C0中斷服務(wù)程序(產(chǎn)生50ms時(shí)基信號(hào))   
    cou++;                      // 軟計(jì)數(shù)器加1   
    if(cou > 19){                 // 計(jì)數(shù)值到100(1s)   
        cou = 0;               // 軟計(jì)數(shù)器清零   
        TIME_SS++;                 // 秒計(jì)數(shù)器加1(進(jìn)位10ms*100=1s)   
        PD =~ PD;                //秒點(diǎn)閃爍
        if(TIME_SS > 59){          // 秒計(jì)數(shù)值到60   
           
            TIME_SS = 0;           // 秒計(jì)數(shù)器清零   
            TIME_MM++;             // 分計(jì)數(shù)器加1(進(jìn)位60s=1m)  
            if(TIME_MM > 59){      // 分計(jì)數(shù)到60   
                TIME_MM = 0;       // 分計(jì)數(shù)器清零   
                TIME_HH++;         // 時(shí)計(jì)數(shù)器加1(進(jìn)位60m=1h)   
                if(TIME_HH > 23){  // 時(shí)計(jì)數(shù)到23   
                    TIME_HH = 0;   // 時(shí)計(jì)數(shù)器清零
                    DAY_BIT = 1;    //天增加標(biāo)志位

                }  
            }   
        }   
    }   
    TH0 = 0x3c;                // 重置定時(shí)常數(shù)   
    TL0 = 0xb0;   
}
/**********************************************************************************************/   
void tiem1(void) interrupt 3{   // T/C0中斷服務(wù)程序(產(chǎn)生50ms時(shí)基信號(hào))   
    TH1=0x3c;
    TL1=0xb0;
        aa++ ;
}
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-7-20 21:57 | 顯示全部樓層
本帖最后由 zl2168 于 2017-7-21 21:24 編輯

實(shí)例91  具有校正功能的時(shí)鐘1302(LCD1602顯示)
實(shí)例91 帶校正時(shí)鐘1302(LCD1602顯示).rar (52.68 KB, 下載次數(shù): 4)
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-7-20 21:58 | 顯示全部樓層
本帖最后由 zl2168 于 2017-7-20 23:00 編輯

實(shí)例93  具有校正功能的時(shí)鐘1302(LED數(shù)碼管顯示)
實(shí)例93 帶校正時(shí)分秒的時(shí)鐘1302(6位LED數(shù)碼管顯示).rar (732.75 KB, 下載次數(shù): 4)
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-7-20 21:59 | 顯示全部樓層
本帖最后由 zl2168 于 2017-7-20 22:58 編輯

實(shí)例94  模擬電子鐘(由80C51定時(shí)器產(chǎn)生秒時(shí)基)
實(shí)例94 模擬電子鐘(由80C51定時(shí)器產(chǎn)生秒時(shí)基).rar (43.05 KB, 下載次數(shù): 4)
回復(fù)

使用道具 舉報(bào)

ID:221185 發(fā)表于 2017-7-20 23:47 | 顯示全部樓層
謝謝!我去參考下,我的那個(gè)程序哪里有沖突,能幫忙看看嘛?謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看不卡一区二区三区 | 亚洲视频在线观看一区二区三区 | 久久y| 午夜影院在线观看 | 91精品国产91久久久久久最新 | 三级成人在线观看 | 91精品福利 | 自拍偷拍亚洲视频 | 亚洲成人精选 | 久久久亚洲一区 | 久久精品一区二区三区四区 | 羞羞视频免费观看 | 欧美激情在线精品一区二区三区 | a网站在线观看 | 国产成人精品一区二区三区四区 | 亚洲第一在线视频 | 亚洲色欧美另类 | 国产精品永久 | 精品在线免费看 | 亚洲精品一区av在线播放 | 九九综合 | 久久亚洲天堂 | 婷婷中文在线 | 日本高清视频在线播放 | www国产成人免费观看视频,深夜成人网 | 免费视频99| 日本三级做a全过程在线观看 | 福利国产 | 亚洲视频不卡 | 久久久精品久久 | 大乳boobs巨大吃奶挤奶 | 国产一区二区 | 免费观看成人性生生活片 | 日本精品一区二区三区在线观看 | 日本三级日产三级国产三级 | 亚洲精品在线视频 | 午夜免费成人 | 亚洲免费网| av在线免费不卡 | 国产精品久久欧美久久一区 | 欧美a在线 |