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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子時鐘相關求助

[復制鏈接]
跳轉到指定樓層
樓主
擬用DS1302+LCD1602實現電子時鐘,實現顯示時間功能,下一步準備增加整點報時(蜂鳴器),鬧鐘功能。但第一步功能實現出現問題
以下程序根據資料提供的完整代碼,手打入keil,編譯生成hex文件,放在proteus仿真。
問題概述:程序編譯沒有報錯和報警,也可以仿真,但在LCD1602上不能顯示時間

源程序:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit T_RST = P1^2;     //DS1302復位線引腳
sbit T_CLK = P1^3;
sbit T_IO = P1^4;
sbit RS=P1^7;
sbit RW=P1^6;
sbit EN=P1^5;
sbit key0=P3^0;

sbit key1=P3^1;
sbit key2=P3^2;
sbit ACC7 =ACC^7;
sbit ACC0 =ACC^0;


uchar datechar[]={"DATE:"};
uchar timechar[]={"TIME:"};
uchar datebuffer[8]={0,0,0x2d,0,0,0x2d,0,0};
uchar timebuffer[8]={0,0,0x3a,0,0,0x3a,0,0};
uchar data ttime[3]={0x00,0x00,0x00};
uchar data tdata[3]={0x00,0x00,0x00};
                                                  //程序開始
void WriteB(uchar ucDa)
{
     uchar i;
     ACC = ucDa;
         for(i=8;i>0;i--)
         {
              T_IO = ACC0;
                  T_CLK = 1;
                  T_CLK = 0;
                  ACC = ACC >> 1;
         }
}

uchar ReadB(void)
{
     uchar i;
         for(i=8;i>0;i--)
         {
              ACC = ACC >>1;
                  ACC7 = T_IO;
                  T_CLK = 1;
                  T_CLK = 0;
         }
         return(ACC);
}


void v_W1302(uchar ucAddr,uchar ucDa)
{
     T_RST = 0;
         T_CLK = 0;
         nop_();
          _nop_();
         T_RST = 1;
         nop_();
         _nop_();
         WriteB(ucAddr);
         WriteB(ucDa);
         T_CLK = 1;
         T_RST = 0;
}


uchar uc_R1302(uchar ucAddr)
{
     uchar ucDa=0;
         T_RST = 0;
         T_CLK = 0;
         T_RST = 1;
         WriteB(ucAddr);
         ucDa = ReadB();
         T_CLK = 1;
         T_RST =0;
return(ucDa);
}

//LCD查詢忙函數
void fbusy()
{
     P2 = 0xff;
         RS = 0;
         RW = 1;
         EN = 1;
         EN = 0;
         while((P2&0x80))
         {
               EN = 0;
                   EN = 1;
         }
}
//LCD寫命令函數
void wc51r(uchar  j)
{
     fbusy();
         EN = 0;
         RS = 0;
         RW = 0;
         EN = 1;
         P2 = j;
         EN = 0;
}
//LCD寫數據函數
void wc51ddr(uchar   j)
{
     fbusy();
         EN = 0;
         RS = 1;
         RW = 0;
         EN = 1;
         P2 = j;
         EN = 0;
}

void init()
{
     wc51r(0x01);
         wc51r(0x38);
         wc51r(0x0c);
         wc51r(0x06);
}
                      //延時程序
void delay(uint  i)
{
     uint y,j;
         for (j=0;j<i;j++)
         {
              for (y=0;y<0xff;y++) {;}
         }
}
void main(void)
{
     uchar i,set;
         uchar data temp;
         SP=0X50;
         delay(10);
         init();
         wc51r(0x80);
         for (i=0;i<5;i++) wc51ddr(datechar[ i]);
         wc51r(0xc0);
         for (i=0;i<5;i++) wc51ddr(timechar[ i]);
         while(1)
         {
              P3=0XFF;
                  if(key0==0)
                  {
                       delay(10);
                           if(key0==0)
                           {
                                while(key0==0);
                                        set++;
                                        if(set==6) set=0;
                           }  
                             
                  }
                  
                  
                  if(key1==0)
                  {
                       delay(10);
                           if(key1==0)
                           {
                                while (key1==0);
                                        switch(set)
                                        {
                                             case 1:
                                                 tdata[0]++;
                                                 if(tdata[0]==100) tdata[0]=0;
                                                 temp=(tdata[0]/10)*16+tdata[0]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x8c,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;
                                                
                                                 case 2:
                                                 tdata[1]++;
                                                 if(tdata[1]==13) tdata[1]=1;
                                                 temp=(tdata[1]/10)*16+tdata[1]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x88,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;
                                                
                                                 case 3:
                                                 tdata[2]++;
                                                 if(tdata[2]==32) tdata[2]=1;
                                                 temp=(tdata[2]/10)*16+tdata[2]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x86,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;

                                                 case 4:
                                                 ttime[2]++;
                                                 if(ttime[2]==24) ttime[2]=0;
                                                 temp=(ttime[2]/10)*16+ttime[0]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x84,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;

                                                 case 5:
                                                 ttime[1]++;                                                                                                        
                                                 if(ttime[1]==60) ttime[1]=0;
                                                 temp=(ttime[2]/10)*16+ttime[0]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x84,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;
                                        }
                           }     
                  }
                  if(key2==0)
                  {
                       delay(10);
                           if (key2==0)
                           {
                                while (key2==0);
                                        switch(set)
                                        {
                                             case 1:
                                                 tdata[0]--;
                                                 if (tdata[0]==0xff)  tdata[0]=99;
                                                 temp=(tdata[0]/10)*16+tdata[0]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x8c,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;

                                                 case 2:
                                                 tdata[1]--;
                                                 if (tdata[1]==0x00)  tdata[1]=12;
                                                 temp=(tdata[1]/10)*16+tdata[1]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x88,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;

                                                 case 3:
                                                 tdata[2]--;
                                                 if (tdata[2]==0x00)  tdata[2]=31;
                                                 temp=(tdata[2]/10)*16+tdata[2]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x86,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;

                                                 case 4:
                                                 ttime[2]--;
                                                 if (ttime[2]==0xff) ttime[2]=23;
                                                 temp=(ttime[2]/10)*16+ttime[2]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x84,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;

                                                 case 5:
                                                 ttime[1]--;
                                                 if (ttime[1]==0xff) ttime[1]=59;
                                                 temp=(ttime[1]/10)*16+ttime[1]%10;
                                                 v_W1302(0x8e,0);
                                                 v_W1302(0x82,temp);
                                                 v_W1302(0x8e,0x80);
                                                 break;
                                        }
                           }
                  }
                  temp=uc_R1302(0x8d);
                  tdata[0]=(temp/16)*10+temp%16;
          datebuffer[0]=0x30+temp/16;
                  datebuffer[1]=0x30+temp%16;

                  temp=uc_R1302(0x89);
                  tdata[1]=(temp/16)*10+temp%16;
                  datebuffer[3]=0x30+temp/16;
                  datebuffer[4]=0x30+temp%16;

                  temp=uc_R1302(0x87);
                  tdata[2]=(temp/16)*10+temp%16;
                  datebuffer[6]=0x30+temp/16;
                  datebuffer[7]=0x30+temp%16;

                  temp=uc_R1302(0x85);
                  temp=temp&0x7f;
                  ttime[2]=(temp/16)*10+temp%16;
                  timebuffer[0]=0x30+temp/16;
                  timebuffer[1]=0x30+temp%16;

                  temp=uc_R1302(0x83);
                  ttime[1]=(temp/16)*10+temp%16;
                  timebuffer[3]=0x30+temp/16;
                  timebuffer[4]=0x30+temp%16;

                  temp=uc_R1302(0x81);
                  temp=temp&0x7f;
                  ttime[0]=(temp/16)*10+temp%16;
                  timebuffer[6]=0x30+temp/16;
                  timebuffer[7]=0x30+temp%16;

                  wc51r(0x86);
                  for (i=0;i<8;i++) wc51ddr(datebuffer[ i]);

                  wc51r(0xc6);
                  for (i=0;i<8;i++) wc51ddr(timebuffer[ i]);
         }
}

proteus仿真:


仿真時LCD無顯示,向大家求助
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2021-6-7 20:42 | 只看該作者
本壇搜索一下有相關成品,除了應付師傅一般都直接上真的而不是仿真。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:477474 發表于 2021-6-7 21:17 | 只看該作者
我這仿真沒問題啊!是否總線定義出問題了?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:568565 發表于 2021-6-7 21:39 | 只看該作者
數據線那八位你都沒加上網絡標號

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:862831 發表于 2021-6-7 21:58 | 只看該作者
你試一下把液晶中檢測“忙”的語句去掉,我之前用1602的時候也會出現這種情況,不知道為什么去掉檢測“忙”的語句就好了。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:230742 發表于 2021-6-7 23:27 | 只看該作者
實物都好使了還要啥仿真。有些教育方式真的有些倒退。我就不信那個公司會不看實物,先看看仿真的。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:592145 發表于 2021-6-8 11:04 | 只看該作者
1602的VEE也就是V0應該接一個10K的電位器用來調節液晶對比度,不然就是液晶顯示也看不到現象

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷亚洲国产女人的天堂 | 成人免费观看视频 | 国产精品国产a | 懂色av一区二区三区在线播放 | 日韩中文不卡 | 欧美日韩精品久久久免费观看 | 日韩在线精品强乱中文字幕 | 毛片在线免费播放 | 九九亚洲 | 国产做a爱片久久毛片 | 伊色综合久久之综合久久 | 欧美一区二区三区在线观看视频 | 精品av天堂毛片久久久借种 | 亚洲乱码一区二区 | 久久成人在线视频 | 日韩精品久久久久久 | 国产一区二区三区四区三区四 | 精品国产欧美日韩不卡在线观看 | 国产免费一区二区三区 | 久久久中文 | av手机免费在线观看 | 久久国产精品色av免费观看 | 国产精品免费一区二区三区 | 国产精品久久久久久婷婷天堂 | 视频一区二区在线 | 爱爱免费视频网站 | 亚洲二区视频 | 欧美日韩视频在线 | 亚洲国产精品久久 | 久草视频在线播放 | 色婷婷av久久久久久久 | 久久精品国产亚洲 | 可以在线看的黄色网址 | 羞羞色在线观看 | 福利片在线看 | 日韩精品免费 | 久久久成人精品 | 天啪| 91九色在线观看 | 亚洲v日韩v综合v精品v | 欧美在线一区二区三区 |