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

QQ登錄

只需一步,快速開始

搜索
查看: 5758|回復(fù): 2
收起左側(cè)

51單片機(jī) DS1302時(shí)鐘+MAX7219驅(qū)動(dòng)數(shù)碼管顯示時(shí)間

[復(fù)制鏈接]
ID:669393 發(fā)表于 2021-1-26 23:03 | 顯示全部樓層 |閱讀模式
初始時(shí)間設(shè)定為23-59-50蜂鳴器接P2^3腳,到00-00-00時(shí),蜂鳴器響一秒
MAX7219用SPI總線和8*8靜態(tài)RAM控制數(shù)碼管,數(shù)碼管不用循環(huán)掃描動(dòng)態(tài)顯示,數(shù)碼管不閃爍,無(wú)殘影。
避免了因數(shù)碼管動(dòng)態(tài)掃描可能導(dǎo)致DS1302計(jì)時(shí)錯(cuò)誤MAX7219自帶BCD譯碼,驅(qū)動(dòng)數(shù)碼管顯示無(wú)需段碼和位碼表
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;

  5. sbit Max7219_pinDIN = P2^2;
  6. sbit Max7219_pinCS  = P2^1;
  7. sbit Max7219_pinCLK = P2^0;
  8. sbit TSCLK = P1^0;
  9. sbit TIO = P1^1;
  10. sbit TRST = P1^2;
  11. sbit beep = P2^3;
復(fù)制代碼

(如用74HC573驅(qū)動(dòng)的數(shù)碼管)


實(shí)物圖

實(shí)物圖
回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2021-1-27 01:25 | 顯示全部樓層
完整程序能分享下嗎?
回復(fù)

使用道具 舉報(bào)

ID:669393 發(fā)表于 2021-1-27 09:44 | 顯示全部樓層
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;

  5. sbit Max7219_pinDIN = P2^2;
  6. sbit Max7219_pinCS  = P2^1;
  7. sbit Max7219_pinCLK = P2^0;
  8. sbit TSCLK = P1^0;
  9. sbit TIO = P1^1;
  10. sbit TRST = P1^2;
  11. sbit beep = P2^3;
  12. void delay(uint z)
  13. {
  14.         uint x,y;
  15.         for(x = z; x > 0; x--)
  16.                 for(y = 114; y > 0 ; y--);                
  17. }
  18. void Write_Max7219_byte(uchar DATA)         
  19. {
  20.         uchar i;                   
  21.         for(i=8;i>=1;i--)
  22.         {       
  23.                 Max7219_pinCLK=0;                                       
  24.                 Max7219_pinDIN=DATA&0x80;
  25.                 DATA=DATA<<1;
  26.                 Max7219_pinCLK=1;
  27.         }                                 
  28. }
  29. void Write_Max7219(uchar address,uchar dat)
  30. {
  31.      Max7219_pinCS=0;
  32.          Write_Max7219_byte(address);           //寫入地址,即數(shù)碼管編號(hào)
  33.      Write_Max7219_byte(dat);               //寫入數(shù)據(jù),即數(shù)碼管顯示數(shù)字
  34.          Max7219_pinCS=1;                        
  35. }

  36. void Init_MAX7219(void)
  37. {
  38.         Write_Max7219(0x09, 0xff);       //譯碼方式:BCD碼
  39.         Write_Max7219(0x0a, 0x03);       //亮度
  40.         Write_Max7219(0x0b, 0x07);       //掃描界限;4個(gè)數(shù)碼管顯示
  41.         Write_Max7219(0x0c, 0x01);       //掉電模式:0,普通模式:1
  42.         Write_Max7219(0x0f, 0x01);       //顯示測(cè)試:1;測(cè)試結(jié)束,正常顯示:0
  43. }

  44. void display(uchar hour, uchar min, uchar sec )
  45. {
  46.         uchar hour1, hour2, min1, min2, sec1, sec2;

  47.         hour1 =  hour / 10 % 10;
  48.         hour2 = hour % 10;

  49.         min1 =  min / 10 % 10;
  50.         min2 = min % 10;

  51.         sec1 =  sec / 10 % 10;
  52.         sec2 = sec % 10;

  53.         Write_Max7219(1,sec2);
  54.         Write_Max7219(2,sec1);
  55.         Write_Max7219(3,0x0A);          //顯示-
  56.         Write_Max7219(4,min2);
  57.         Write_Max7219(5,min1);
  58.         Write_Max7219(6,0x0A);
  59.         Write_Max7219(7,hour2);
  60.         Write_Max7219(8,hour1);
  61. }
  62. //寫DS1302數(shù)據(jù)
  63. void Write_DS1302_Data(uchar cmd, uchar dat)
  64. {
  65.         uchar i;
  66.         TRST = 0;
  67.         TSCLK = 0;
  68.         TRST = 1;
  69.         for(i=0;i<8;i++)
  70.         {
  71.                 TSCLK = 0;
  72.                 TIO = cmd & 0x01;        //從低到高寫數(shù)據(jù)
  73.                 TSCLK = 1;
  74.                 cmd >>= 1;
  75.         }
  76.         for(i=0;i<8;i++)
  77.         {
  78.                 TSCLK = 0;
  79.                 TIO = dat & 0x01;
  80.                 TSCLK = 1;
  81.                 dat >>= 1;
  82.         }               
  83. }
  84. //讀DS1302數(shù)據(jù)
  85. uchar Read_DS1302_Data(uchar cmd)
  86. {
  87.         uchar i, dat;
  88.         TRST = 0;
  89.         TSCLK = 0;
  90.         TRST = 1;
  91.         for(i=0;i<8;i++)
  92.         {
  93.                 TSCLK = 0;
  94.                 TIO = cmd & 0x01;
  95.                 TSCLK = 1;
  96.                 cmd >>= 1;       
  97.         }
  98.         for(i=0;i<8;i++)
  99.         {
  100.                 TSCLK = 0;
  101.                 dat >>= 1;
  102.                 if(TIO) dat |= 0x80;
  103.                 TSCLK = 1;
  104.         }       
  105.         return dat;
  106. }

  107. uchar BCD_Chg_Data(uchar dat)
  108. {
  109.         uchar dat1, dat2;
  110.         dat1 = dat / 16;
  111.         dat2 = dat % 16;
  112.         dat2 = dat2 + dat1*10;       
  113.         return dat2;
  114. }
  115. void Init_DS1302()
  116. {
  117.         Write_DS1302_Data(0x8e, 0);                    //清除寫保護(hù)
  118.         Write_DS1302_Data(0x80, 0x50);        //秒
  119.         Write_DS1302_Data(0x82, 0x59);        //分
  120.         Write_DS1302_Data(0x84, 0x23);        //時(shí)
  121.         Write_DS1302_Data(0x8e, 0x80);                //打開寫保護(hù)
  122. }
  123. void main()
  124. {
  125.         uchar sec, min, hour;
  126.         Init_MAX7219();
  127.         delay(1000);
  128.         Write_Max7219(0x0f, 0x00);
  129.         Init_DS1302();
  130.         while(1)
  131.         {
  132.                 Write_DS1302_Data(0x8e, 0);       
  133.                 sec = BCD_Chg_Data(Read_DS1302_Data(0x81));         //讀寄存器
  134.                 min = BCD_Chg_Data(Read_DS1302_Data(0x83));
  135.                 hour = BCD_Chg_Data(Read_DS1302_Data(0x85));
  136.                 Write_DS1302_Data(0x8e, 0x80);
  137.                 display(hour, min, sec);
  138.                 if(hour==0 && min==0 && sec==0)
  139.                 {
  140.                         beep = 0;
  141.                         delay(1000);
  142.                         beep = 1;
  143.                 }
  144.         }
  145. }





復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表