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

標題: 關于單片機IO口直接驅動數碼管程序調試 [打印本頁]

作者: happy2058    時間: 2021-6-20 01:35
標題: 關于單片機IO口直接驅動數碼管程序調試
利用STC單片機IO口推挽輸出方式直接驅動4位數碼管,最大限度地節省外圍電路,電路原理圖如下所示。P3.2 - P3.5推挽輸出,每位驅動1位數碼管;P1口每個時序驅動1段數碼管,降低單片機的輸出負載。如果需要降低顯示亮度,還可以對P3.2 - P3.5增加軟件PWM。源代碼中Digits_Buf[4]是顯示緩沖區,設置好顯示內容以后,只要以固定間隔調用Digits_Refresh()就能正常顯示。調用Digits_Refresh()的間隔時間不穩定時,會數碼管各字符顯示亮度不均勻并伴隨閃爍。
#define DIGITS_DP   20

extern unsigned char Digits_Buf[4];

void Digits_Refresh();
Digits.c代碼
#include "Hardware.h"

/*

sbit Digits_K1 = ...;
sbit Digits_K2 = ...;
sbit Digits_K3 = ...;
sbit Digits_K4 = ...;

*/

unsigned char code DIGITS_SEG_TAB[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x1a,0x7a,0x9e,0x8e,0x00,0xee,0x1c,0x02,
                                   //0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f    <sp> A    L    -
                                     0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7,0xef,0x3f,0x1b,0x7b,0x9f,0x8f,0x01,0xef,0x1d,0x03};
                                   //0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   a.   b.   c.   d.   e.   f.   <sp>.A.   L.   -.

unsigned char Digits_Buf[4];        //顯存4字節,4個數碼管

unsigned char Digits_SendBuff;
unsigned char Digits_BufPos;
unsigned char Digits_BitPos;

void Digits_Refresh()
{
    if (Digits_BitPos == 0)
    {
        if (Digits_BufPos == 3)
            Digits_BufPos = 0;
        else
            Digits_BufPos ++;

        Digits_SendBuff = DIGITS_SEG_TAB[Digits_Buf[Digits_BufPos]];

        Digits_BitPos = 0x80;

        P1 = 0xFF;
        P3 &= 0xC3;
        if (Digits_BufPos == 0)
            Digits_K1 = 1;
        else if (Digits_BufPos == 1)
            Digits_K2 = 1;
        else if (Digits_BufPos == 2)
            Digits_K3 = 1;
        else
            Digits_K4 = 1;
    }

    P1 = ~(Digits_SendBuff & Digits_BitPos);
    Digits_BitPos >>= 1;
}
請教一下,最后為什么&0x80?顯示小點???不是^

作者: yzwzfyz    時間: 2021-6-21 10:58
這個硬件設計是欠妥的。應該考慮一下,IO口所能輸出與吸入的電流,與LED的電流、亮度是否有沖突。
另外必要的限流是需要的,否則CPU會受到意外傷害。
作者: happy2058    時間: 2021-6-21 12:44
yzwzfyz 發表于 2021-6-21 10:58
這個硬件設計是欠妥的。應該考慮一下,IO口所能輸出與吸入的電流,與LED的電流、亮度是否有沖突。
另外必 ...

感謝,這是網上的的例程,最后說的那兩句程序好像不對,發出來請教一下。實際中每路IO口肯定會加電阻,謝謝
作者: 名字不是重點    時間: 2021-6-21 13:44
。亮度不均!沒有限流,當顯示8與顯示1時,亮度就能看出差別了
作者: liangtiancong    時間: 2022-12-6 22:32
名字不是重點 發表于 2021-6-21 13:44
。亮度不均!沒有限流,當顯示8與顯示1時,亮度就能看出差別了

在公共段加限流電阻的電路,有沒有辦法軟件去平均亮度?
作者: 1261867136qq    時間: 2022-12-7 08:55
從問題倒推問題
數碼管各字符顯示亮度不均勻并伴隨閃爍

閃爍:
說明導通時間大于人眼分辨時間--->間隔不穩定
亮度不均勻:
說明電流大小不一致。--->間隔不穩定

但是,為啥要使其間隔不穩定? 沒明白


作者: wulin    時間: 2022-12-7 09:26
給你一個硬件略圖和修改后的代碼,解釋并解決你的問題。適用于IO口可設置推挽模式的MCU。
  1. #include <reg51.H>
  2. sfr P1M1    =   0x91;
  3. sfr P1M0    =   0x92;
  4. sfr P3M1    =   0xb1;
  5. sfr P3M0    =   0xb2;

  6. //反序共陰極數碼管段碼表,段碼a-h順序接PX7-PX0
  7. unsigned char code DIGITS_SEG_TAB[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x1a,0x7a,0x9e,0x8e,0x00,0xee,0x1c,0x02,
  8.                                    //0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f    <sp>  A    L    -
  9.                                      0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7,0xef,0x3f,0x1b,0x7b,0x9f,0x8f,0x01,0xef,0x1d,0x03};
  10.                                    //0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   a.   b.   c.   d.   e.   f.   <sp>. A.   L.   -.
  11. unsigned char Digits_Buf[4];        //顯存4字節,4個數碼管
  12. unsigned int num=1234;

  13. void main(void)
  14. {
  15.         unsigned char i;
  16.         unsigned int t;
  17.         P1M1=0x00;
  18.         P1M0=0xff;//P1推挽模式
  19.         P3M1=0x00;
  20.         P3M0=0x00;//P3準雙向模式

  21.         while (1)
  22.         {
  23.                 switch(i)
  24.                 {
  25.                         case 0: Digits_Buf[0]=DIGITS_SEG_TAB[num/1000%10]; break;
  26.                         case 1: Digits_Buf[1]=DIGITS_SEG_TAB[num/100%10]|0x01; break;//加點
  27.                         case 2: Digits_Buf[2]=DIGITS_SEG_TAB[num/10%10]; break;
  28.                         case 3: Digits_Buf[3]=DIGITS_SEG_TAB[num%10]; break;
  29.                 }
  30.                 P1=0x00;
  31.                 P3&=0xc3;
  32.                 P3|=~(0x04<<i);
  33.                 P1=Digits_Buf[i];
  34.                 i=++i%4;
  35.                 t=1000;
  36.                 while(t--);//少許延時
  37.         }
  38. }
復制代碼






作者: coody_sz    時間: 2022-12-7 11:16
段驅動要串聯電阻(一般300歐姆或以上),避免過流燒IO。
作者: mtdzok    時間: 2022-12-7 11:38
liangtiancong 發表于 2022-12-6 22:32
在公共段加限流電阻的電路,有沒有辦法軟件去平均亮度?

雖然這種設計不合理,但是很多產品都在使用,比如有些焊臺、即熱水器等,可能為了控制成本。其實用軟件是可以平均亮度的,根據亮的段數控制點亮時長,實際上就相當于控制占空比,顯示1時間長點,顯示8時間短點




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩在线观看中文字幕 | 国产成人av一区二区三区 | 精品久久免费 | 国产精品一区二区在线 | av在线视 | 亚洲免费观看视频网站 | 国产精品中文字幕在线 | 国产一级视频在线观看 | 天天干天天谢 | 日韩午夜精品 | 色在线免费视频 | 理论片免费在线观看 | 九九热精品视频 | 秋霞电影一区二区三区 | 国产精品自产拍 | 精品免费国产视频 | 国产精品国产精品国产专区不蜜 | 韩日一区二区三区 | 国产精品久久久久久久久久久新郎 | 国产精品久久片 | 黄色成人在线观看 | 欧美伦理一区 | 日本一区二区高清不卡 | 国产精品视频久久久久 | 日韩欧美在线一区二区 | 中文字幕精品一区二区三区精品 | 久久不卡| 午夜激情影院 | 91在线精品一区二区 | jvid精品资源在线观看 | 国产精品一区二区在线 | 欧美日韩不卡合集视频 | 国产成人综合在线 | 亚洲一区二区三区在线 | 欧美 日韩 中文 | 一级毛片成人免费看a | 国产高清区 | av在线播放免费 | 91在线精品播放 | 日韩欧美国产精品 | 亚洲黄色视屏 |