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

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

QQ登錄

只需一步,快速開始

搜索

單片機(jī)ds1302在1602上顯示不走字是什么原因?

查看數(shù): 1493 | 評(píng)論數(shù): 8 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2024-6-5 17:07

正文摘要:

大佬們,1302在1602上顯示不走字是什么原因?求大佬指導(dǎo) 代碼在2樓

回復(fù)

ID:1067798 發(fā)表于 2024-6-6 15:27
lkc8210 發(fā)表于 2024-6-5 18:41
代碼被吞了,請(qǐng)編輯一下
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. //---------------1302引腳定義-----------------------
  5. sbit RST=P1^0;    //RST=1時(shí)允許操作1302
  6. sbit SCLK=P1^1;   //1302時(shí)鐘腳,低電平到高電平跳變時(shí)寫入
  7. sbit IO=P1^2;     //IO寫入或讀出數(shù)據(jù)腳,串行形式。
  8. //---------------1602引腳定義------------------------
  9. sbit E=P1^5;      //使能端,E=1允許讀寫操作,E=0禁止。
  10. sbit RW=P1^4;    //RW=1讀出數(shù)據(jù),RW=0寫入數(shù)據(jù)。
  11. sbit RS=P1^3;    //RS=1讀寫數(shù)據(jù)寄存器,RS=0讀寫指令寄存器。
  12. sbit ACC7=ACC^7;
  13. //---------------1302,1602共用延時(shí)程序------------------------
  14. void  delay(int m)
  15.   {
  16.      int i,j;
  17.     for(i=0;i<m;i++)
  18.     for(j=0;j<10;j++);
  19.    }
  20. //------------------寫1302程序-----------------------------
  21. void  Wr1302(uchar wr)
  22.   {
  23.      uchar i;
  24.      SCLK=0;           //sclk低電平到高電平跳變時(shí)寫入數(shù)據(jù)
  25.      for(i=0;i<8;i++)
  26.     {
  27.       IO=wr & 0x01;   //寫入1302數(shù)據(jù),IO端口
  28.       SCLK=1;        //sclk低電平到高電平跳變時(shí)寫入數(shù)據(jù)
  29.       wr>>=1;         //右一位
  30.       delay(20);
  31.       SCLK=0;        //關(guān)閉
  32.       }
  33.    }
  34. //-----------------讀1302程序------------------------
  35.   uchar Rd1302()
  36. {
  37.   uchar i;
  38.   IO=1;                  //允許數(shù)據(jù)輸入輸出
  39.   for(i=0;i<8;i++)
  40.     {
  41.       ACC>>=1;      //ACC右一位
  42.      ACC7=IO;      //ACC第7位必須是高電平
  43.      SCLK=1;       //時(shí)鐘高電平向低電平的跳變寫入一個(gè)數(shù)據(jù)
  44.      delay(20);
  45.      SCLK=0;
  46.     };
  47.    return ACC;
  48. }
  49. //------------突發(fā)寫程序----------------------------------
  50.    void  TWr1302(uchar  x[])
  51.   {
  52.     int i;
  53.     RST=0;                     //復(fù)位,低電平有效
  54.     Wr1302(0xbe);
  55.     for(i=0;i<8;i++)
  56.     Wr1302(x[i]);
  57.     }   
  58. //-----------突發(fā)讀程序------------------------------------
  59.   void TRead(uchar x[])
  60. {
  61.     uchar i;
  62.     RST=1;                //高電平復(fù)位信號(hào)無效
  63.     Wr1302(0xbf);        //1302突發(fā)讀寄存器
  64.     for(i=0;i<7;i++)
  65.     x[i]=Rd1302();       //讀1302的數(shù)據(jù)
  66.     RST=0;               //高電平復(fù)位信號(hào)有效
  67.   }
  68.    
  69. //--------------1302啟動(dòng)程序---------------------------------
  70.   void Cmd_wr(c,d)
  71. {
  72. RST=1;              //RST=1時(shí)允許對(duì)1302操作
  73. Wr1302(c);         //讀1302,寫入指令字
  74. Wr1302(d);         //讀1302,寫入指令字
  75. RST=0;          //禁止對(duì)1302操作
  76. }

  77. //---------------寫入指令1602 ------------------------
  78. void WR_cmd(uint cmd)
  79.   {
  80.     RW=0;        //向1602lcd寫入指令或數(shù)據(jù)允許位
  81.     P0=cmd;      //將數(shù)據(jù)送到P1口
  82.     RS=0;        //向1602寫入指令
  83.     E=1;         //從高電平到低電平的跳變寫入一個(gè)數(shù)據(jù)
  84.     delay(1);
  85.     E=0;
  86. }
  87. //===============1602寫入數(shù)據(jù)=====================
  88. void WR_data(uint dat)
  89.   {
  90.     RS=1;        //向1602寫入指令
  91.     RW=0;        //向1602lcd寫入指令或數(shù)據(jù)允許位
  92.     P0=dat;     //將數(shù)據(jù)送到P1口
  93.     E=1;        //1602時(shí)鐘從高電平向低電平的跳變寫入一個(gè)數(shù)據(jù)
  94.     delay(1);
  95.     E=0;
  96. }
  97. //==============1602初始化程序===================
  98. void init1602(void)
  99. {
  100.    WR_cmd(0x38);    //模式設(shè)置為8位數(shù)據(jù)總線,顯示2行數(shù)據(jù) 5x7點(diǎn)陣/字符
  101.    WR_cmd(0x0c);    // 打開顯示
  102.    WR_cmd(0x06);    //顯示模式設(shè)置為寫入新的數(shù)據(jù)光標(biāo)右移
  103.    WR_cmd(0x01);    //清屏顯示
  104.    delay(10);
  105. }
  106. //===============1602顯示程序===================
  107. void  display(char strlen,uchar *table)    //一個(gè)變量前加*說明此變量時(shí)指針形式
  108. {
  109.   uchar i;
  110.         for(i=0;i<strlen;i++)                     //判一行16個(gè)數(shù)據(jù)是否都寫入進(jìn)1602
  111.         {
  112.           WR_data(table[i]);                            //數(shù)據(jù)寫入1602
  113.         }
  114.         delay(20);                                //延時(shí)20us
  115. }

  116. //==============1602與1302主程序=====================
  117. void main(void)
  118. { uchar a[8]={0x00,0x57,0x12,0x06,0x07,0x06,0x18,0x00}; //00秒57分12時(shí)06日07月06-5周18年
  119. uchar Y[16]={0x32,0x30,0x00,0x00,0x2d,0x00,0x00,0x2d,
  120.               0x00,0x00,0x2d,0x57,0x65,0x65,0x6b,0x00};  //定義1602第一行顯示的字符

  121. uchar H[16]={0x00,0x00,0x3a,0x00,0x00,0x3a,0x00,0x00,
  122.               0x2d,0x2d,0x4f,0x4b,0x2d,0x21,0x00,0x00};  //定義1602第二行顯示的字符

  123. uchar b[7];                 //讀出的數(shù)據(jù)存儲(chǔ)位置
  124.     Cmd_wr(0x8e,0x00);         //啟動(dòng)1302,0x8e寫保護(hù)中寫單元地址,只能讀不再寫。
  125.    // TWr1302(a);           //突發(fā)寫入(可以試驗(yàn)是否能寫入,能寫入就正常,測(cè)試時(shí)使用)
  126.    // Cmd_wr(0x8e,0x00);      //禁止寫入1302
  127. init1602();
  128.   delay(20);
  129. while(1)                        //循環(huán)
  130.    {
  131.     TRead(b);                   //突發(fā)讀,可以讀到b數(shù)組中
  132.     Y[2]=(0x30+b[6]/16);       //0x30是ASCII阿拉伯?dāng)?shù)字的首地址
  133.     Y[3]=(0x30+b[6]%16);
  134.     Y[5]=(0x30+b[4]/16);
  135.     Y[6]=(0x30+b[4]%16);
  136.     Y[8]=(0x30+b[3]/16);
  137.     Y[9]=(0x30+b[3]%16);      
  138.     if(b[5]==1)
  139.       Y[15]=7+0x30;
  140.     else
  141.        Y[15]=b[5]-1+0x30;
  142.             H[0]=(0x30+b[2]/16);
  143.             H[1]=(0x30+b[2]%16);
  144.             H[3]=(0x30+b[1]/16);
  145.             H[4]=(0x30+b[1]%16);
  146.             H[6]=(0x30+b[0]/16);
  147.             H[7]=(0x30+b[0]%16);   
  148.            // E=0;
  149. // Cmd_wr(0x8e,0x00);               //WP寫保護(hù)位設(shè)置為不工作方式
  150.   
  151.   WR_cmd(0x80);                     //第一行顯示地址
  152.   display(16,Y);
  153.   WR_cmd(0x80+0x40);                //第二行顯示地址
  154.   display(16,H);
  155. }
  156. }
復(fù)制代碼
ID:161164 發(fā)表于 2024-6-7 09:53

經(jīng)排查后得知,Rd1302內(nèi)用了ACC寄存器來運(yùn)算引致返回值一直為零


可以修改為以下代碼


ID:1109793 發(fā)表于 2024-6-6 18:34
cnfloatleaf 發(fā)表于 2024-6-6 17:18
DS1302的SIO一定要接上拉電阻,實(shí)際驗(yàn)證過的

實(shí)物是要有,在仿真里面也許不需要吧。
ID:1085441 發(fā)表于 2024-6-6 17:18
DS1302的SIO一定要接上拉電阻,實(shí)際驗(yàn)證過的
ID:1067798 發(fā)表于 2024-6-6 15:26
cnfloatleaf 發(fā)表于 2024-6-5 17:59
看電路圖SIO引腳少了上拉電阻,必須要有

IO腳不接上拉電阻也行吧,好像沒多大影響,我剛試了一下
ID:619259 發(fā)表于 2024-6-5 19:32
顯示正常,不走時(shí)就是DS1302程序的問題了
ID:161164 發(fā)表于 2024-6-5 18:41
代碼被吞了,請(qǐng)編輯一下
ID:1085441 發(fā)表于 2024-6-5 17:59
看電路圖SIO引腳少了上拉電阻,必須要有

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久一区二区国产 | 久色一区 | 韩国av一区二区 | 国产一区 在线视频 | 日韩福利 | 亚洲国产成人精品女人久久久 | 性生活毛片| 国产精品一区二区三区四区 | 色视频网站在线观看 | 福利av在线 | 久久福利电影 | 日韩一区二区福利视频 | 欧美亚洲视频在线观看 | 91麻豆久久久 | 伊人免费在线观看 | 亚洲精品电影网在线观看 | 亚洲欧美一区二区三区在线 | 欧美一区二区三区在线播放 | 国产免费一区 | 欧美在线观看一区 | 九九在线视频 | 亚洲精品在线视频 | 最近日韩中文字幕 | 高清一区二区三区 | 中文字幕国产视频 | 中国大陆高清aⅴ毛片 | 色婷婷狠狠 | 欧美精品在线一区二区三区 | 成人欧美一区二区三区在线播放 | 色影视| 91久久北条麻妃一区二区三区 | 最新国产精品精品视频 | 日本中文字幕在线视频 | 欧美日韩国产一区二区三区 | 一本一道久久a久久精品蜜桃 | 日日干天天干 | 亚洲毛片在线观看 | 在线欧美激情 | 欧美在线一区二区三区四区 | 精品一区二区三区在线视频 | 91九色在线观看 |