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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4116|回復: 8
打印 上一主題 下一主題
收起左側

關于單片機IO口直接驅動數碼管程序調試

[復制鏈接]
跳轉到指定樓層
樓主
ID:734017 發(fā)表于 2021-6-20 01:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
利用STC單片機IO口推挽輸出方式直接驅動4位數碼管,最大限度地節(jié)省外圍電路,電路原理圖如下所示。P3.2 - P3.5推挽輸出,每位驅動1位數碼管;P1口每個時序驅動1段數碼管,降低單片機的輸出負載。如果需要降低顯示亮度,還可以對P3.2 - P3.5增加軟件PWM。源代碼中Digits_Buf[4]是顯示緩沖區(qū),設置好顯示內容以后,只要以固定間隔調用Digits_Refresh()就能正常顯示。調用Digits_Refresh()的間隔時間不穩(wěn)定時,會數碼管各字符顯示亮度不均勻并伴隨閃爍。
#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字節(jié),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?顯示小點???不是^
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2021-6-21 10:58 | 只看該作者
這個硬件設計是欠妥的。應該考慮一下,IO口所能輸出與吸入的電流,與LED的電流、亮度是否有沖突。
另外必要的限流是需要的,否則CPU會受到意外傷害。
回復

使用道具 舉報

板凳
ID:734017 發(fā)表于 2021-6-21 12:44 | 只看該作者
yzwzfyz 發(fā)表于 2021-6-21 10:58
這個硬件設計是欠妥的。應該考慮一下,IO口所能輸出與吸入的電流,與LED的電流、亮度是否有沖突。
另外必 ...

感謝,這是網上的的例程,最后說的那兩句程序好像不對,發(fā)出來請教一下。實際中每路IO口肯定會加電阻,謝謝
回復

使用道具 舉報

地板
ID:824490 發(fā)表于 2021-6-21 13:44 | 只看該作者
。亮度不均!沒有限流,當顯示8與顯示1時,亮度就能看出差別了
回復

使用道具 舉報

5#
ID:374653 發(fā)表于 2022-12-6 22:32 | 只看該作者
名字不是重點 發(fā)表于 2021-6-21 13:44
。亮度不均!沒有限流,當顯示8與顯示1時,亮度就能看出差別了

在公共段加限流電阻的電路,有沒有辦法軟件去平均亮度?
回復

使用道具 舉報

6#
ID:308903 發(fā)表于 2022-12-7 08:55 | 只看該作者
從問題倒推問題
數碼管各字符顯示亮度不均勻并伴隨閃爍

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

但是,為啥要使其間隔不穩(wěn)定? 沒明白

回復

使用道具 舉報

7#
ID:213173 發(fā)表于 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字節(jié),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. }
復制代碼





回復

使用道具 舉報

8#
ID:1034262 發(fā)表于 2022-12-7 11:16 | 只看該作者
段驅動要串聯電阻(一般300歐姆或以上),避免過流燒IO。
回復

使用道具 舉報

9#
ID:884147 發(fā)表于 2022-12-7 11:38 | 只看該作者
liangtiancong 發(fā)表于 2022-12-6 22:32
在公共段加限流電阻的電路,有沒有辦法軟件去平均亮度?

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区在线免费观看 | 久久久久综合 | 三级av在线 | 免费色网址 | a级毛片毛片免费观看久潮喷 | 91丨国产| 国产精品成人一区 | 国产a区| www.男人天堂.com | 久久成人一区 | 久久久久国产一区二区三区四区 | 亚洲精品一区二区三区蜜桃久 | 日韩精品成人av | 毛片一级片 | 亚洲成人第一页 | 国产精品v| 亚洲综合在 | 欧美日韩国产一区二区三区 | 成人精品一区二区三区中文字幕 | 久久综合久久自在自线精品自 | 久久一二 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 日本天堂视频在线观看 | 久久久精品一区 | 久热久热 | 久久久精品一区二区 | 午夜成人在线视频 | 欧美精品一区二区三区在线播放 | 精品国产一区二区三区观看不卡 | 亚洲成av人片在线观看无码 | 福利久久 | 精品国产视频在线观看 | 成人三级影院 | 午夜精品久久久久久久久久久久久 | va精品| 天堂视频中文在线 | 日韩午夜 | 国产精品久久久久久网站 | 午夜免费视频 | 91在线精品视频 | 国产精品美女www爽爽爽 |