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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4119|回復: 2
收起左側

ds1302時鐘數碼管數字顯示的很亂 怎么辦 程序也沒有錯誤

[復制鏈接]
ID:377512 發表于 2018-7-24 14:32 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define MAIN_Fosc    11059200UL

  4. /*自定義類型明*/
  5. typedef unsigned char INT8U;
  6. typedef unsigned char uchar;

  7. typedef unsigned int INT16U;
  8. typedef unsigned int uint;
  9. /*聲明硬件的接口*/
  10. sbit TSCLK = P1^0;//時鐘線
  11. sbit TIO = P1^1;  //數據線
  12. sbit TRST = P1^2; //使能端

  13. sbit DU = P2^6;//段選
  14. sbit WE = P2^7;//位選
  15. /*共陽極數碼管段選碼*/
  16. uchar code table[]={
  17. //         0                1           2          3                  4                5
  18.         0xc0,  0xf9,  0xa4,  0xb0,  0x99,  0x92,  
  19. //         6                 7                8           9          .                 關顯示
  20.     0x82,  0xf8,  0x80,  0x90,  0x7f,   0xff
  21. };
  22. /*位選碼*/
  23. uchar code T_COM[] = {
  24. //1      2     3       4     5      6
  25. 0x01,  0x02,  0x04,  0x08,  0x10,  0x20
  26. };
  27. /*延時函數*/
  28. void Delay_Ms(INT16U ms)
  29. {
  30.   INT16U i;
  31.   do{
  32.             i = MAIN_Fosc/96000;
  33.           while(--i);
  34.     }while(--ms);
  35. }
  36. /*顯示函數*/
  37. void Display(uchar Hour,Min,Sec)
  38. {
  39.    //第一位數碼管 小時十位
  40.    DU = 0;
  41.    P0 = table[Hour/10];
  42.    DU = 1;
  43.    DU = 0;

  44.    WE = 0;
  45.    P0 = T_COM[0];
  46.    WE = 1;
  47.    WE = 0;
  48.    Delay_Ms(3);
  49.    //第二位數碼管 小時個位
  50.    DU = 0;
  51.    P0 = table[Hour%10] | 0x7f;// 0111 1111 顯示小數點
  52.    DU = 1;
  53.    DU = 0;

  54.    WE = 0;
  55.    P0 = T_COM[1];
  56.    WE = 1;
  57.    WE = 0;
  58.    Delay_Ms(3);
  59.    //第三位數碼管
  60.    DU = 0;
  61.    P0 = table[Min/10];
  62.    DU = 1;
  63.    DU = 0;

  64.    WE = 0;
  65.    P0 = T_COM[2];
  66.    WE = 1;
  67.    WE = 0;
  68.    Delay_Ms(3);
  69.    //第四位數碼管
  70.    DU = 0;
  71.    P0 = table[Min%10] | 0x7f;
  72.    DU = 1;
  73.    DU = 0;

  74.    WE = 0;
  75.    P0 = T_COM[3];
  76.    WE = 1;
  77.    WE = 0;
  78.    Delay_Ms(3);
  79.    //第五位數碼管
  80.    DU = 0;
  81.    P0 = table[Sec/10];
  82.    DU = 1;
  83.    DU = 0;
  84.    
  85.    WE = 0;
  86.    P0 = T_COM[4];
  87.    WE = 1;
  88.    WE = 0;
  89.    Delay_Ms(3);
  90.    //第六位數碼管
  91.    DU = 0;
  92.    P0 = table[Sec%10];
  93.    DU = 1;
  94.    DU = 0;

  95.    WE = 0;
  96.    P0 = T_COM[5];
  97.    WE = 1;
  98.    WE = 0;
  99.    Delay_Ms(3);
  100. }
  101. //寫DS1302
  102. void Writer_DS1302_DAT(uchar cmd,uchar dat)         //命令和數據需要給出
  103. {
  104.     uchar i;
  105.         TRST = 0;
  106.         TSCLK = 0;
  107.         TRST = 1;
  108.         for(i = 0; i < 8; i++)
  109.           {
  110.             TSCLK = 0;
  111.                 TIO = cmd & 0x01;
  112.                 TSCLK = 1;//拉高時鐘總線接收數據
  113.             dat >>= 1;//右移一位 往最低位移 左移往最高位移          從低位開始發送 需右移 把八位數據出  從高位發送需左移
  114.       }
  115.    for(i = 0; i < 8; i++)
  116.       {
  117.          TSCLK = 0;
  118.                  TIO  = dat & 0x01;
  119.                  TSCLK = 1;
  120.                  dat >>= 1;  
  121.       }
  122. }
  123. //讀DS1302數據
  124. uchar Read_DS1302_DAT(uchar cmd)
  125. {
  126.    uchar i, dat;
  127.    TRST = 0;
  128.    TSCLK = 0;
  129.    TRST = 1;
  130.    for(i = 0;i < 8; i++)// 寫入命令
  131.    {
  132.                TSCLK = 0;
  133.                 TIO = cmd & 0x01;
  134.                 TSCLK = 1;
  135.                 dat >>= 1; //
  136.    }
  137.    for(i = 0; i < 8 ; i++)// 讀八次
  138.    {
  139.        TSCLK  = 0;
  140.            dat >>= 1;
  141.            if(TIO) dat |= 0x80;
  142.            TSCLK = 1;
  143.         }
  144.         return dat;
  145. }

  146. //數據轉BCD
  147. uchar Dat_Chg_BCD(uchar dat)
  148. {
  149.      uchar dat1,dat2;
  150.          dat1 = dat / 10;
  151.          dat2 = dat % 10;
  152.          dat2 = dat2 + dat1 * 16;
  153.          return dat2;
  154. }

  155. //BCD轉數據
  156. uchar BCD_Chg_Dat(uchar dat)
  157. {
  158.     uchar dat1,dat2;
  159.         dat1 = dat / 16;
  160.         dat2 = dat % 16;
  161.         dat2 = dat2 + dat1 * 10;
  162.         return dat2;
  163. }
  164. void main()
  165. {
  166.    uchar i;
  167.    uchar Sec,Min,Hour;
  168.    Writer_DS1302_DAT(0x8e, 0);
  169.    Writer_DS1302_DAT(0x80,Dat_Chg_BCD(30));
  170.    Writer_DS1302_DAT(0x82,Dat_Chg_BCD(15));
  171.    Writer_DS1302_DAT(0x84,Dat_Chg_BCD(19));
  172.    Writer_DS1302_DAT(0x8e,0x80);
  173.    while(1)
  174.    {
  175.      Writer_DS1302_DAT(0x8e,0);
  176.          Sec = BCD_Chg_Dat(Read_DS1302_DAT(0x81));
  177.          Min = BCD_Chg_Dat(Read_DS1302_DAT(0x83));
  178.          Hour = BCD_Chg_Dat(Read_DS1302_DAT(0x85));
  179.          Writer_DS1302_DAT(0x8e,0x80);
  180.          for(i = 0;i < 50; i++)
  181.          {
  182.             Display(Hour,Min,Sec);
  183.          }
  184.      }
  185. }
復制代碼

為什么仿真的時候 數碼管顯示數字很亂
捕獲3.PNG
回復

使用道具 舉報

ID:111634 發表于 2018-7-30 20:53 | 顯示全部樓層
本帖最后由 zl2168 于 2018-7-31 09:49 編輯

實例94  模擬電子鐘(由80C51定時器產生秒時基)
Proteus仿真一下,確認有效。
實例94 模擬電子鐘(由80C51定時器產生秒時基).rar (43.05 KB, 下載次數: 6)
模擬電子鐘.jpg
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

ID:380969 發表于 2018-7-31 00:59 | 顯示全部樓層
位選碼和段選碼和延遲
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av亚洲精品一部二部 | 成人av一区二区亚洲精 | 2023亚洲天堂 | 精久久 | 日本免费小视频 | 精品国产一区久久 | 国产精品视频免费观看 | 欧美日韩一区二区三区四区 | 欧美黑人一区二区三区 | 日韩乱码av| 欧美精品久久 | 在线视频国产一区 | 日干夜操 | 国产成人精品免高潮在线观看 | 久久免费精彩视频 | 久久久久久久久国产精品 | 超碰在线播 | 日韩中文字幕免费在线观看 | 久久高清| 羞羞视频网站在线观看 | 国产精品视频观看 | 国产精品视频一区二区三区 | 欧美黄色性生活视频 | 91av在线视频观看 | 罗宾被扒开腿做同人网站 | 99爱在线免费观看 | 久久久免费在线观看 | 在线婷婷 | 中文字幕 国产 | 九九热免费视频在线观看 | 国产一区二区三区 | 亚洲精品亚洲人成人网 | 91久久国产综合久久91精品网站 | 日韩免费激情视频 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 日韩成人在线观看 | 日韩一区二区三区在线 | 欧美三级在线 | 国产成人精品a视频一区www | 欧美激情综合五月色丁香小说 | 中文字幕动漫成人 |