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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5136|回復: 7
打印 上一主題 下一主題
收起左側

仿制單片機+LCD19264+ds3231大數字電子鐘 Proteus仿真程序

  [復制鏈接]
跳轉到指定樓層
樓主


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


以下粘貼部分代碼
*系統頭文件--------------------------------------------------------------------*/
#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-設置
sbit K2  = P3^3;  //按鍵K2-確認、返回
sbit K3  = P3^4;  //按鍵K3-加
sbit K4  = P3^5;  //按鍵K4-減
//sbit K5  = P1^3;
/************************函數聲明***********************************************/
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;    //調時標志位
unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,moontemp1,moontemp2;//定義時間映射全局變量(專用寄存器)


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




void displaytime(void)
{
        
   /* year=read_time(0x8d);//調用1302時鐘數據中的年數據,從地址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);//調用1302時鐘數據中的月數據,從地址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芯片中讀取日數據,從地址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);                 //日


        //小時
        hour = read_time(0x85);
        //if((hour/16)==0){Show1632(1,0,11);}
        //        else        {Show1632(1,0,(hour/16));}        //小時十位
        Show1632(1,0,(hour/16));
        Show1632(1,1,(hour%16));                                        //小時個位
        Show1632(1,2,10);                                                //時鐘分隔符號":"
        //分鐘
        minute = read_time(0x83);
        Show1632(1,3,(minute/16));                                        //分鐘十位
        Show1632(1,4,(minute%16));                                        //分鐘個位
        ShowSZ(2,5,10);                                                //時鐘分隔符號":"        
        //秒鐘
        second = read_time(0x81);
        ShowSZ(2,6,(second/16));                                        //秒鐘十位
        ShowSZ(2,7,(second%16));                                        //秒鐘個位
        
        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);//調用公歷換算星期子函數
    //sel=week;//week是公歷轉換星期子函數的運行結果,結果為0-6,0是星期日
        ShowHZ(1,7,((week)-1));//顯示位置
           if(week==0)
           ShowHZ(1,7,12);    //0=星期日 */        
    year=read_random(DS3231_YEAR);//調用3231時鐘數據中的年數據,從地址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);//調用3231時鐘數據中的月數據,從地址0x05中
        ShowChar(0,6,(month/10+0x30));         
        ShowChar(0,7,(month%10)+0x30);
        
        ShowHZ(0,4,11);                 //月
        
        date=read_random(DS3231_DAY);//從3231芯片中讀取日數據,從地址0x04中
        ShowChar(0,10,(date/10+0x30));
        ShowChar(0,11,(date%10+0x30));
        
        ShowHZ(0,6,12);                 //日


    //小時
        hour =read_random(DS3231_HOUR);        //從3231芯片中讀取小時數據,從地址0x02中
        Show1632(1,0,(hour/10));
        Show1632(1,1,(hour%10));                                        //小時個位
        Show1632(1,2,10);                                                //時鐘分隔符號":"
        //分鐘
        minute= read_random(DS3231_MINUTE); //從3231芯片中讀取分鐘數據,從地址0x01中
        Show1632(1,3,(minute/10));                                        //分鐘十位
        Show1632(1,4,(minute%10));                                        //分鐘個位
        ShowSZ(2,5,10);                                                //時鐘分隔符號":"        
        //秒鐘
        second =read_random(DS3231_SECOND); //從3231芯片中讀取秒鐘數據,從地址0x01中
        ShowSZ(2,6,(second/10));                                        //秒鐘十位
        ShowSZ(2,7,(second%10));                                        //秒鐘個位
        
        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);//調用公歷換算星期子函數
    //sel=week;//week是公歷轉換星期子函數的運行結果,結果為0-6,0是星期日
        ShowHZ(1,11,((week)-1));//顯示位置
           if(week==0)
           ShowHZ(1,11,12);    //0=星期日
}
void displaynl(void)
{
        Conversion(century,year,month,date);        //公歷轉農歷


        
        ShowHZ(3,0,(month_moon));  //顯示農歷月
        
        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));  //顯示農歷月
        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;//農歷年份的十進制數  和取模后的余數


        //LunarYearD=(year_moon/16)*10+year_moon%16;        //農歷年轉換成10進制數
        ReYear=LunarYearD%12;                             //農歷年模12,取余運算
        


        switch(ReYear)        //生肖
        {
                case 0: ShowHZ(0,10,23);break;//write_com(0x9a);lcm_w_word("龍年");break;   //余0即整除 農歷 龍年
                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);          //顯示"設"  
        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;}//時
        if(sel==4) {ShowHZ(3,7,32);address=0x82; max=59;mini=0;}//鐘


  //讀取1302某地址上的數值轉換成10進制賦給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);//轉換成16進制寫入1302
          write_time(0x8e,0x80);//寫保護,禁止寫操作
          displaytime();
                                          
}          */         
void Set_time(uchar sel)
{
          signed char address,item;
          signed char max,mini;
          ShowHZ(3,6,31);          //顯示"調"  
        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;}//時
        if(sel==4) {ShowHZ(3,7,32);address=DS3231_MINUTE; max=59;mini=0;}//鐘


  //讀取3231某地址上的數值轉換成10進制賦給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);//轉換成10進制寫入3231
  //        write_byte(0x8e,0x80);//寫保護,禁止寫操作
          displaytime();
                                          
}         
void main()
{
        uchar e=0;


        InitLCD();
        while(1)
        {
                if(w==0)
                {
                        displaytime();
                        displaynl();
                        displaysx();        
                        read_temp();                  //讀取溫度
                    ds1820disp();                 //顯示溫度
                }   //正常走時
                else {}                    //否則啟動調時
//設置鍵------------------------------------------------------------------------               
                if (K1 == 0)               // 設置時間
                {
                        DelayM(20);                   //按鍵消抖
                        if(K1 == 0 && w == 1)  //當是調時狀態 本鍵用于調整下一項
                        {
                                e++;
                                if (e >= 6 ){e = 0;}
                                Set_time(e);       //調整                                
                        }                        
                        if(K1 == 0 && w == 0)  //當是正常狀態時就進入調時狀態
                        {
                                ClearScreen(0);
                                ClearScreen(1);
                                ClearScreen(2);    //清除左中右屏顯示
                                w=1;                   //進入調時                                
                                Set_time(e);       //調整
                        }
                           while(K1 == 0);        //等待鍵松開
                }
//確認,返回鍵-------------------------------------------------------------------               
                if (K2 == 0)               //在調時狀態時就退出調時
                {
                        DelayM(20);            //按鍵消抖
                        if(K2 == 0 && w == 1)
                        {                                
                                w = 0;                   //退出調時
                                e = 0;                       //"下一項"計數器清0                                                               
                        }
                        if(K2 == 0 && w == 0)
                        {                                
                                ClearScreen(0);
                                ClearScreen(1);
                                ClearScreen(2);           //清除左中右屏顯示                                
                                while(K2 == 0);   
                        }
                        ClearScreen(0);
                        ClearScreen(1);
                        ClearScreen(2);        //清除左中右屏顯示
                        displaytime();                   //顯示時間
                        read_temp();                  //讀取溫度
                    ds1820disp();                 //顯示溫度
                        while(K2 == 0);  
                }
//加調整------------------------------------------------------------------------               
                if (K3 == 0 && w == 1)
                {                                                         
                        DelayM(20);
                        if(K3 == 0 && w == 1) {        Set_time(e); }
                        while(K3 == 0);
                }
//減調整------------------------------------------------------------------------               
                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;      //標志位取反
                         if(q){BLK = BLK | 1;}   
                                 else {BLK = BLK & 0;}   
                        while(K5 == 0);           
                }                                                                                                                                        */
}
  

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:16255 發表于 2020-7-13 23:00 | 只看該作者
完美運行!
回復

使用道具 舉報

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

我的顯示不出來畫面是咋回事
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

應該又是用來對付伸手黨的,端口不對或者程序稍微錯誤,自己判斷問題所在并改一下就OK了,我經常遇到這樣子。這個布局不喜歡,所以沒有下載參考,無法判斷是否會正常顯示
回復

使用道具 舉報

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

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

1af4a809fa9716ab033b3c0c146af7c.jpg
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷av777 av免费网站在线 | 午夜精品一区二区三区在线视 | 日日摸夜夜添夜夜添精品视频 | 亚洲精品白浆高清久久久久久 | 亚洲精品自在在线观看 | 中文字幕一区二区三区在线观看 | 亚洲网站在线观看 | 亚洲国产欧美在线 | 国产精品久久久久久久久久了 | 精品一区二区在线视频 | 日本不卡在线观看 | 99国内精品久久久久久久 | 久草网免费 | 亚洲香蕉在线视频 | 中文字幕一区二区三区四区五区 | 91色在线视频 | 欧美成人第一页 | 日韩久草 | 亚洲视频免费在线观看 | 成人精品福利 | 亚洲精品一区中文字幕乱码 | eeuss国产一区二区三区四区 | 亚洲精品二区 | 在线看亚洲 | 91av在线视频观看 | 午夜精品网站 | 国产一级精品毛片 | 亚洲国产精品久久 | 国产精品免费看 | 国产午夜影院 | japan25hdxxxx日本| 久久久毛片 | 99久久婷婷国产综合精品电影 | 欧美日韩在线一区二区 | 国产精品日韩一区 | 久久精品国产一区 | 曰批视频在线观看 | 欧美aaaaaaaa| 偷拍自拍网站 | 国产日韩精品在线 | 欧美精品一区在线发布 |