欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機電子時鐘相關求助 [打印本頁]

作者: MovHeartYou    時間: 2021-6-7 20:07
標題: 單片機電子時鐘相關求助
擬用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無顯示,向大家求助

作者: man1234567    時間: 2021-6-7 20:42
本壇搜索一下有相關成品,除了應付師傅一般都直接上真的而不是仿真。
作者: lsqtzj    時間: 2021-6-7 21:17
我這仿真沒問題啊!是否總線定義出問題了?


作者: chenyinhu    時間: 2021-6-7 21:39
數據線那八位你都沒加上網絡標號
作者: sai_chen    時間: 2021-6-7 21:58
你試一下把液晶中檢測“忙”的語句去掉,我之前用1602的時候也會出現這種情況,不知道為什么去掉檢測“忙”的語句就好了。
作者: 啤酒瓶子老大    時間: 2021-6-7 23:27
實物都好使了還要啥仿真。有些教育方式真的有些倒退。我就不信那個公司會不看實物,先看看仿真的。
作者: 閆新凈    時間: 2021-6-8 11:04
1602的VEE也就是V0應該接一個10K的電位器用來調節液晶對比度,不然就是液晶顯示也看不到現象





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1