シングルチップマイコン - デジタル管をダイナミックに表示する方法

デジタル真空管ハードウェア図

1. デジタルチューブを74HC245チップに接続します。

シングルチップマイコンのIOポートの出力は安定しにくく、デジタル管とシングルチップマイコンの接続には74HC245を使用して駆動回路を増やす必要があります。

abcdefgDP パラレルエクスポート 74HC245 はデジタル管を駆動します。P0 は各セグメントのドライバーチップを駆動する出力電流です

抵抗を大きくする目的は、過電流によるデジタル管の焼損を防ぐためです。P0出力部で選択

2. デジタル管は 2 つの 4-in-1 共通陰極デジタル管です

共通カソードとは、すべてのカソードが一緒に接続され、共通端子に接続され、接地され、ハイレベルが与えられるとアノードがオンになり点灯することを意味します。

デジタル管の公共端が導き出す

3. 38 デコーダを使用して入力を制御し、制御ビットとしてデジタル チューブ LED1 ~ LED8 を選択します。

38 デコーダは 3 入力、8 出力を持つチップで、ビット選択は P2^2 P2^3 P2^4 の入力によって制御されます。

4. デジタル管とは何ですか?

デジタル管は8端子または7端子で構成されており、発光ダイオードのもう1つのセグメントは小数点を形成できる点です。

10ピンのデジタル真空管パッケージ

ニキシー管の分類:

アノード

          すべてのダイオードのアノードは一緒に接続され、カソードは独立しており、カソードが低いときに点灯します。

陰極

        すべてのダイオードのカソードは一緒に接続され、アノードは独立しており、ハイになるとアノードが点灯します。

プラスとマイナスの2極を置くだけで点灯可能


単語を表示するにはどうすればよいですか?

陰極デジタル管を使用して表示する場合:

0 を示す場合、カソードから 2 値が DP、g が 0 ローレベル、その他がハイ 0011 1111 変換 16 3f

デジタル管がオンになっています

一般的な陰極デジタル管 abcdefg が明るくなる 1111 1100 小数点は P0.7 がデータの上位ビット

上位ビットからビット P0.7~0.0 0011 1111 (16 進数) を 0x3f に変換

共通陽極デジタル管は共通負極デジタル管の逆の値です  


セグメント選択とは何ですか?ビット選択とは何ですか?

セグメント選択は、デジタル管の各 LED によって表示されるセグメントで構成されるワードです。

ビット選択は共通端から引き出されたピンであり、表示するデジタル チューブが選択されます。 

カソードコモン、アノードコモンのセグメント選択表示 0~F

明るい陰極共通デジタル管

0x3f、0x06、0x5b、0x4f、0x66、0x6d、
0 1 2 3 4 5
0x7d、0x07、0x7f、0x6f、0x77、0x7c、
6 7 8 9 A B
0x39、0x5e、0x79、0x71、0x00、
C D E F 表示なし

陽極共通デジタル管明るい

0xC0、0xF9、0xA4、0xB0、0x99、0x92、
0 1 2 3 4 5
0x82、0xF8、0x80、0x90、0x88、0x83、
6 7 8 9 A B
0xC6、0xA1、0x86、0x8E、0xFF、
C D E F 表示なし

38 デコーダーを通して点灯する LED ライトを選択するにはどうすればよいですか?

1. チップのマニュアルを参照する

2. 制御ビット選択出力デジタル管

A1A2A3 はローレベル、000 Y0 は有効 LED1

A1A2A3 は 100 Y1 は有効 LED2

A1A2A3 は 010 Y2 は有効 LED3

A1A2A3 は 110 Y3 は有効 LED4

A1A2A3 は 001 Y4 は有効 LED5

A1A2A3 は 101 Y5 は有効 LED6

A1A2A3 は 011 Y6 は有効 LED7

A1A2A3 は 111 Y7 は有効 LED8 


フロー図:

消える

人間の目の残光と遅延を利用してデジタル管のダイナミックな表示を感じさせる

ソフトウェアプログラミング:

#include "reg52.h"


typedef unsigned int u16;
typedef unsigned char u8;

#define SMG_A_DP_PORT	P0


u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
						0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};	  // 段选0-F



// 位选
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;


void delay_time(u16 times)
{
	while(times--);
}		  

// 定义数码管显示的函数
void smg_display(void)
{
	u8 i = 0;  // 用一个循环,需要定义一个变量 
	for(i=0;i<8;i++)
	{
		//每次循环选择一个段选
		switch(i)
		{
			case 0:LSC=1; LSB=1; LSA=1; break;	  // Y7 输出
			case 1:LSC=1; LSB=1; LSA=0; break;	  // Y6 输出
			case 2:LSC=1; LSB=0; LSA=1; break;	  // Y5 输出
			case 3:LSC=1; LSB=0; LSA=0; break;	  // Y4 输出
			case 4:LSC=0; LSB=1; LSA=1; break;	  // Y3 输出
			case 5:LSC=0; LSB=1; LSA=0; break;	  // Y2 输出
			case 6:LSC=0; LSB=0; LSA=1; break;	  // Y1 输出
			case 7:LSC=0; LSB=0; LSA=0; break;	  // Y0 输出
		}
		SMG_A_DP_PORT = gsmg_code[i];
		delay_time(100);   // 1ms = 100 us 
		SMG_A_DP_PORT = 0x00;
	}	
}

void main()
{
	while(1)
	{
		smg_display();			
	}

}

おすすめ

転載: blog.csdn.net/m0_68021259/article/details/132609843