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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51萬年歷+溫度在1602上顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210546 發(fā)表于 2017-6-12 18:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 18772299932 于 2017-6-12 18:27 編輯

我用的是普中科技51單片機的開發(fā)板,我參照別人的程序,再加上自己的想法在LCD1602上顯示日歷和溫度,但溫度不能在1602上正常顯示,只是顯示000.00,日歷可以正常顯示。我把日歷和溫度分開在1602上可以正常顯示,是什么問題呢?求大神指教
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:82765 發(fā)表于 2017-6-12 18:45 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報

板凳
ID:34643 發(fā)表于 2017-6-12 19:35 | 只看該作者
把程序貼出來才好進行分析的啊。
回復(fù)

使用道具 舉報

地板
ID:207302 發(fā)表于 2017-6-12 19:48 | 只看該作者
#include<reg52.h>  #include<intrins.h> #define uchar unsigned char #define uint unsigned int                                                     //定義的的4個鍵盤 sbit s1=P3^0;                                   //時鐘功能鍵 sbit s2=P3^1;                                  //加鍵 sbit s3=P3^2;                                   //減鍵 sbit s4=P3^6;                                   //確認鍵 sbit s5=P3^3;                                   //鬧鐘功能鍵  sbit dula=P2^6;                                           //數(shù)碼管操作 sbit wela=P2^7;  sbit lcden=P2^5;                          //液晶操作 sbit lcdrs=P1^0; sbit lcdrw=P1^1;  sbit rd=P3^7;                                 //為了分離出3個獨立鍵盤  sbit FM=P2^3;         //蜂鳴器口  sbit ACC0=ACC^0;                                   //累加器喂ACC    這是位定義 sbit ACC7=ACC^7;   sbit sclk=P2^1;                                 //DS1302操作 sbit data1=P2^0; sbit rst=P2^4;  uchar s1num,flag1,flag2,s5num; int miao,shi,fen,nian,yue,ri,week,afen,ashi; int x1,x2;  uchar code table1[]="SUN";//星期字表 uchar code table2[]="MON"; uchar code table3[]="TUE"; uchar code table4[]="WED"; uchar code table5[]="THU";  uchar code table6[]="FRI"; uchar code table7[]="SAT";  void delayms(uint xms)                                 //延時函數(shù) { uint x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); }  void di()                          //蜂鳴器函數(shù) { FM=0; delayms(100); FM=1; }  void cmg88()          //關(guān)數(shù)碼管函數(shù) { dula=1; P0=0x00; dula=0; }  void write_com(uchar com)                        //液晶寫命令函數(shù) { lcdrs=0; lcden=0; P0=com; delayms(5); lcden=1; delayms(5); lcden=0; }  void write_date(uchar date)                         //液晶寫數(shù)據(jù)函數(shù) { lcdrs=1; lcden=0; P0=date; delayms(5); lcden=1; delayms(5); lcden=0; }  void Write1302(uchar dat)                           //向1302寫一個字節(jié)數(shù)據(jù) {   uchar i; ACC=dat; for(i=8;i>0;i--)  {  data1=ACC0;  sclk=1;  sclk=0;  ACC=ACC>>1;  }  }   void WriteSet1302(uchar Cmd,uchar dat)           //根據(jù)命令,向1302寫一個字節(jié)數(shù)據(jù)  {                   rst=0;                 _nop_();                    sclk=0;                 _nop_();                      rst=1;                       delayms(2);                  Write1302(Cmd);               Write1302(dat);                 sclk=1;                       rst=0;             }  uchar Read1302()                                        //向1302讀一個字節(jié)數(shù)據(jù)  { uchar i;  for(i=8;i>0;i--)  { ACC=ACC>>1; ACC7=data1; sclk=1;  sclk=0; } return(ACC);  }    uchar  ReadSet1302(uchar Cmd)                  //根據(jù)命令,向1302讀一個字節(jié)數(shù)據(jù)  {   uchar dat;   rst=0;                   sclk=0;                   rst=1;                    Write1302(Cmd);         dat=Read1302();          sclk=1;                rst=0;                return(dat);          }   void inital_1302()                                                   //                初始化DS1302函數(shù) {  WriteSet1302(0x8e,0x00);                                         //禁止寫保護 WriteSet1302(0x90,0xaa);                                                        //定義充電 WriteSet1302(0x80,0x45);                                          //秒 WriteSet1302(0x84,0x18);                                           // 時 WriteSet1302(0x82,0x47);                                           // 分 WriteSet1302(0x8c,0x16);                                                //年 WriteSet1302(0x88,0x05);                                                 //月 WriteSet1302(0x86,0x23);                                                //日 WriteSet1302(0x8a,0x01);                                                 //星期 WriteSet1302(0xc0,0x07);                          //鬧鐘小時初始化 WriteSet1302(0xfc,0x30);                           //鬧鐘分鐘初始化 WriteSet1302(0x8e,0x80);                                        //開寫保護 }  void write_sfm(uchar add,uchar dat)                                           //時分秒函數(shù) { uchar gw,sw; gw=dat%16; sw=dat/16; write_com(0x80+0x40+add); write_date(sw+0x30); write_date(gw+0x30); }  void write_nyr(uchar add,uchar dat)                                  //年月日函數(shù) { uchar gw,sw; gw=dat%16; sw=dat/16; write_com(0x80+add); write_date(sw+0x30); write_date(gw+0x30); }  void write_week(uchar xq)                                  //寫星期函數(shù) { uchar x; write_com(0x80+12); switch(xq) { case 1: for(x=0;x<3;x++) { write_date(table1[x]); } break; case 2: for(x=0;x<3;x++) { write_date(table2[x]); } break; case 3: for(x=0;x<3;x++) { write_date(table3[x]); } break; case 4: for(x=0;x<3;x++) { write_date(table4[x]); } break; case 5: for(x=0;x<3;x++) { write_date(table5[x]); } break; case 6: for(x=0;x<3;x++) { write_date(table6[x]); } break; case 7: for(x=0;x<3;x++) { write_date(table7[x]); } break; } write_com(0x80+12); }  void init()                                        //初始化操作 { flag1=0; flag2=0; rd=0; dula=0; wela=0; lcdrw=0; lcden=0; fen=0; miao=0; shi=0; week=0; nian=0; yue=0; ri=0; s1num=0; s5num=0;  write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);  write_com(0x80+1);                 //在液晶上寫一些固定的數(shù) write_date('2'); write_date('0'); delayms(5);                   write_com(0x80+5);                   //在液晶上寫一些固定的數(shù) write_date('-'); delayms(5); write_com(0x80+8); write_date('-'); delayms(5);  write_com(0x80+0x40+3);           //時間部分的兩個冒號 write_date(':'); delayms(5); write_com(0x80+0x40+6); write_date(':'); delayms(5); write_com(0x80+0x40+12); write_date(':'); delayms(5); }  void keyscan()                          //鍵盤掃描操作 { if(s1==0&&s5num==0)                                                  //時鐘功能鍵  并且鬧鐘不處于調(diào)整狀態(tài) { delayms(5); if(s1==0&&s5num==0) { s1num++; flag1=1; while(!s1); di(); switch(s1num) { case 1: write_com(0x80+0x40+8); write_com(0x0f);                          //光標閃爍 break;  case 2: write_com(0x80+0x40+5);  break;  case 3: write_com(0x80+0x40+2); break;  case 4: write_com(0x80+14); break;  case 5: write_com(0x80+10); break;  case 6: write_com(0x80+7); break;  case 7: write_com(0x80+4); break;  case 8: flag1=0; s1num=0; write_com(0x0c); WriteSet1302(0x8e,0x00);  //第八次按時鐘功能鍵后,把調(diào)整了的所有數(shù)據(jù)當前狀態(tài)存入到DS1302中 WriteSet1302(0x80,miao);  WriteSet1302(0x84,shi); WriteSet1302(0x82,fen);  WriteSet1302(0x8a,week);  WriteSet1302(0x8c,nian);  WriteSet1302(0x88,yue); WriteSet1302(0x86,ri);  WriteSet1302(0x8e,0x80);  break; } } }  if(s1num!=0&&s5num==0)                                 //時鐘加鍵 { if(s2==0) { delayms(5); if(s2==0) { while(!s2); di(); switch(s1num) { case 1:  x1=miao%16; x2=miao/16;  x1++; if(x1==10)  {  x1=0; x2++;  if(x2>=6) x2=0; } miao=x1+x2*16;  write_sfm(7,miao); write_com(0x80+0x40+8); break;  case 2: x1=fen%16; x2=fen/16;  x1++; if(x1==10)  {  x1=0; x2++;  if(x2>=6) x2=0; } fen=x1+x2*16;  write_sfm(4,fen); write_com(0x80+0x40+5); break;  case 3: x1=shi%16; x2=shi/16;  x1++; if(x1==10)  {  x1=0; x2++; } if(x2>=2&&x1>=4) { x1=0; x2=0; } shi=x1+x2*16;  write_sfm(1,shi); write_com(0x80+0x40+2); break;  case 4: x1=(week)%10; x2=(week)/10; x1++; if(x1==8) x1=1; week=x2*16+x1; write_week(week);    write_com(0x80+14); break;  case 5: x1=ri%16; x2=ri/16;  x1++; if(x1==10)  {  x1=0; x2++; }  if(x2==3&&x1==2) { x1=0; x2=0; } ri=x1+x2*16;  write_nyr(9,ri); write_com(0x80+10); break;  case 6: x1=yue%16; x2=yue/16;  x1++; if(x2==1&&x1==3)  {  x1=1; x2=0; }  if(x1==10) { x1=0; x2++; } yue=x1+x2*16;  write_nyr(6,yue); write_com(0x80+7); break;  case 7: x1=nian%16; x2=nian/16;  x1++; if((x2==9)&&(x1==10))  { x1=0; x2=0; } if(x1==10) { x2++; x1=0; } nian=x1+x2*16;  write_nyr(3,nian); write_com(0x80+4); break; } } }  if(s3==0)                                        //時鐘減鍵 { delayms(5); if(s3==0)         { while(!s3); di(); switch(s1num) { case 1: x1=miao%16; x2=miao/16;  x1--; if(x1==-1)  {  x1=9; x2--;  if(x2==-1) x2=5; } miao=x1+x2*16;  write_sfm(7,miao); write_com(0x80+0x40+8); break;  case 2: x1=fen%16; x2=fen/16;  x1--; if(x1==-1)  {  x1=9; x2--;  if(x2==-1) x2=5; } fen=x1+x2*16;  write_sfm(4,fen); write_com(0x80+0x40+5); break;  case 3: x1=shi%16; x2=shi/16;  x1--; if(x1==-1)  {  x1=9; x2--; if(x2==-1) { x1=3; x2=2; } } shi=x1+x2*16;  write_sfm(1,shi); write_com(0x80+0x40+2); break;  case 4: x1=(week)%10; x2=(week)/10; x1--; if(x1==0) x1=7; week=x2*16+x1; write_week(week);    write_com(0x80+14); break;  case 5: x1=ri%16; x2=ri/16;  x1--; if(x1==-1)  {  x1=9; x2--;  if(x2==-1) { x1=1; x2=3; } } ri=x1+x2*16;  write_nyr(9,ri); write_com(0x80+10); break;  case 6: x1=yue%16; x2=yue/16;  x1--; if((x2==1)&&(x1==-1))  {  x1=9; x2--;  } if((x2==0)&&(x1==0)) { x1=2; x2=1; } yue=x1+x2*16;  write_nyr(6,yue); write_com(0x80+7); break;  case 7: x1=nian%16; x2=nian/16;  x1--; if(x1==-1)  {  x1=9; x2--;  if(x2==-1) { x1=9; x2=9; } } nian=x1+x2*16;  write_nyr(3,nian); write_com(0x80+4); break; } } } }  if(s1num!=0||s5num!=0)                                         //表示時鐘或者鬧鐘處于調(diào)整狀態(tài) { if(s4==0)                                                                //確定狀態(tài)的按鍵 { delayms(5); if(s4==0) { if(s1num!=0)                                                         //表示時鐘處于調(diào)整狀態(tài) { while(!s4);                                   //確定鍵被按下 di(); WriteSet1302(0x8e,0x00);  //按了確認鍵后,把調(diào)整了的所有數(shù)據(jù)當前狀態(tài)存入到DS1302中 WriteSet1302(0x80,miao);  WriteSet1302(0x84,shi); WriteSet1302(0x82,fen);  WriteSet1302(0x8a,week);  WriteSet1302(0x8c,nian);  WriteSet1302(0x88,yue); WriteSet1302(0x86,ri);  WriteSet1302(0x8e,0x80);  flag1=0; write_com(0x0c); s1num=0; } if(s5num!=0)                                           //表示鬧鐘處于調(diào)整狀態(tài) { while(!s4); di(); WriteSet1302(0x8e,0x00);  //調(diào)整鬧鐘,不能讓時鐘暫停,故沒把時鐘數(shù)據(jù)寫入DS1302中 WriteSet1302(0xc0,ashi);           //把鬧鐘數(shù)據(jù)寫入DS1302中 WriteSet1302(0xfc,afen);  WriteSet1302(0x8e,0x80); flag2=0; s5num=0; write_com(0x0c);  } } } }   if(s5==0&&s1num==0)                                           //鬧鐘功能鍵  并且時鐘不處于調(diào)整狀態(tài) { delayms(5); if(s5==0&&s1num==0) { s5num++; flag2=1; while(!s5); di(); if(s5num==1) { write_com(0x80+0x40+14); write_com(0x0f); } if(s5num==2) { write_com(0x80+0x40+11);  } if(s5num==3) { s5num=0; flag2=0; WriteSet1302(0x8e,0x00); WriteSet1302(0xfc,afen); WriteSet1302(0xc0,ashi); WriteSet1302(0x8e,0x80); write_com(0x0c); } } } if(s5num!=0&&s1num==0)                                 //只有鬧鐘處于調(diào)整狀態(tài) { if(s2==0)                                           //鬧鐘加鍵 { delayms(5); if(s2==0) { while(!s2); di(); if(s5num==1) { x1=afen%16; x2=afen/16; x1++; if(x1==10) { x1=0; x2++; if(x2>=6) x2=0; } afen=x1+x2*16; write_sfm(13,afen); write_com(0x80+0x40+14); } if(s5num==2) { x1=ashi%16; x2=ashi/16; x1++; if(x2>=2&&x1>=4) { x1=0; x2=0; } if(x1==10) { x1=0; x2++; } ashi=x1+x2*16; write_sfm(10,ashi); write_com(0x80+0x40+11); } } } } if(s3==0)                                           //鬧鐘減鍵 { delayms(5); if(s3==0) { while(!s3); di(); if(s5num==1) { x1=afen%16; x2=afen/16;  x1--; if(x1==-1)  {  x1=9; x2--;  if(x2==-1) x2=5; } afen=x1+x2*16;  write_sfm(13,afen); write_com(0x80+0x40+14); } if(s5num==2) { x1=ashi%16; x2=ashi/16;  x1--; if(x1==-1)  {  x1=9; x2--; if(x2==-1) { x1=3; x2=2; } } ashi=x1+x2*16;  write_sfm(10,ashi); write_com(0x80+0x40+11); } } } } void laba() { if((shi==ashi)&&(fen==afen)&&(miao<=60&&miao>=0)) { di(); } } void main()                                                  //主函數(shù) { init();                                                                        //大初始化 cmg88();                                                                //關(guān)數(shù)碼管函數(shù) inital_1302();                                                         //DS1302賦初值的初始化 ashi=ReadSet1302(0xc1);                                           //從DS1302讀出數(shù)據(jù) afen=ReadSet1302(0xfd); write_sfm(10,ashi);                                                //讀出數(shù)據(jù)送給液晶顯示 write_sfm(13,afen); while(1) {  keyscan(); laba(); if(flag1==0&&flag2==0)         //經(jīng)過一系列調(diào)整后,最終繼續(xù)滿足這個條件 {                                                                          //從DS1302讀數(shù)據(jù) miao=ReadSet1302(0x81);                                 //秒 fen=ReadSet1302(0x83);                                  //分 shi=ReadSet1302(0x85);                                  //時 ri=ReadSet1302(0x87);                                   //日 yue=ReadSet1302(0x89);                                        //月 week=ReadSet1302(0x8b);                                         //星期 nian=ReadSet1302(0x8d);                                         //年 write_sfm(7,miao);                                   //把它們送液晶顯示 write_sfm(4,fen); write_sfm(1,shi); write_nyr(9,ri); write_nyr(6,yue); write_nyr(3,nian); write_week(week);  } }  }
回復(fù)

使用道具 舉報

5#
ID:164602 發(fā)表于 2017-6-13 08:21 | 只看該作者

我也有塊普中的板子,正如我的名字。
你有板子,當然也有例程了,且你已經(jīng)將它們結(jié)合在一起了,只需修改一個地方就可以了。如下:
/*******************************************************************************
* 函 數(shù) 名         : Ds1302Read
* 函數(shù)功能                   : 讀取一個地址的數(shù)據(jù)
* 輸    入         : addr
* 輸    出         : dat
*******************************************************************************/

uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;//先將SCLK置低電平。
        _nop_();
        RST = 1;//然后將RST(CE)置高電平。
        _nop_();

        for(n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
                _nop_();
                SCLK = 0;//DS1302下降沿時,放置數(shù)據(jù)
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//讀取8位數(shù)據(jù)
        {
                dat1 = DSIO;//從最低位開始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿時,放置數(shù)據(jù)
                _nop_();
        }

//        RST = 0;
        _nop_();        //以下為DS1302復(fù)位的穩(wěn)定時間,必須的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;       
}

對照一下你的原來的程序,就會發(fā)現(xiàn),這個部分程序中的(紅色部分),被我去掉了(其它任何地方都不修改)。兩樣都能正常工作了。
回復(fù)

使用道具 舉報

6#
ID:211258 發(fā)表于 2017-6-15 11:29 | 只看該作者
非常好
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九九国产在线观看 | 日韩在线精品视频 | 免费高清av | 中文在线视频观看 | 337p日本欧洲亚洲大胆精蜜臀 | 九九九视频在线 | 天天干天天操天天射 | 欧美日韩精品一区二区三区四区 | 日韩在线免费播放 | 亚洲综合在线视频 | 亚洲一区二区中文字幕 | 伊人电影院av | 一区二区三区免费观看 | 国产精品日韩高清伦字幕搜索 | 精品久久久久久久久久久久久久 | 免费国产一区二区 | 艹逼网 | 日韩影院在线 | 久久国产香蕉 | 九九热精品在线 | 久久精品久久久久久 | 日韩在线不卡 | 欧美一区二区三区视频 | 成人av网站在线观看 | 欧美电影在线观看网站 | 一区二区三区不卡视频 | 日韩久久久久久 | 天天干精品| 久久久新视频 | 久久综合国产精品 | 欧美视频网| 欧美电影免费观看高清 | 91国产精品| 成人网av| 超碰超碰| 国产一级片一区二区 | 久久国产精品一区二区 | 久久久国产一区二区三区 | 国产aa| 亚洲欧美在线一区 | 国产福利91精品一区二区三区 |