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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1926|回復: 2
收起左側

單片機萬年歷,希望能在我寫的程序的基礎上修改 //STC89C52 LED1602

[復制鏈接]
ID:709387 發表于 2020-3-21 18:26 | 顯示全部樓層 |閱讀模式
10黑幣
能顯示星期,顯示在右上角,并且能修改它;現在情況是用按鍵修改鬧鐘后,時間到了,卻不會響;很煩這個;還有就是希望能間歇響蜂鳴器,現在是長響;話不多說,各位大佬請看程序:


# include <reg52.h>

#define  uchar unsigned char
#define  uint  unsigned int                //宏定義
/********************************
        腳位定義
********************************/
sbit rs = P3^5;               //寫命令/數據端
sbit en = P3^4;               //使能
sbit rw = P3^6;               //led1602讀命令/數據端
sbit we = P2^7;               //數碼管位選
sbit du = P2^7;               //數碼管段選
sbit S2 = P3^0;            
sbit S3 = P3^1;
sbit S4 = P3^2;
sbit S5 = P3^3;               //獨立鍵盤四個按鍵腳位
sbit fm = P2^3;               //蜂鳴器腳位

uchar count, S2num;    //定時器,修改按鍵次數,
uchar hour = 7,        //時
       min = 59,       //分
       sec = 55;           //秒         時間
uint nian = 2020,      //年
       yue = 3,        //月
        ri = 19;       //日                日期
uchar clock,
     hour1 = 8,        //時
      min1 = 0;               //分         鬧鐘
//                  星期一↓ 二↓ 三↓ 四↓ 五↓ 六↓ 日↓
uchar X[] = {"MON,TUE,MED,THU,FRI,SAT,SUN"};//星期循環
uchar code table[] =  "2020-03-19";                    //注意:修改這里必須先修改↑ uchar ↑,↓↓↓↓
uchar code table1[] = "07:59:55  C08:00";   //       否則,時間不會跟著這里走
/********************************************
                        延時函數         
********************************************/
void delay(uint z)//長延時函數                  
{
        uint x, y;
        for(x = z; x > 0;x --)
        for (y = 110; y > 0; y --);
}
/********************************************
                        寫命令函數         
********************************************/
void write_com(uchar com)     
{
        rs = 0;
        P0 = com;
        delay(5);
        en = 1;
        delay(5);
        en = 0;
}
/********************************************
                     寫數據函數                  
********************************************/
void write_dat(uchar dat)   
{
        rs = 1;
        P0 = dat;
        delay(5);
        en = 1;
        delay(5);
        en = 0;
}
/********************************************
                         初始化函數         
********************************************/
void init()                                       
{
        uchar num;
        rw =0;
        en = 0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        for(num = 0; num < 10; num ++)        
        write_dat(table[num]);
        write_com(0x80 + 0x40);
        for(num = 0; num < 16; num ++)        
        write_dat(table1[num]);
        TMOD = 0x01;
        TH0 = (65536 - 50000) / 256;     //裝定時器初值
        TL0 = (65536 - 50000) % 256;
        EA = 1;
        ET0 = 1;
        TR0 = 1;
}
/********************************************
                          定時器函數         
********************************************/
void timer0() interrupt 1                        
{
        TH0 = (65536 - 50000) / 256;//再次裝定時器初值
        TL0 = (65536 - 50000) % 256;
        count ++;
}
/********************************************
                          時分秒 + 鬧鐘函數
********************************************/
void write_sfm(uchar add, uchar date)         
{
        uchar shi, ge;
        shi = date / 10;
        ge = date % 10;
        write_com(0x80 + 0x40 + add);  //時間 / 鬧鐘顯示的位置
        write_dat(0x30 + shi);
        write_dat(0x30 + ge);
}
/********************************************
                           年月日函數
********************************************/
void write_nyr(uint add, uint date)
{                                           //這里不能用uchar,uchar數字最多只有255,顯示不全年份
        uint qian, bai, shi, ge;
        qian = date / 1000;
        bai = date % 1000 / 100;
        shi = date % 100 / 10;
        ge = date % 10;        
        write_com(0x80 + add);                  
        if (add == 0)                                    //年顯示的位置
        {
                write_dat(0x30 + qian);
                write_dat(0x30 + bai);      
                write_dat(0x30 + shi);
                write_dat(0x30 + ge);
         }
        if(add == 5)                                        //月顯示的位置
        {                        
                write_dat(0x30 + shi);
                write_dat(0x30 + ge);
        }
        if(add == 8)                                    //日顯示的位置
        {        
                write_dat(0x30 + shi);                        
                write_dat(0x30 + ge);
        }
}
/********************************************
                          星期函數
********************************************/
void write_xq(uchar add, uchar date)         
{
        uchar ge;
        ge = date % 10;
        write_com(0x80 + add);                  //星期顯示的位置                        
        write_dat(0x30 + ge);
}
/************************************************************
                日期時間自加函數 + 插入的鬧鐘函數
*************************************************************/
void write_shijian()
{
        if(count == 20)                    //定時1秒
        {
                count = 0;
                sec ++;
                if(sec == 60)
                {
                        sec = 0;                                          
                        min ++;                                
                        if(min == 60)
                        {
                                min = 0;
                                hour ++;
/*******↓*****↓*****插入鬧鐘*****↓*****↓*******/
                                if(hour == hour1 & min == min1)         //當時間‘時’‘分’==鬧鐘‘時’‘分’時,蜂鳴器打開
                                {
                                        fm = 0;                                                 //fm = 0時,蜂鳴器打開,fm = 1時,蜂鳴器關閉
                                }
/**********↑***↑***↑***↑***↑***↑***↑***********/
                                if(hour == 24)
                                {
                                        hour = 0;
                                        ri ++;
                                        if(ri == 31)
                                        {
                                                ri = 1;
                                                yue ++;
                                                if(yue == 13)
                                                {
                                                        yue = 1;
                                                        nian ++;
                                                        if(nian == 2100)
                                                        {
                                                                nian = 0;
                                                                yue = 0;
                                                                ri = 0;
                                                                hour = 0;
                                                                min = 0;
                                                                sec = 0;
                                                        }
                                                        write_nyr(0, nian);//年份送回LED屏幕顯示
                                                }
                                                write_nyr(5, yue);         //月份送回LED屏幕顯示
                                        }
                                        write_nyr(8, ri);     //天數送回LED屏幕顯示
                                }
                                write_sfm(0, hour);           //小時送回LED屏幕顯示
                        }
                        write_sfm(3, min);                //分鐘送回LED屏幕顯示
                 }
                write_sfm(6, sec);                  //秒送回LED屏幕顯示                                   
        }
}
/*****************函數聲明********************/
void Key();
/********************************************
                           主函數
********************************************/
void main()               
{
        init();               
        while(1)
        {                        
        Key();                         //插入按鍵函數               
        write_shijian();
        }        
}


/********************************************
                                  按鍵函數
********************************************/
void Key()                       
{
/***************插入停止鬧鐘按鍵設置************/
        if(fm == 0)                        //鬧鐘是撿來的,到處插入^_^
        {
                if(S5 == 0)
                {
                        delay(5);
                        if(S5 == 0)
                        fm = 1;
                }
        }
/***********修改日期 + 時間 + 鬧鐘按鍵設置************/
        if(S2 == 0)                                                //按下修改按鍵
        {
                delay(25);                                         //軟件消抖
                if(S2 == 0)                                        //確認按下
                 {
                         S2num ++;                                //按鍵次數增加                                            
                        while(!S2);                                //松開按鍵
                        TR0 = 0;                                //關閉定時器
                        write_com(0x0f);                //打開光標且閃爍
                        if(S2num == 1)               
                                write_com(0x80 + 0x40 + 7);        //修改時間秒針數
                        if(S2num == 2)        
                                write_com(0x80 + 0x40 + 4);        //修改時間分鐘數
                        if(S2num == 3)        
                                write_com(0x80 + 0x40 + 1);        //修改時間小時數
                        if(S2num == 4)        
                                write_com(0x80 + 0X40 + 12);//修改鬧鐘小時數
                        if(S2num == 5)        
                                write_com(0x80 + 0X40 + 15);//修改鬧鐘分鐘份
                        if(S2num == 6)        
                                write_com(0x80 + 3);                //修改日期年份
                        if(S2num == 7)        
                                write_com(0x80 + 6);                //修改日期月份
                        if(S2num == 8)        
                                write_com(0x80 + 9);                //修改日期天數
                        if(S2num == 9)
                        {        
                                S2num = 0;                            //修改按鍵次數清零
                                write_com(0x0c);            //關閉光標且停止閃爍
                                TR0 = 1;                            //打開定時器
                        }   
                }
        }
/*************增加日期 + 時間 + 鬧鐘按鍵設置**************/
        if(S2num != 0)                                        //按下修改按鍵,取消修改、增加和減少按鍵才有效
        {
                if(S5 == 0)                                        //取消修改按鍵(僅在S2按下有效)
                {                                         
                        delay(25);
                        if(S5 == 0)
                        S2num = 0;                                //修改按鍵次數清零
                           write_com(0x0c);                //關閉光標且停止閃爍
                        TR0 = 1;                                //打開定時器
                }               
                if(S3 == 0)                                        //增加鍵按下
                {
                        delay(25);                                  //軟件消抖
                        if(S3 == 0)                 
                        {
                                while(!S3);                        //確定按鍵按下
/********************時間*************************/
                                if(S2num == 1)
                                {
                                        sec ++;
                                        if(sec == 60)
                                        sec = 0;
                                        write_sfm(6, sec);
                                        write_com(0x80 + 0x40 + 7);           //秒
                                }
                                if(S2num == 2)
                                {
                                        min ++;
                                        if(min == 60)
                                        min = 0;
                                        write_sfm(3, min);
                                        write_com(0x80 + 0x40 + 4);            //分
                                }
                                if(S2num == 3)
                                {
                                        hour ++;
                                        if(hour == 24)
                                        hour = 0;
                                        write_sfm(0, hour);
                                        write_com(0x80 + 0x40 + 1);                 //時
                             }
/********************鬧鐘*************************/
                                if(S2num == 4)
                                {
                                        hour1 ++;
                                        if(hour1 == 24)
                                        hour1 = 0;
                                        write_sfm(11, hour1);
                                        write_com(0x80 + 0x40 + 12);         //時
                             }
                                if(S2num == 5)
                                {
                                        min1 ++;
                                        if(min1 == 60)
                                        min1 = 0;
                                        write_sfm(14, min1);
                                        write_com(0x80 + 0x40 + 15);         //分
                             }
/********************日期*************************/
                                if(S2num == 6)
                                {
                                        nian ++;
                                        if(nian == 2101)
                                        nian = 1999;
                                        write_nyr(0, nian);
                                        write_com(0x80 + 3);                      //年
                             }
                                if(S2num == 7)
                                {
                                        yue ++;
                                        if(yue == 13)
                                           yue = 1;
                                        write_nyr(5, yue);
                                        write_com(0x80 + 6);                      //月
                             }
                                if(S2num == 8)
                                {
                                        ri ++;
                                        if(ri == 31)
                                        ri = 1;
                                        write_nyr(8, ri);
                                        write_com(0x80 + 9);                       //日
                             }
                     }
            }
/***********減少日期 + 時間 + 鬧鐘按鍵設置******************/
                 if(S4 == 0)                                               //減少鍵按下
                 {
                        delay(25);
                        if(S4 == 0)
                        {
                                while(!S4);                                        //確定按鍵按下
/********************時間*************************/
                                if(S2num == 1)
                                {
                                        sec --;
                                        if(sec == -1)
                                        sec = 59;
                                        write_sfm(6, sec);
                                        write_com(0x80 + 0x40 + 7);           //秒
                                }
                                if(S2num == 2)
                                {
                                        min --;
                                        if(min == -1)
                                        min = 59;
                                        write_sfm(3, min);
                                        write_com(0x80 + 0x40 + 4);            //分
                                }
                                if(S2num == 3)
                                {
                                        hour --;
                                        if(hour == -1)
                                        hour = 23;
                                        write_sfm(0, hour);
                                        write_com(0x80 + 0x40 + 1);                 //時
                            }
/********************鬧鐘*************************/
                                if(S2num == 4)
                                {
                                        hour1 --;
                                        if(hour1 == -1)
                                        hour1 = 23;
                                        write_sfm(11, hour1);
                                        write_com(0x80 + 0x40 + 12);    //時
                                }
                                if(S2num == 5)
                                {
                                        min1 --;
                                        if(min1 == -1)
                                        min1 = 59;
                                        write_sfm(14, min1);
                                        write_com(0x80 + 0x40 + 15);          //分
                                }
/********************日期*************************/
                                if(S2num == 6)
                                {
                                        nian --;
                                        if(nian == 1998)
                                        nian = 2100;
                                        write_nyr(0, nian);
                                        write_com(0x80 + 3);              //年        
                             }
                                if(S2num == 7)
                                {
                                        yue --;
                                        if(yue == 0)
                                        yue = 12;
                                        write_nyr(5, yue);
                                        write_com(0x80 + 6);                     //月        
                             }
                                if(S2num == 8)
                                {
                                        ri --;
                                        if(ri == 0)
                                        ri = 30;
                                        write_nyr(8, ri);
                                        write_com(0x80 + 9);                       //日
                             }
                    }
               }
          }
}

回復

使用道具 舉報

ID:709387 發表于 2020-3-21 20:49 | 顯示全部樓層
呃,抱歉,沒說清楚,是現在不能顯示星期,想顯示星期,希望能有大神幫忙,
回復

使用道具 舉報

ID:709387 發表于 2020-4-28 09:00 | 顯示全部樓層
可能是我寫得代碼不容易看懂吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费成人高清在线视频 | 中国大陆高清aⅴ毛片 | 风间由美一区二区三区在线观看 | 成人av免费在线观看 | 国产成人精品一区二区三区 | 黄网站在线播放 | 毛片一区二区 | 国产日韩精品视频 | 成人看片在线观看 | 久久久免费电影 | 91av视频在线播放 | 亚洲精品成人网 | 欧美一区二区三区 | 97久久久久久 | 日韩中文一区二区三区 | 天堂视频免费 | 久久精品| 久久久国产一区二区三区 | 亚洲欧美一区二区在线观看 | 国产精品视频不卡 | 日韩中文字幕 | 中文字幕91av | 日本精品视频在线观看 | 精品国产乱码久久久久久牛牛 | 国产精品海角社区在线观看 | 国产一区欧美 | 国产成人av一区二区三区 | 韩日精品视频 | 我爱操 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 69福利影院 | 日本一二三区电影 | 日韩一级精品视频在线观看 | 亚洲成人免费 | 超碰日本 | 好好的日在线视频 | 国产成人精品一区二区三区视频 | 欧美精品久久久 | 国产精品久久久久久久久免费高清 | 色一情一乱一伦一区二区三区 | 91一区二区|