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

標題: STC單片機74HC595驅動8個數碼管 [打印本頁]

作者: wjm1978    時間: 2017-4-7 18:25
標題: STC單片機74HC595驅動8個數碼管
74HC595驅動8個數碼管源程序:
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited ----------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* --- Mobile: (86)13922805190 ----------------------------------------*/
  5. /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
  6. /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
  7. /* --- QQ:  800003751 -------------------------------------------------*/
  8. /* 如果要在程序中使用此代碼,請在程序中注明使用了宏晶科技的資料及程序   */
  9. /*---------------------------------------------------------------------*/


  10. /*************        本程序功能說明        **************

  11. 用STC的MCU的IO方式控制74HC595驅動8位數碼管。

  12. 顯示效果為: 數碼時鐘.

  13. 使用Timer0的16位自動重裝來產生1ms節拍,程序運行于這個節拍下, 用戶修改MCU主時鐘頻率時,自動定時于1ms.

  14. ******************************************/

  15. #define         MAIN_Fosc                22118400L        //定義主時鐘

  16. #include        "STC15Fxxxx.H"

  17. /****************************** 用戶定義宏 ***********************************/

  18. #define        Timer0_Reload        (65536UL -(MAIN_Fosc / 1000))                //Timer 0 中斷頻率, 1000次/秒

  19. /*****************************************************************************/


  20. #define DIS_DOT                0x20
  21. #define DIS_BLACK        0x10
  22. #define DIS_                0x11




  23. /*************        本地常量聲明        **************/
  24. u8 code t_display[]={                                                //標準字庫
  25. //         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  26.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  27. //black         -     H    J         K          L           N        o   P         U     t    G    Q    r   M    y
  28.         0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
  29.         0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};        //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

  30. u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                //位碼


  31. /*************        IO口定義        **************/
  32. sbit        P_HC595_SER   = P4^0;        //pin 14        SER                data input
  33. sbit        P_HC595_RCLK  = P5^4;        //pin 12        RCLk        store (latch) clock
  34. sbit        P_HC595_SRCLK = P4^3;        //pin 11        SRCLK        Shift data clock

  35. /*************        本地變量聲明        **************/

  36. u8         LED8[8];                //顯示緩沖
  37. u8        display_index;        //顯示位索引
  38. bit        B_1ms;                        //1ms標志

  39. u8        hour,minute,second;
  40. u16        msecond;

  41. /*************        本地函數聲明        **************/


  42. /****************  外部函數聲明和外部變量聲明 *****************/


  43. /********************** 顯示時鐘函數 ************************/
  44. void        DisplayRTC(void)
  45. {
  46.         if(hour >= 10)        LED8[0] = hour / 10;
  47.         else                        LED8[0] = DIS_BLACK;
  48.         LED8[1] = hour % 10;
  49.         LED8[2] = DIS_;
  50.         LED8[3] = minute / 10;
  51.         LED8[4] = minute % 10;
  52.         LED8[5] = DIS_;
  53.         LED8[6] = second / 10;
  54.         LED8[7] = second % 10;
  55. }

  56. /********************** RTC演示函數 ************************/
  57. void        RTC(void)
  58. {
  59.         if(++second >= 60)
  60.         {
  61.                 second = 0;
  62.                 if(++minute >= 60)
  63.                 {
  64.                         minute = 0;
  65.                         if(++hour >= 24)        hour = 0;
  66.                 }
  67.         }
  68. }


  69. /********************** 主函數 ************************/
  70. void main(void)
  71. {
  72.         u8        i,k;
  73.        
  74.         P0M1 = 0;        P0M0 = 0;        //設置為準雙向口
  75.         P1M1 = 0;        P1M0 = 0;        //設置為準雙向口
  76.         P2M1 = 0;        P2M0 = 0;        //設置為準雙向口
  77.         P3M1 = 0;        P3M0 = 0;        //設置為準雙向口
  78.         P4M1 = 0;        P4M0 = 0;        //設置為準雙向口
  79.         P5M1 = 0;        P5M0 = 0;        //設置為準雙向口
  80.         P6M1 = 0;        P6M0 = 0;        //設置為準雙向口
  81.         P7M1 = 0;        P7M0 = 0;        //設置為準雙向口

  82.         AUXR = 0x80;        //Timer0 set as 1T, 16 bits timer auto-reload,
  83.         TH0 = (u8)(Timer0_Reload / 256);
  84.         TL0 = (u8)(Timer0_Reload % 256);
  85.         ET0 = 1;        //Timer0 interrupt enable
  86.         TR0 = 1;        //Tiner0 run
  87.         EA = 1;                //打開總中斷
  88.        
  89.         display_index = 0;
  90.         hour   = 11;        //初始化時間值
  91.         minute = 59;
  92.         second = 58;
  93.         RTC();
  94.         DisplayRTC();
  95.        
  96. //        for(i=0; i<8; i++)        LED8[i] = DIS_BLACK;        //上電消隱
  97.         for(i=0; i<8; i++)        LED8[i] = i;        //顯示01234567
  98.         k = 0;

  99.         while(1)
  100.         {
  101.                 if(B_1ms)        //1ms到
  102.                 {
  103.                         B_1ms = 0;
  104.                         if(++msecond >= 1000)        //1秒到
  105.                         {
  106.                                 msecond = 0;
  107.                                 RTC();
  108.                                 DisplayRTC();
  109.                         }

  110.                 }
  111.         }
  112. }
  113. /**********************************************/


  114. /**************** 向HC595發送一個字節函數 ******************/
  115. void Send_595(u8 dat)
  116. {               
  117.         u8        i;
  118.         for(i=0; i<8; i++)
  119.         {
  120.                 dat <<= 1;
  121.                 P_HC595_SER   = CY;
  122.                 P_HC595_SRCLK = 1;
  123.                 P_HC595_SRCLK = 0;
  124.         }
  125. }

  126. /********************** 顯示掃描函數 ************************/
  127. void DisplayScan(void)
  128. {       
  129.         Send_595(~T_COM[display_index]);                                //輸出位碼
  130.         Send_595(t_display[LED8[display_index]]);        //輸出段碼

  131.         P_HC595_RCLK = 1;
  132.         P_HC595_RCLK = 0;                                                        //鎖存輸出數據
  133.         if(++display_index >= 8)        display_index = 0;        //8位結束回0
  134. }


  135. /********************** Timer0 1ms中斷函數 ************************/
  136. void timer0 (void) interrupt TIMER0_VECTOR
  137. {
  138.         DisplayScan();        //1ms掃描顯示一位
  139.         B_1ms = 1;                //1ms標志

  140. }


復制代碼

下載:
C語言.rar (19.47 KB, 下載次數: 103)

作者: shuma520    時間: 2017-8-14 11:43
如果 配SCH 比較只管了。
作者: 神劍無敵    時間: 2018-4-9 20:43
謝謝分享 下載研究一下
作者: qxdqx    時間: 2019-2-1 19:17
很好!下載學習學習
作者: wenfeizd    時間: 2020-1-29 14:04
不錯的學習程序,學習一下,謝謝!
作者: aide51    時間: 2020-3-12 10:43
這個可以學習下,帶上原理圖就好了,不過也值得點贊
作者: kz0018    時間: 2022-6-10 20:15
終于找到595時鐘程序了,有電路圖就更好了,不過還是要謝謝樓主的分享!
作者: 51hei892451    時間: 2022-7-29 12:22
是不是需要兩片595才行?




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