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

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

QQ登錄

只需一步,快速開始

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

仿制單片機(jī)+LCD19264+ds3231大數(shù)字電子鐘 Proteus仿真程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


19264 加3231電子鐘程序整合自論壇大神


以下粘貼部分代碼
*系統(tǒng)頭文件--------------------------------------------------------------------*/
#include <reg52.h>
#include <absacc.h>
#include "MODEL.h"
#include "LCM19264.h"
#include "ds3231.h"
#include "DS18B20.h"
#include "nongli.h"
//#include "ds1302.h"
/*定義按鍵----------------------------------------------------------------------*/
sbit K1  = P3^2;  //按鍵K1-設(shè)置
sbit K2  = P3^3;  //按鍵K2-確認(rèn)、返回
sbit K3  = P3^4;  //按鍵K3-加
sbit K4  = P3^5;  //按鍵K4-減
//sbit K5  = P1^3;
/************************函數(shù)聲明***********************************************/
void DelayM(uint);
//void ds_w(void);
uchar m,date,month,year,hour,minute,second;
void Conver_week(bit c,uchar year,uchar month,uchar day);
/*-----------------------------定義全局變量------------------------------*/
bit q=0, w=0;    //調(diào)時(shí)標(biāo)志位
unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,moontemp1,moontemp2;//定義時(shí)間映射全局變量(專用寄存器)


uchar Htemp1,Htemp2,Mtemp1,Mtemp2,Stemp1,Stemp2;




void displaytime(void)
{
        
   /* year=read_time(0x8d);//調(diào)用1302時(shí)鐘數(shù)據(jù)中的年數(shù)據(jù),從地址0x8d中
        ShowChar(0,0,'2');
        ShowChar(0,1,'0');
        ShowChar(0,2,(year/16+0x30));        
        ShowChar(0,3,(year%16+0x30));
        ShowHZ(0,2,10);                 //年
        
        month=read_time(0x89);//調(diào)用1302時(shí)鐘數(shù)據(jù)中的月數(shù)據(jù),從地址0x89中
        ShowChar(0,6,(month/16+0x30));         
        ShowChar(0,7,(month%16)+0x30);
        //ShowChar(0,4,(Time[6]/16));
        //ShowChar(0,5,(Time[6]%16));
        ShowHZ(0,4,11);                 //月
        
        date=read_time(0x87);//從1302芯片中讀取日數(shù)據(jù),從地址0x87中
        ShowChar(0,10,(date/16+0x30));
        ShowChar(0,11,(date%16+0x30));
        //ShowChar(0,8,(Time[6]/16));
        //ShowChar(0,9,(Time[6]%16));
        ShowHZ(0,6,12);                 //日


        //小時(shí)
        hour = read_time(0x85);
        //if((hour/16)==0){Show1632(1,0,11);}
        //        else        {Show1632(1,0,(hour/16));}        //小時(shí)十位
        Show1632(1,0,(hour/16));
        Show1632(1,1,(hour%16));                                        //小時(shí)個(gè)位
        Show1632(1,2,10);                                                //時(shí)鐘分隔符號(hào)":"
        //分鐘
        minute = read_time(0x83);
        Show1632(1,3,(minute/16));                                        //分鐘十位
        Show1632(1,4,(minute%16));                                        //分鐘個(gè)位
        ShowSZ(2,5,10);                                                //時(shí)鐘分隔符號(hào)":"        
        //秒鐘
        second = read_time(0x81);
        ShowSZ(2,6,(second/16));                                        //秒鐘十位
        ShowSZ(2,7,(second%16));                                        //秒鐘個(gè)位
        
        ShowHZ(1,5,13);//星
        ShowHZ(1,6,14);//期
        
        dd = read_time(0x87);//日
        mo = read_time(0x89);//月
        yy = read_time(0x8d);//年
        Conver_week(0,yy,mo,dd);//調(diào)用公歷換算星期子函數(shù)
    //sel=week;//week是公歷轉(zhuǎn)換星期子函數(shù)的運(yùn)行結(jié)果,結(jié)果為0-6,0是星期日
        ShowHZ(1,7,((week)-1));//顯示位置
           if(week==0)
           ShowHZ(1,7,12);    //0=星期日 */        
    year=read_random(DS3231_YEAR);//調(diào)用3231時(shí)鐘數(shù)據(jù)中的年數(shù)據(jù),從地址0x8d中
        ShowChar(0,0,'2');
        ShowChar(0,1,'0');
        ShowChar(0,2,(year/10+0x30));        
        ShowChar(0,3,(year%10+0x30));
        ShowHZ(0,2,10);                 //年        
        
        month=read_random(DS3231_MONTH);//調(diào)用3231時(shí)鐘數(shù)據(jù)中的月數(shù)據(jù),從地址0x05中
        ShowChar(0,6,(month/10+0x30));         
        ShowChar(0,7,(month%10)+0x30);
        
        ShowHZ(0,4,11);                 //月
        
        date=read_random(DS3231_DAY);//從3231芯片中讀取日數(shù)據(jù),從地址0x04中
        ShowChar(0,10,(date/10+0x30));
        ShowChar(0,11,(date%10+0x30));
        
        ShowHZ(0,6,12);                 //日


    //小時(shí)
        hour =read_random(DS3231_HOUR);        //從3231芯片中讀取小時(shí)數(shù)據(jù),從地址0x02中
        Show1632(1,0,(hour/10));
        Show1632(1,1,(hour%10));                                        //小時(shí)個(gè)位
        Show1632(1,2,10);                                                //時(shí)鐘分隔符號(hào)":"
        //分鐘
        minute= read_random(DS3231_MINUTE); //從3231芯片中讀取分鐘數(shù)據(jù),從地址0x01中
        Show1632(1,3,(minute/10));                                        //分鐘十位
        Show1632(1,4,(minute%10));                                        //分鐘個(gè)位
        ShowSZ(2,5,10);                                                //時(shí)鐘分隔符號(hào)":"        
        //秒鐘
        second =read_random(DS3231_SECOND); //從3231芯片中讀取秒鐘數(shù)據(jù),從地址0x01中
        ShowSZ(2,6,(second/10));                                        //秒鐘十位
        ShowSZ(2,7,(second%10));                                        //秒鐘個(gè)位
        
        ShowHZ(1,9,13);//星
        ShowHZ(1,10,14);//期
        
        dd = read_random(DS3231_DAY);//日
        mo = read_random(DS3231_MONTH);//月
        yy = read_random(DS3231_YEAR);//年
        Conver_week(0,yy,mo,dd);//調(diào)用公歷換算星期子函數(shù)
    //sel=week;//week是公歷轉(zhuǎn)換星期子函數(shù)的運(yùn)行結(jié)果,結(jié)果為0-6,0是星期日
        ShowHZ(1,11,((week)-1));//顯示位置
           if(week==0)
           ShowHZ(1,11,12);    //0=星期日
}
void displaynl(void)
{
        Conversion(century,year,month,date);        //公歷轉(zhuǎn)農(nóng)歷


        
        ShowHZ(3,0,(month_moon));  //顯示農(nóng)歷月
        
        if(month_moon==1)  {ShowHZ(3,0,35);}    //正
        if(month_moon==2)  {ShowHZ(3,0,1);}     //二
        if(month_moon==3)  {ShowHZ(3,0,2);}     //三
        if(month_moon==4)  {ShowHZ(3,0,3);}     //四
        if(month_moon==5)  {ShowHZ(3,0,4);}     //五
        if(month_moon==6)  {ShowHZ(3,0,5);}     //六
        if(month_moon==7)  {ShowHZ(3,0,6);}     //七
        if(month_moon==8)  {ShowHZ(3,0,7);}     //八
        if(month_moon==9)  {ShowHZ(3,0,8);}     //九
        if(month_moon==10) {ShowHZ(3,0,9);}     //十
        if(month_moon==11) {ShowHZ(3,0,15);}    //冬
        if(month_moon==12) {ShowHZ(3,0,16);}    //臘


    ShowHZ(3,1,11);//顯示月
        
        ShowHZ(3,2,(day_moon));  //顯示農(nóng)歷月
        if (day_moon==1)  {ShowHZ(3,2,17); ShowHZ(3,3,0);}//  {lcm_w_word("初一");}
        if (day_moon==2)  {ShowHZ(3,2,17); ShowHZ(3,3,1);}//  {lcm_w_word("初二");}
        if (day_moon==3)  {ShowHZ(3,2,17); ShowHZ(3,3,2);}//  {lcm_w_word("初三");}
        if (day_moon==4)  {ShowHZ(3,2,17); ShowHZ(3,3,3);}//  {lcm_w_word("初四");}
        if (day_moon==5)  {ShowHZ(3,2,17); ShowHZ(3,3,4);}//  {lcm_w_word("初五");}
        if (day_moon==6)  {ShowHZ(3,2,17); ShowHZ(3,3,5);}//  {lcm_w_word("初六");}
        if (day_moon==7)  {ShowHZ(3,2,17); ShowHZ(3,3,6);}//  {lcm_w_word("初七");}
        if (day_moon==8)  {ShowHZ(3,2,17); ShowHZ(3,3,7);}//  {lcm_w_word("初八");}
        if (day_moon==9)  {ShowHZ(3,2,17); ShowHZ(3,3,8);}//  {lcm_w_word("初九");}
        if (day_moon==10) {ShowHZ(3,2,17); ShowHZ(3,3,9);}//  {lcm_w_word("初十");}
        if (day_moon==11) {ShowHZ(3,2,9);  ShowHZ(3,3,0);}//  {lcm_w_word("十一");}
        if (day_moon==12) {ShowHZ(3,2,9);  ShowHZ(3,3,1);}//  {lcm_w_word("十二");}
        if (day_moon==13) {ShowHZ(3,2,9);  ShowHZ(3,3,2);}//  {lcm_w_word("十三");}
        if (day_moon==14) {ShowHZ(3,2,9);  ShowHZ(3,3,3);}//  {lcm_w_word("十四");}
        if (day_moon==15) {ShowHZ(3,2,9);  ShowHZ(3,3,4);}//  {lcm_w_word("十五");}
        if (day_moon==16) {ShowHZ(3,2,9);  ShowHZ(3,3,5);}//  {lcm_w_word("十六");}
        if (day_moon==17) {ShowHZ(3,2,9);  ShowHZ(3,3,6);}//  {lcm_w_word("十七");}
        if (day_moon==18) {ShowHZ(3,2,9);  ShowHZ(3,3,7);}//  {lcm_w_word("十八");}
        if (day_moon==19) {ShowHZ(3,2,9);  ShowHZ(3,3,8);}//  {lcm_w_word("十九");}
        if (day_moon==20) {ShowHZ(3,2,1);  ShowHZ(3,3,9);}//  {lcm_w_word("二十");}
        if (day_moon==21) {ShowHZ(3,2,18); ShowHZ(3,3,0);}//  {lcm_w_word("廿一");}
        if (day_moon==22) {ShowHZ(3,2,18); ShowHZ(3,3,1);}//  {lcm_w_word("廿二");}
        if (day_moon==23) {ShowHZ(3,2,18); ShowHZ(3,3,2);}//  {lcm_w_word("廿三");}
        if (day_moon==24) {ShowHZ(3,2,18); ShowHZ(3,3,3);}//  {lcm_w_word("廿四");}
        if (day_moon==25) {ShowHZ(3,2,18); ShowHZ(3,3,4);}//  {lcm_w_word("廿五");}
        if (day_moon==26) {ShowHZ(3,2,18); ShowHZ(3,3,5);}//  {lcm_w_word("廿六");}
        if (day_moon==27) {ShowHZ(3,2,18); ShowHZ(3,3,6);}//  {lcm_w_word("廿七");}
        if (day_moon==28) {ShowHZ(3,2,18); ShowHZ(3,3,7);}//  {lcm_w_word("廿八");}
        if (day_moon==29) {ShowHZ(3,2,18); ShowHZ(3,3,8);}//  {lcm_w_word("廿九");}
        if (day_moon==30) {ShowHZ(3,2,2);  ShowHZ(3,3,9);}//  {lcm_w_test("三十");}


}
void displaysx(void){
        unsigned char LunarYearD,ReYear;//農(nóng)歷年份的十進(jìn)制數(shù)  和取模后的余數(shù)


        //LunarYearD=(year_moon/16)*10+year_moon%16;        //農(nóng)歷年轉(zhuǎn)換成10進(jìn)制數(shù)
        ReYear=LunarYearD%12;                             //農(nóng)歷年模12,取余運(yùn)算
        


        switch(ReYear)        //生肖
        {
                case 0: ShowHZ(0,10,23);break;//write_com(0x9a);lcm_w_word("龍年");break;   //余0即整除 農(nóng)歷 龍年
                case 1: ShowHZ(0,10,24);break;//write_com(0x9a);lcm_w_word("蛇年");break;   //蛇年
                case 2: ShowHZ(0,10,25);break;//write_com(0x9a);lcm_w_word("馬年");break;
                case 3: ShowHZ(0,10,26);break;//write_com(0x9a);lcm_w_word("羊年");break;
                case 4: ShowHZ(0,10,27);break;//write_com(0x9a);lcm_w_word("猴年");break;
                case 5: ShowHZ(0,10,28);break;//write_com(0x9a);lcm_w_word("雞年");break;
                case 6: ShowHZ(0,10,29);break;//write_com(0x9a);lcm_w_word("狗年");break;
                case 7: ShowHZ(0,10,30);break;//write_com(0x9a);lcm_w_word("豬年");break;
                case 8: ShowHZ(0,10,19);break;//write_com(0x9a);lcm_w_word("鼠年");break;
                case 9: ShowHZ(0,10,20);break;//write_com(0x9a);lcm_w_word("牛年");break;
                case 10:ShowHZ(0,10,21);break;//write_com(0x9a);lcm_w_word("虎年");break;
                case 11:ShowHZ(0,10,22);break;//write_com(0x9a);lcm_w_word("兔年");break;
        }
}


/*void Set_time(uchar sel)
{
          signed char address,item;
          signed char max,mini;
          ShowHZ(3,6,31);          //顯示"設(shè)"  
        if(sel==0) {ShowHZ(3,7,10);address=0x8c; max=99; mini=0;}  //年
        if(sel==1) {ShowHZ(3,7,11);address=0x88; max=12; mini=1;}  //月
        if(sel==2) {ShowHZ(3,7,12);address=0x86; max=31; mini=1;}  //日
        if(sel==3) {ShowHZ(3,7,33);address=0x84; max=23;mini=0;}//時(shí)
        if(sel==4) {ShowHZ(3,7,32);address=0x82; max=59;mini=0;}//鐘


  //讀取1302某地址上的數(shù)值轉(zhuǎn)換成10進(jìn)制賦給item
          item=((read_time(address+1))/16)*10 + (read_time(address+1))%16;
          if(K3 == 0){item++;}
          if(K4 == 0){item--;}
          if(item>max) item=mini;   
          if(item<mini) item=max;           
          write_time(0x8e,0x00);//允許寫操作
          write_time(address,(item/10)*16+item%10);//轉(zhuǎn)換成16進(jìn)制寫入1302
          write_time(0x8e,0x80);//寫保護(hù),禁止寫操作
          displaytime();
                                          
}          */         
void Set_time(uchar sel)
{
          signed char address,item;
          signed char max,mini;
          ShowHZ(3,6,31);          //顯示"調(diào)"  
        if(sel==0) {ShowHZ(3,7,10);address=DS3231_YEAR; max=99; mini=0;}  //年
        if(sel==1) {ShowHZ(3,7,11);address=DS3231_MONTH; max=12; mini=1;}  //月
        if(sel==2) {ShowHZ(3,7,12);address=DS3231_DAY; max=31; mini=1;}  //日
        if(sel==3) {ShowHZ(3,7,33);address=DS3231_HOUR; max=23;mini=0;}//時(shí)
        if(sel==4) {ShowHZ(3,7,32);address=DS3231_MINUTE; max=59;mini=0;}//鐘


  //讀取3231某地址上的數(shù)值轉(zhuǎn)換成10進(jìn)制賦給item
          item=(read_random(address));
          if(K3 == 0){item++;}
          if(K4 == 0){item--;}
          if(item>max) item=mini;   
          if(item<mini) item=max;           
          //write_byte(0, 0x98);//允許寫操作
         write_byte(address,(item/10)*16+item%10);//轉(zhuǎn)換成10進(jìn)制寫入3231
  //        write_byte(0x8e,0x80);//寫保護(hù),禁止寫操作
          displaytime();
                                          
}         
void main()
{
        uchar e=0;


        InitLCD();
        while(1)
        {
                if(w==0)
                {
                        displaytime();
                        displaynl();
                        displaysx();        
                        read_temp();                  //讀取溫度
                    ds1820disp();                 //顯示溫度
                }   //正常走時(shí)
                else {}                    //否則啟動(dòng)調(diào)時(shí)
//設(shè)置鍵------------------------------------------------------------------------               
                if (K1 == 0)               // 設(shè)置時(shí)間
                {
                        DelayM(20);                   //按鍵消抖
                        if(K1 == 0 && w == 1)  //當(dāng)是調(diào)時(shí)狀態(tài) 本鍵用于調(diào)整下一項(xiàng)
                        {
                                e++;
                                if (e >= 6 ){e = 0;}
                                Set_time(e);       //調(diào)整                                
                        }                        
                        if(K1 == 0 && w == 0)  //當(dāng)是正常狀態(tài)時(shí)就進(jìn)入調(diào)時(shí)狀態(tài)
                        {
                                ClearScreen(0);
                                ClearScreen(1);
                                ClearScreen(2);    //清除左中右屏顯示
                                w=1;                   //進(jìn)入調(diào)時(shí)                                
                                Set_time(e);       //調(diào)整
                        }
                           while(K1 == 0);        //等待鍵松開
                }
//確認(rèn),返回鍵-------------------------------------------------------------------               
                if (K2 == 0)               //在調(diào)時(shí)狀態(tài)時(shí)就退出調(diào)時(shí)
                {
                        DelayM(20);            //按鍵消抖
                        if(K2 == 0 && w == 1)
                        {                                
                                w = 0;                   //退出調(diào)時(shí)
                                e = 0;                       //"下一項(xiàng)"計(jì)數(shù)器清0                                                               
                        }
                        if(K2 == 0 && w == 0)
                        {                                
                                ClearScreen(0);
                                ClearScreen(1);
                                ClearScreen(2);           //清除左中右屏顯示                                
                                while(K2 == 0);   
                        }
                        ClearScreen(0);
                        ClearScreen(1);
                        ClearScreen(2);        //清除左中右屏顯示
                        displaytime();                   //顯示時(shí)間
                        read_temp();                  //讀取溫度
                    ds1820disp();                 //顯示溫度
                        while(K2 == 0);  
                }
//加調(diào)整------------------------------------------------------------------------               
                if (K3 == 0 && w == 1)
                {                                                         
                        DelayM(20);
                        if(K3 == 0 && w == 1) {        Set_time(e); }
                        while(K3 == 0);
                }
//減調(diào)整------------------------------------------------------------------------               
                if (K4 == 0 && w == 1)
                {               
                        DelayM(20);
                        if(K4 == 0 && w == 1) { Set_time(e); }
                        while(K4 == 0);
                }
        }
/*液晶背光控制,按一下亮,再按一下滅----------------------------------------
                if(K5 == 0)        
                {
                        DelayM(20); q = ~q;      //標(biāo)志位取反
                         if(q){BLK = BLK | 1;}   
                                 else {BLK = BLK & 0;}   
                        while(K5 == 0);           
                }                                                                                                                                        */
}
  

全部資料51hei下載地址:
19264 3231.zip (208.93 KB, 下載次數(shù): 268)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:79544 發(fā)表于 2020-6-13 11:06 | 只看該作者
樓主您好!怎么顯示亂碼?
回復(fù)

使用道具 舉報(bào)

板凳
ID:16255 發(fā)表于 2020-7-13 23:00 | 只看該作者
完美運(yùn)行!
回復(fù)

使用道具 舉報(bào)

地板
ID:802646 發(fā)表于 2020-7-14 11:29 | 只看該作者

我的顯示不出來(lái)畫面是咋回事
回復(fù)

使用道具 舉報(bào)

5#
ID:60263 發(fā)表于 2020-7-16 14:47 | 只看該作者
好東西,測(cè)試完美可用,謝謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:88256 發(fā)表于 2020-7-16 16:20 | 只看該作者
這個(gè)屏幕布局還是不夠好看
回復(fù)

使用道具 舉報(bào)

7#
ID:88256 發(fā)表于 2020-7-16 16:24 | 只看該作者
騰飛的龍 發(fā)表于 2020-6-13 11:06
樓主您好!怎么顯示亂碼?

應(yīng)該又是用來(lái)對(duì)付伸手黨的,端口不對(duì)或者程序稍微錯(cuò)誤,自己判斷問題所在并改一下就OK了,我經(jīng)常遇到這樣子。這個(gè)布局不喜歡,所以沒有下載參考,無(wú)法判斷是否會(huì)正常顯示
回復(fù)

使用道具 舉報(bào)

8#
ID:292903 發(fā)表于 2021-4-20 14:32 | 只看該作者
樓主您好,我的屏幕跟你的仿真屏為啥不一樣 這樣的屏幕還能做嗎

1af4a809fa9716ab033b3c0c146af7c.jpg (67 KB, 下載次數(shù): 30)

1af4a809fa9716ab033b3c0c146af7c.jpg
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av国产精品| 国产jizz女人多喷水99 | 天天操夜夜骑 | 免费看一区二区三区 | 午夜国产 | xxxxxx国产| 在线免费观看黄色 | 成人特级毛片 | 欧美三级成人理伦 | 亚洲男女视频在线观看 | 国产激情精品 | 欧美a在线 | 九九99久久 | 天天躁日日躁狠狠躁白人 | 一区二区高清 | 日韩免费一级 | 欧日韩在线| 亚洲午夜精品 | 欧美一区成人 | 国产精品国产成人国产三级 | 91国内产香蕉 | 欧美国产日韩在线观看 | 99精品国产一区二区三区 | 亚洲欧美精品久久 | 日韩视频一区二区三区 | 国产91 在线播放 | 亚洲九色| 99免费精品视频 | 亚洲最大av网站 | 国产超碰人人爽人人做人人爱 | 亚洲精品1 | 久久久久久国产精品 | 亚洲第一黄色网 | 日韩av高清 | 亚洲深夜福利 | 亚洲 欧美 日韩在线 | 黄瓜av| 亚洲视频三区 | 在线视频日韩精品 | 久久国产精品72免费观看 | 日日摸夜夜添夜夜添精品视频 |