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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1240|回復(fù): 27
打印 上一主題 下一主題
收起左側(cè)

分散I/O口驅(qū)動(dòng)4位數(shù)碼管顯示只能顯示0,是什么原因?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72649 發(fā)表于 2025-1-15 22:43 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


  1. /**本程序用于測(cè)試分散I/O口驅(qū)動(dòng)4位數(shù)碼管顯示**/
  2. #include <STC12C5A60S2.h>
  3. #include <intrins.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. //----I/O口位功能定義-----------------------------------
  7. sbit da=P1^2;
  8. sbit db=P1^1;
  9. sbit dc=P0^1;
  10. sbit dd=P0^2;
  11. sbit de=P0^3;
  12. sbit df=P1^3;
  13. sbit dg=P1^4;
  14. sbit dp=P0^0;
  15. sbit w1=P0^4;
  16. sbit w2=P0^5;
  17. sbit w3=P0^6;
  18. sbit w4=P0^7;
  19. //不含小數(shù)點(diǎn)8段LED字形碼0-9+黑屏碼、共陽(yáng)極驅(qū)動(dòng)0亮1熄
  20. uchar duan_ma[11]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  21. uchar wei_ma[4]= {0x07,0x0b,0x0d,0x0e}; //字位碼
  22. uchar date[4];//顯示數(shù)據(jù)暫存
  23. //====熄屏延時(shí)a*1ms延時(shí)函數(shù)===============================
  24. void delay_1ms (uchar a)        //@12.000MHz
  25. {
  26.     uchar i, j;
  27.     while(a--)
  28.     {
  29.         _nop_();
  30.         _nop_();
  31.         i = 12;
  32.         j = 168;
  33.         do
  34.         {
  35.             while (--j);
  36.         }
  37.         while (--i);
  38.     }
  39. }
  40. //====顯示顏色a*10us=====================================
  41. void delay_10us(uchar a)                //@12.000MHz
  42. {
  43.     uchar i;
  44.     while(a--)
  45.     {
  46.         i = 27;
  47.         while (--i);
  48.     }
  49. }
  50. //=======================================================
  51. //將LED字形的8個(gè)筆段控制I/O引腳映射到變量的8個(gè)位上
  52. void segment_out(uchar dat)
  53. {
  54.     da=(bit)(dat&0x01);
  55.     db=(bit)(dat&0x02);
  56.     dc=(bit)(dat&0x04);
  57.     dd=(bit)(dat&0x08);
  58.     de=(bit)(dat&0x10);
  59.     df=(bit)(dat&0x20);
  60.     dg=(bit)(dat&0x40);
  61.     dp=(bit)(dat&0x80);
  62. }
  63. //=======================================================
  64. //將4個(gè)數(shù)位控制I/O引腳映射到變量的4個(gè)位上
  65. void position_out(uchar dat)
  66. {
  67.     w1=(bit)(dat&0x08);
  68.     w2=(bit)(dat&0x04);
  69.     w3=(bit)(dat&0x02);
  70.     w4=(bit)(dat&0x01);
  71. }
  72. //====數(shù)據(jù)拆分函數(shù)=======================================
  73. //提取出數(shù)據(jù)的千、百、十、個(gè)位的數(shù)值存入數(shù)組中
  74. void digits_obtain(uint dat)
  75. {
  76.     date[0]=dat/1000;
  77.     date[1]=dat%1000/100;
  78.     date[2]=dat%100/10;
  79.     date[3]=dat%10;
  80. }
  81. //====顯示輸出函數(shù)=======================================
  82. void display_out(uint dat)
  83. {
  84.     uchar i;
  85.     digits_obtain(dat);                //拆分?jǐn)?shù)據(jù)
  86.     for(i=0; i<4; i++)
  87.     {
  88.         if(date[0]==0)                //如果第一位為0則屏蔽掉
  89.         {
  90.             date[0]=10;
  91.         }
  92.         else
  93.         {
  94.             segment_out(duan_ma[date[i ]]);        //發(fā)送段顯示碼
  95.             position_out(wei_ma[i ]);                //發(fā)送位顯示碼
  96.             if(i==1)                                                //點(diǎn)亮百位與十位中間的小數(shù)點(diǎn)、最大顯示數(shù)據(jù)為99.99
  97.             {
  98.                 dp=0;
  99.             }
  100.             else
  101.             {
  102.                 dp=1;
  103.             }
  104.         }
  105. //以下為消隱及顯示亮度調(diào)整部分
  106.         delay_10us(20);                                //顯示時(shí)間、賦值變化可以改變顯示亮度
  107.         segment_out(duan_ma[10]);        //送黑屏碼
  108.         delay_1ms(5);                                //熄屏?xí)r間
  109.     }
  110. }
  111. //====主函數(shù)==============================================
  112. main()
  113. {
  114.     P0M1=0x00;
  115.     P0M0=0xff;                //P0口的8個(gè)引腳設(shè)定為推挽輸出
  116.     P1M1=0x00;
  117.     P1M0=0x1e;                //P1.1、P1.2、P1.3、P1.4設(shè)定為推挽輸出
  118.     while(1)
  119.     {
  120.         display_out(1234);
  121.     }
  122. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:828160 發(fā)表于 2025-1-16 01:10 | 只看該作者
有兩點(diǎn)可以優(yōu)化
1:改用共陰數(shù)碼管,可以省三極管
2:改用位域操作
回復(fù)

使用道具 舉報(bào)

板凳
ID:1109793 發(fā)表于 2025-1-16 07:36 | 只看該作者
DATE是個(gè)數(shù)組,你把它當(dāng)做下標(biāo)是幾個(gè)意思。你是不是應(yīng)該這樣duan_ma[date[i]];
還有wei_ma也有問(wèn)題。是不是也應(yīng)該寫(xiě)成wei_ma[i];,
回復(fù)

使用道具 舉報(bào)

地板
ID:92781 發(fā)表于 2025-1-16 09:05 | 只看該作者
96行, segment_out(duan_ma[date]);      其中date是數(shù)組類型,改為segment_out(duan_ma[i ])
回復(fù)

使用道具 舉報(bào)

5#
ID:342197 發(fā)表于 2025-1-16 09:32 | 只看該作者
segment_out(duan_ma[date]);        //發(fā)送段顯示碼
[date] 默認(rèn)是地址 0 ,所以只顯示0
修改:date[i]
回復(fù)

使用道具 舉報(bào)

6#
ID:68189 發(fā)表于 2025-1-16 09:45 | 只看該作者
新愛(ài)的壇友,你確定你的代碼沒(méi)有問(wèn)題嗎!你確定你已經(jīng)編譯通過(guò)了嗎!
LINE 96  segment_out(duan_ma[date]);        //發(fā)送段顯示碼
LINE 97 position_out(wei_ma);                //發(fā)送位顯示碼
這兩行代碼重點(diǎn)檢查一下......
回復(fù)

使用道具 舉報(bào)

7#
ID:291668 發(fā)表于 2025-1-16 09:46 | 只看該作者
1、先排除掉硬件問(wèn)題,接線問(wèn)題。2、直接用高低電平試試每一段是不是都能點(diǎn)亮。然后用程序控制。邏輯上不要有沖突。
回復(fù)

使用道具 舉報(bào)

8#
ID:1109793 發(fā)表于 2025-1-16 10:39 | 只看該作者
單片機(jī)研究協(xié)會(huì) 發(fā)表于 2025-1-16 01:10
有兩點(diǎn)可以優(yōu)化
1:改用共陰數(shù)碼管,可以省三極管
2:改用位域操作

位域怎么寫(xiě),請(qǐng)大俠指點(diǎn)一二
回復(fù)

使用道具 舉報(bào)

9#
ID:23606 發(fā)表于 2025-1-16 11:23 | 只看該作者
da=(bit)(duan_ma[dat]&0x01);
.......
回復(fù)

使用道具 舉報(bào)

10#
ID:1109793 發(fā)表于 2025-1-16 12:46 | 只看該作者
jjy1039 發(fā)表于 2025-1-16 08:59
54行大概是不對(duì)的
  • void segment_out(uchar dat)
  • {

  • 有沒(méi)有試過(guò)?軟件模擬也能看到的
    回復(fù)

    使用道具 舉報(bào)

    11#
    ID:1133081 發(fā)表于 2025-1-16 16:32 | 只看該作者
    數(shù)碼管顯示異常是樓主的數(shù)碼管位驅(qū)動(dòng)碼錯(cuò)誤所致。修改如下:
    1. /**本程序用于測(cè)試分散I/O口驅(qū)動(dòng)4位數(shù)碼管顯示**/
    2. #include <STC12C5A60S2.h>
    3. #include <intrins.h>
    4. #define uint unsigned int
    5. #define uchar unsigned char
    6. //----I/O口位功能定義-----------------------------------
    7. sbit da=P1^2;
    8. sbit db=P1^1;
    9. sbit dc=P0^1;
    10. sbit dd=P0^2;
    11. sbit de=P0^3;
    12. sbit df=P1^3;
    13. sbit dg=P1^4;
    14. sbit dp=P0^0;
    15. sbit w1=P0^4;
    16. sbit w2=P0^5;
    17. sbit w3=P0^6;
    18. sbit w4=P0^7;
    19. //不含小數(shù)點(diǎn)8段LED字形碼0-9+黑屏碼、共陽(yáng)極驅(qū)動(dòng)0亮1熄
    20. uchar duan_ma[11]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
    21. uchar wei_ma[4]= {0x07,0x0b,0x0d,0x0e}; //字位碼
    22. uchar date[4];//顯示數(shù)據(jù)暫存
    23. //====熄屏延時(shí)a*1ms延時(shí)函數(shù)===============================
    24. void delay_1ms (uchar a)        //@12.000MHz
    25. {
    26.     uchar i, j;
    27.     while(a--)
    28.     {
    29.         _nop_();
    30.         _nop_();
    31.         i = 12;
    32.         j = 168;
    33.         do
    34.         {
    35.             while (--j);
    36.         }
    37.         while (--i);
    38.     }
    39. }
    40. /*
    41. //====顯示顏色a*10us=====================================
    42. void delay_10us(uchar a)                //@12.000MHz
    43. {
    44.     uchar i;
    45.     while(a--)
    46.     {
    47.         i = 27;
    48.         while (--i);
    49.     }
    50. }*/
    51. //=======================================================
    52. //將LED字形的8個(gè)筆段控制I/O引腳映射到變量的8個(gè)位上
    53. void segment_out(uchar dat)
    54. {
    55.     da=(bit)(dat&0x01);
    56.     db=(bit)(dat&0x02);
    57.     dc=(bit)(dat&0x04);
    58.     dd=(bit)(dat&0x08);
    59.     de=(bit)(dat&0x10);
    60.     df=(bit)(dat&0x20);
    61.     dg=(bit)(dat&0x40);
    62.     dp=(bit)(dat&0x80);
    63. }
    64. //=======================================================
    65. /*
    66. //將4個(gè)數(shù)位控制I/O引腳映射到變量的4個(gè)位上
    67. void position_out(uchar dat)
    68. {
    69.     w1=(bit)(dat&0x08);
    70.     w2=(bit)(dat&0x04);
    71.     w3=(bit)(dat&0x02);
    72.     w4=(bit)(dat&0x01);
    73. }*/
    74. //====數(shù)據(jù)拆分函數(shù)=======================================
    75. //提取出數(shù)據(jù)的千、百、十、個(gè)位的數(shù)值存入數(shù)組中
    76. void digits_obtain(uint dat)
    77. {
    78.     date[0]=dat/1000;
    79.     date[1]=dat%1000/100;
    80.     date[2]=dat%100/10;
    81.     date[3]=dat%10;
    82. }
    83. //====顯示輸出函數(shù)=======================================
    84. void display_out(uint dat)
    85. {
    86.     uchar i;
    87.     digits_obtain(dat);                //拆分?jǐn)?shù)據(jù)
    88.     for(i=0; i<4; i++)
    89.     {
    90.         if(date[0]==0)                //如果第一位為0則屏蔽掉
    91.         {
    92.             date[0]=10;
    93.         }
    94.         else
    95.         {
    96.             segment_out(0xff);//段碼清除(消隱)
    97.                                 P0&=0x0f;//位碼清除
    98.                                 P0|=~(0x10<<i);//送位碼
    99.             segment_out(duan_ma[date[i]]);        //發(fā)送段顯示碼
    100. //          position_out(wei_ma[i]);                //發(fā)送位顯示碼
    101.             if(i==1)                                                //點(diǎn)亮百位與十位中間的小數(shù)點(diǎn)、最大顯示數(shù)據(jù)為99.99
    102.             {
    103.                 dp=0;
    104.             }
    105.             else
    106.             {
    107.                 dp=1;
    108.             }
    109.                                 delay_1ms(5);
    110.        }
    111. //以下為消隱及顯示亮度調(diào)整部分
    112. //       delay_10us(20);                                //顯示時(shí)間、賦值變化可以改變顯示亮度
    113. //       segment_out(duan_ma[10]);        //送黑屏碼
    114. //       delay_1ms(5);                                //熄屏?xí)r間
    115.     }
    116. }
    117. //====主函數(shù)==============================================
    118. main()
    119. {
    120.     P0M1=0x00;
    121.     P0M0=0xff;                //P0口的8個(gè)引腳設(shè)定為推挽輸出
    122.     P1M1=0x00;
    123.     P1M0=0x1e;                //P1.1、P1.2、P1.3、P1.4設(shè)定為推挽輸出
    124.     while(1)
    125.     {
    126.         display_out(1234);
    127.     }
    128. }


    復(fù)制代碼
    回復(fù)

    使用道具 舉報(bào)

    12#
    ID:92781 發(fā)表于 2025-1-17 08:32 | 只看該作者
    xiaobendan001 發(fā)表于 2025-1-16 12:46
    有沒(méi)有試過(guò)?軟件模擬也能看到的

    這個(gè)我試了,你是對(duì)的,沒(méi)有錯(cuò)
    回復(fù)

    使用道具 舉報(bào)

    13#
    ID:72649 發(fā)表于 2025-1-21 22:13 | 只看該作者
    WL0123 發(fā)表于 2025-1-16 16:32
    數(shù)碼管顯示異常是樓主的數(shù)碼管位驅(qū)動(dòng)碼錯(cuò)誤所致。修改如下:

    如果這樣怎么修改

    1.png (26.67 KB, 下載次數(shù): 0)

    1.png
    回復(fù)

    使用道具 舉報(bào)

    14#
    ID:1133081 發(fā)表于 2025-1-22 11:30 | 只看該作者

    如果MCU采用的還是STC12C5A60S2那就沒(méi)有P55,只有P50~53。示例程序:
    1. #include <STC12C5A60S2.h>
    2. #include <intrins.h>
    3. #define uint unsigned int
    4. #define uchar unsigned char
    5. //----I/O口段定義-----------------------------------
    6. sbit da=P3^7;
    7. sbit db=P3^2;
    8. sbit dc=P3^3;
    9. sbit dd=P3^5;
    10. sbit de=P3^4;
    11. sbit df=P3^6;
    12. sbit dg=P1^1;
    13. sbit dp=P1^0;
    14. //不含小數(shù)點(diǎn)8段LED字形碼0-9+黑屏碼、共陽(yáng)極驅(qū)動(dòng)0亮1熄
    15. uchar duan_ma[11]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
    16. uchar date[4];//顯示數(shù)據(jù)暫存
    17. bit flag;

    18. void Timer0_Init(void)                //5毫秒@12.000MHz
    19. {
    20.         TMOD= 0x01;                                //設(shè)置定時(shí)器模式
    21.         TL0 = 0x78;                                //設(shè)置定時(shí)初始值
    22.         TH0 = 0xEC;                                //設(shè)置定時(shí)初始值
    23.         TF0 = 0;                                //清除TF0標(biāo)志
    24.         TR0 = 1;                                //定時(shí)器0開(kāi)始計(jì)時(shí)
    25.         EA = 1;                                        //開(kāi)總中斷
    26.         ET0 = 1;                                //開(kāi)T0中斷
    27. }
    28. //=======================================================
    29. //將LED字形的8個(gè)筆段控制I/O引腳映射到變量的8個(gè)位上
    30. void segment_out(uchar dat)
    31. {
    32.     da=(bit)(dat&0x01);
    33.     db=(bit)(dat&0x02);
    34.     dc=(bit)(dat&0x04);
    35.     dd=(bit)(dat&0x08);
    36.     de=(bit)(dat&0x10);
    37.     df=(bit)(dat&0x20);
    38.     dg=(bit)(dat&0x40);
    39.     dp=(bit)(dat&0x80);
    40. }
    41. //====數(shù)據(jù)拆分函數(shù)=======================================
    42. //提取出數(shù)據(jù)的千、百、十、個(gè)位的數(shù)值存入數(shù)組中
    43. void digits_obtain(uint dat)
    44. {
    45.     date[0]=dat/10;
    46.     date[1]=dat%10;
    47. }
    48. //====顯示輸出函數(shù)=======================================
    49. void display_out(uint dat)
    50. {
    51.         static uchar i;
    52.         digits_obtain(dat);//拆分?jǐn)?shù)據(jù)
    53.         segment_out(0xff);//段碼清除(消隱)
    54.         if(i==0){P50=0;P12=1;}//十位
    55.         else {P50=1;P12=0;}//個(gè)位
    56.         segment_out(duan_ma[date[i]]);//發(fā)送段顯示碼
    57.         i=++i%2;
    58. }

    59. //====主函數(shù)==============================================
    60. void main()
    61. {
    62.         Timer0_Init();
    63.         while(1)
    64.         {
    65.                 if(flag)//5ms
    66.                 {
    67.                         flag=0;
    68.                         display_out(34);
    69.                 }
    70.         }
    71. }

    72. void Timer0Interrupt(void) interrupt 1
    73. {
    74.         TL0 = 0x78;                                //設(shè)置定時(shí)初始值
    75.         TH0 = 0xEC;                                //設(shè)置定時(shí)初始值
    76.     flag=1;
    77. }


    復(fù)制代碼
    回復(fù)

    使用道具 舉報(bào)

    15#
    ID:72649 發(fā)表于 2025-1-23 06:41 | 只看該作者
    WL0123 發(fā)表于 2025-1-22 11:30
    如果MCU采用的還是STC12C5A60S2那就沒(méi)有P55,只有P50~53。示例程序:

    芯片是STC8G1K08
    回復(fù)

    使用道具 舉報(bào)

    16#
    ID:72649 發(fā)表于 2025-1-23 07:04 | 只看該作者
    WL0123 發(fā)表于 2025-1-22 11:30
    如果MCU采用的還是STC12C5A60S2那就沒(méi)有P55,只有P50~53。示例程序:

    修改一下,十位顯示9,個(gè)位無(wú)顯示。
    /*hjx5548 發(fā)表于 2025-1-21 22:13
    如果這樣怎么修改

    如果MCU采用的還是STC12C5A60S2那就沒(méi)有P55,只有P50~53。示例程序:*/

    //#include <STC12C5A60S2.h>
    #include "STC8G.h"
    #include <intrins.h>
    #define uint unsigned int
    #define uchar unsigned char
           
    //----I/O口段定義-----------------------------------
    sbit da=P3^7;
    sbit db=P3^2;
    sbit dc=P3^3;
    sbit dd=P3^5;
    sbit de=P3^4;
    sbit df=P3^6;
    sbit dg=P1^1;
    sbit dp=P1^0;

    //不含小數(shù)點(diǎn)8段LED字形碼0-9+黑屏碼、共陽(yáng)極驅(qū)動(dòng)0亮1熄
    uchar duan_ma[11]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
    uchar date[4];//顯示數(shù)據(jù)暫存
    bit flag;

    void Timer0_Init(void)                //5毫秒@11.0592MHz
    {
            AUXR |= 0x80;                        //定時(shí)器時(shí)鐘1T模式
            TMOD &= 0xF0;                        //設(shè)置定時(shí)器模式
            TL0 = 0x00;                                //設(shè)置定時(shí)初始值
            TH0 = 0x28;                                //設(shè)置定時(shí)初始值
            TF0 = 0;                                //清除TF0標(biāo)志
            TR0 = 1;                                //定時(shí)器0開(kāi)始計(jì)時(shí)
            ET0=1;
            EA=1;
    }

    //=======================================================
    //將LED字形的8個(gè)筆段控制I/O引腳映射到變量的8個(gè)位上
    void segment_out(uchar dat)
    {
        da=(bit)(dat&0x01);
        db=(bit)(dat&0x02);
        dc=(bit)(dat&0x04);
        dd=(bit)(dat&0x08);
        de=(bit)(dat&0x10);
        df=(bit)(dat&0x20);
        dg=(bit)(dat&0x40);
        dp=(bit)(dat&0x80);
    }
    //====數(shù)據(jù)拆分函數(shù)=======================================
    //提取出數(shù)據(jù)的千、百、十、個(gè)位的數(shù)值存入數(shù)組中
    void digits_obtain(uint dat)
    {
        date[0]=dat/10;
        date[1]=dat%10;
    }
    //====顯示輸出函數(shù)=======================================
    void display_out(uint dat)
    {
            static uchar i;
            digits_obtain(dat);//拆分?jǐn)?shù)據(jù)
            segment_out(0xff);//段碼清除(消隱)
           
            if(i==0)
            {P55=0;P12=1;}//十位
                                   
            else
            {P55=1;P12=0;}//個(gè)位
            segment_out(duan_ma[date]);//發(fā)送段顯示碼
            i=++i%2;
    }

    //====主函數(shù)==============================================
    void main()
    {
           
        P1M0 = 0x00; P1M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
        P5M0 = 0x00; P5M1 = 0x00;

            Timer0_Init();
            while(1)
            {
                    if(flag)//5ms
                    {
                            flag=0;
                            display_out(34);                                                               
                    }
            }
    }

    void Timer0Interrupt(void) interrupt 1
    {
                  TL0 = 0x00;                                //設(shè)置定時(shí)初始值
                  TH0 = 0x28;                                //設(shè)置定時(shí)初始值
            flag=1;
    }
    回復(fù)

    使用道具 舉報(bào)

    17#
    ID:1109793 發(fā)表于 2025-1-23 08:44 | 只看該作者

    回復(fù)

    使用道具 舉報(bào)

    18#
    ID:1133081 發(fā)表于 2025-1-23 14:55 | 只看該作者
    hjx5548 發(fā)表于 2025-1-23 07:04
    修改一下,十位顯示9,個(gè)位無(wú)顯示。
    /*hjx5548 發(fā)表于 2025-1-21 22:13
    如果這樣怎么修改

    如果MCU采用的還是STC12C5A60S2不需要設(shè)置端口模式,默認(rèn)是準(zhǔn)雙向。沒(méi)有P55,就在P50~53選一個(gè)空閑腳或其它空閑腳。你那十位顯示9其實(shí)是3和4的疊加。換芯片STC8G1K08,需要設(shè)置端口模式,因?yàn)槟J(rèn)是高阻。定時(shí)器用自動(dòng)重裝模式為好。上述兩款單片機(jī)可以直接驅(qū)動(dòng)數(shù)碼管,不需要加晶體管放大。數(shù)碼管段驅(qū)動(dòng)要加8個(gè)限流電阻。
    回復(fù)

    使用道具 舉報(bào)

    19#
    ID:72649 發(fā)表于 2025-1-23 22:35 | 只看該作者

    //====顯示輸出函數(shù)=======================================
    void display_out(uint dat)
    {
            static uchar i;
            digits_obtain(dat);//拆分?jǐn)?shù)據(jù)
            segment_out(0xff);//段碼清除(消隱)
           
            if(i==0)
            {P55=0;P12=1;}//十位
                                   
            else
            {P55=1;P12=0;}//個(gè)位
            segment_out(duan_ma[date]);//發(fā)送段顯示碼
            i=++i%2;
    }
    還是一樣
    回復(fù)

    使用道具 舉報(bào)

    20#
    ID:72649 發(fā)表于 2025-1-24 04:35 來(lái)自手機(jī) | 只看該作者
    WL0123 發(fā)表于 2025-1-23 14:55
    如果MCU采用的還是STC12C5A60S2不需要設(shè)置端口模式,默認(rèn)是準(zhǔn)雙向。沒(méi)有P55,就在P50~53選一個(gè)空閑腳或其 ...

    端口模式已經(jīng)設(shè)置void main()
    {
          
        P1M0 = 0x00; P1M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
        P5M0 = 0x00; P5M1 = 0x00;
    回復(fù)

    使用道具 舉報(bào)

    21#
    ID:72649 發(fā)表于 2025-1-24 05:11 | 只看該作者
    WL0123 發(fā)表于 2025-1-23 14:55
    如果MCU采用的還是STC12C5A60S2不需要設(shè)置端口模式,默認(rèn)是準(zhǔn)雙向。沒(méi)有P55,就在P50~53選一個(gè)空閑腳或其 ...

    #include "STC8G.h"
    #include <intrins.h>
    #define uint unsigned int
    #define uchar unsigned char
           
    //----I/O口段定義-----------------------------------
    sbit da=P3^7;
    sbit db=P3^2;
    sbit dc=P3^3;
    sbit dd=P3^5;
    sbit de=P3^4;
    sbit df=P3^6;
    sbit dg=P1^1;
    sbit dp=P1^0;

    //不含小數(shù)點(diǎn)8段LED字形碼0-9+黑屏碼、共陽(yáng)極驅(qū)動(dòng)0亮1熄
    uchar duan_ma[11]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
    uchar date[4];//顯示數(shù)據(jù)暫存
    bit flag;

    void Delay1ms(void)        //@11.0592MHz
    {
            unsigned char data i, j;

            i = 15;
            j = 90;
            do
            {
                    while (--j);
            } while (--i);
    }




    void Timer0_Init(void)                //1毫秒@12.000MHz
    {
            AUXR |= 0x80;                        //定時(shí)器時(shí)鐘1T模式
            TMOD &= 0xF0;                        //設(shè)置定時(shí)器模式
            TL0 = 0x20;                                //設(shè)置定時(shí)初始值
            TH0 = 0xD1;                                //設(shè)置定時(shí)初始值
            TF0 = 0;                                //清除TF0標(biāo)志
            TR0 = 1;                                //定時(shí)器0開(kāi)始計(jì)時(shí)
            ET0=1;
            EA=1;
    }

    //=======================================================
    //將LED字形的8個(gè)筆段控制I/O引腳映射到變量的8個(gè)位上
    void segment_out(uchar dat)
    {
        da=(bit)(dat&0x01);
        db=(bit)(dat&0x02);
        dc=(bit)(dat&0x04);
        dd=(bit)(dat&0x08);
        de=(bit)(dat&0x10);
        df=(bit)(dat&0x20);
        dg=(bit)(dat&0x40);
        dp=(bit)(dat&0x80);
    }
    //====數(shù)據(jù)拆分函數(shù)=======================================
    //提取出數(shù)據(jù)的千、百、十、個(gè)位的數(shù)值存入數(shù)組中
    void digits_obtain(uint dat)
    {
        date[0]=dat/10;
        date[1]=dat%10;
    }
    //====顯示輸出函數(shù)=======================================
    void display_out(uint dat)
    {
            static uchar i;
            digits_obtain(dat);//拆分?jǐn)?shù)據(jù)
            segment_out(0xff);//段碼清除(消隱)

            if(i==0)
            {P55=0;P12=1;}//十位
                                      
            else
            {P55=1;P12=0;}//個(gè)位
            segment_out(duan_ma[date]);//發(fā)送段顯示碼
    //        i=++i%2;
                                    if (++i>=2) i=0;
                                   
    }

    //====主函數(shù)==============================================
    void main()
    {
           
        P1M0 = 0x00; P1M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
        P5M0 = 0x00; P5M1 = 0x00;

            Timer0_Init();
            Delay1ms();
            while(1)
            {
                    if(flag)//5ms
                    {
                            flag=0;
    //                        display_out(34);                                                               
                    }
            }
    }

    void Timer0Interrupt(void) interrupt 1
    {
                  display_out(34);       
            flag=1;
                                   
    }


    還是顯示9
    回復(fù)

    使用道具 舉報(bào)

    22#
    ID:72649 發(fā)表于 2025-1-24 07:55 來(lái)自手機(jī) | 只看該作者
    segment_out(duan_ma[date[i]]);//上傳怎么沒(méi)有了
    回復(fù)

    使用道具 舉報(bào)

    23#
    ID:1109793 發(fā)表于 2025-1-24 09:38 | 只看該作者
    hjx5548 發(fā)表于 2025-1-24 07:55
    segment_out(duan_ma[date]);//上傳怎么沒(méi)有了

    上傳代碼要用代碼功能,就是上邊的那個(gè)中括弧
    回復(fù)

    使用道具 舉報(bào)

    24#
    ID:1133081 發(fā)表于 2025-1-24 15:42 | 只看該作者
    hjx5548 發(fā)表于 2025-1-24 05:11
    #include "STC8G.h"
    #include
    #define uint unsigned int

    發(fā)原理圖全圖
    回復(fù)

    使用道具 舉報(bào)

    25#
    ID:1109793 發(fā)表于 2025-1-24 20:25 | 只看該作者
    hjx5548 發(fā)表于 2025-1-24 05:11
    #include "STC8G.h"
    #include
    #define uint unsigned int

    為何要做定時(shí)器中斷里面調(diào)用display_out(34);?
    回復(fù)

    使用道具 舉報(bào)

    26#
    ID:1133081 發(fā)表于 2025-1-24 21:18 | 只看該作者
    hjx5548 發(fā)表于 2025-1-24 05:11
    #include "STC8G.h"
    #include
    #define uint unsigned int
    1. #include "STC8G.h"
    2. #include <intrins.h>
    3. #define uint unsigned int
    4. #define uchar unsigned char
    5.       
    6. //----I/O口段定義-----------------------------------
    7. sbit da=P3^7;
    8. sbit db=P3^2;
    9. sbit dc=P3^3;
    10. sbit dd=P3^5;
    11. sbit de=P3^4;
    12. sbit df=P3^6;
    13. sbit dg=P1^1;
    14. sbit dp=P1^0;

    15. //不含小數(shù)點(diǎn)8段LED字形碼0-9+黑屏碼、共陽(yáng)極驅(qū)動(dòng)0亮1熄
    16. uchar duan_ma[11]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
    17. uchar date[2];//顯示數(shù)據(jù)暫存

    18. void Delay5ms(void)        //@11.0592MHz
    19. {
    20.         unsigned char data i, j;

    21.         _nop_();
    22.         _nop_();
    23.         i = 72;
    24.         j = 205;
    25.         do
    26.         {
    27.                 while (--j);
    28.         } while (--i);
    29. }

    30. //=======================================================
    31. //將LED字形的8個(gè)筆段控制I/O引腳映射到變量的8個(gè)位上
    32. void segment_out(uchar dat)
    33. {
    34.     da=(bit)(dat&0x01);
    35.     db=(bit)(dat&0x02);
    36.     dc=(bit)(dat&0x04);
    37.     dd=(bit)(dat&0x08);
    38.     de=(bit)(dat&0x10);
    39.     df=(bit)(dat&0x20);
    40.     dg=(bit)(dat&0x40);
    41.     dp=(bit)(dat&0x80);
    42. }
    43. //====數(shù)據(jù)拆分函數(shù)=======================================
    44. //提取出數(shù)據(jù)的千、百、十、個(gè)位的數(shù)值存入數(shù)組中
    45. void digits_obtain(uint dat)
    46. {
    47.     date[0]=dat/10;
    48.     date[1]=dat%10;
    49. }
    50. //====顯示輸出函數(shù)=======================================
    51. void display_out(uint dat)
    52. {
    53.         static uchar i=0;
    54.         digits_obtain(dat);//拆分?jǐn)?shù)據(jù)
    55.         segment_out(0xff);//段碼清除(消隱)       
    56.         if(i==0)
    57.         {P55=0;P12=1;}//十位       
    58.         else
    59.         {P55=1;P12=0;}//個(gè)位
    60.         segment_out(duan_ma[date[i]]);//發(fā)送段顯示碼
    61.         if(++i>=2) i=0;                        
    62. }

    63. //====主函數(shù)==============================================
    64. void main()
    65. {      
    66.         P1M0 = 0x00; P1M1 = 0x00;
    67.         P3M0 = 0x00; P3M1 = 0x00;
    68.         P5M0 = 0x00; P5M1 = 0x00;
    69.         while(1)
    70.         {
    71.                 display_out(34);
    72.                 Delay1ms(500);
    73.         }
    74. }
    復(fù)制代碼
    回復(fù)

    使用道具 舉報(bào)

    27#
    ID:1133081 發(fā)表于 2025-1-24 21:23 | 只看該作者
    hjx5548 發(fā)表于 2025-1-24 05:11
    #include "STC8G.h"
    #include
    #define uint unsigned int

    //====主函數(shù)==============================================
    void main()
    {      
            P1M0 = 0x00; P1M1 = 0x00;
            P3M0 = 0x00; P3M1 = 0x00;
            P5M0 = 0x00; P5M1 = 0x00;
            while(1)
            {
                    display_out(34);
                    Delay5ms();
            }
    }
    回復(fù)

    使用道具 舉報(bào)

    28#
    ID:123917 發(fā)表于 2025-1-26 10:18 | 只看該作者
    你確定首發(fā)的圖正確?CPU處是P0口輸出數(shù)據(jù),數(shù)碼管處是用了p0;p1????
    回復(fù)

    使用道具 舉報(bào)

    本版積分規(guī)則

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

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

    快速回復(fù) 返回頂部 返回列表
    主站蜘蛛池模板: 色资源在线视频 | 自拍在线 | 亚洲国产欧美国产综合一区 | 日韩在线视频免费观看 | 成人精品鲁一区一区二区 | 国产不卡一区在线观看 | 尤物在线| 中文字幕不卡 | 亚洲综合无码一区二区 | 黄网免费看 | 一区二区三区国产 | 国产一区二区三区免费观看在线 | 91精品国产91久久久久久吃药 | 性精品 | 日本三级日产三级国产三级 | 久久久久久国产精品免费免费 | 日韩中文字幕视频 | 天天色图 | 五月婷婷婷 | 91精品国产综合久久婷婷香蕉 | 毛片一区二区三区 | 国产精品亚洲一区 | 亚卅毛片| 国产免费一级片 | 日韩电影一区 | 亚洲国产高清免费 | 成人在线视频免费观看 | 91福利网址 | 午夜在线观看视频 | 精品国产乱码久久久久久闺蜜 | 精品自拍视频 | 免费一级毛片 | 久久人体视频 | 欧美亚洲国语精品一区二区 | 国产成人精品一区二区三区网站观看 | 久久久观看 | 欧美xxxx日本 | 97超碰成人| 在线观看亚洲专区 | 91九色porny首页最多播放 | 久久久久久久一区二区三区 |