三、数码管

数码管介绍

数码管分为共阳数码管和共阴数码管,先位选,后段选。

原理图

74HC245:双向数据缓冲器(数码管段选),提高驱动能力,单片机高电平驱动能力弱,低电平驱动能力强。

OE:使能端,低电平有效。

DIR:接到LE,图示跳线帽上,接VCC将数据从左边输送到右边即A0到B0,接低电平则把数据从右边从左边读回来即B0到A0。数码管只需要将数据从左边输送到右边,不需要读回来,则跳线帽一直接高电平。

138译码器:数码管位选,低有效输出。例如CBA:001,则选中Y1,即LED2。

数码管段码表

静态数码管显示

#include <REGX52.H>

//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//段码输出
}

void main()
{
	Nixie(2,3);	//在数码管的第2位置显示3
	while(1)
	{
		
	}
}

数码管消影

动态数码管显示

#include <REGX52.H>

//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//延时子函数
​void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
    while(xms)
    {
    	_nop_();
    	i = 2;
    	j = 199;
    	do
    	{
    		while (--j);
    	} while (--i);
        xms--;        
    }
}

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//段码输出
	Delay(1);				//显示一段时间
	P0=0x00;				//段码清0,消影
}

void main()
{
	while(1)
	{
		Nixie(1,1);		//在数码管的第1位置显示1
//		Delay(20);
		Nixie(2,2);		//在数码管的第2位置显示2
//		Delay(20);
		Nixie(3,3);		//在数码管的第3位置显示3
//		Delay(20);
	}
}

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Verilog代码,用于控制数码管的显示: ```verilog module digit_display( input clk, // 时钟信号 input [7:0] data, // 8位数据输入 output reg [2:0] seg_select, // 数码管位选信号 output reg [6:0] seg_data // 数码管段选信号 ); reg [7:0] digit_map [0:9]; // 数字映射表 // 数字映射表 initial begin digit_map[0] = 8'b00111111; digit_map[1] = 8'b00000110; digit_map[2] = 8'b01011011; digit_map[3] = 8'b01001111; digit_map[4] = 8'b01100110; digit_map[5] = 8'b01101101; digit_map[6] = 8'b01111101; digit_map[7] = 8'b00000111; digit_map[8] = 8'b01111111; digit_map[9] = 8'b01101111; end reg [7:0] digit [0:2]; // 数码管的当前显示数字 always @ (posedge clk) begin // 数码管位选信号递增 if (seg_select == 3'b000) begin seg_select <= 3'b001; end else if (seg_select == 3'b001) begin seg_select <= 3'b010; end else if (seg_select == 3'b010) begin seg_select <= 3'b000; end // 根据位选信号选择当前需要显示的数码管 case (seg_select) 3'b000: digit[0] <= digit_map[data / 100]; 3'b001: digit[1] <= digit_map[(data / 10) % 10]; 3'b010: digit[2] <= digit_map[data % 10]; endcase end // 数码管段选信号的输出 always @ (seg_select) begin case (seg_select) 3'b000: seg_data <= ~digit[0]; 3'b001: seg_data <= ~digit[1]; 3'b010: seg_data <= ~digit[2]; endcase end endmodule ``` 这个模块包括一个8位数据输入,用于控制数码管显示的数字。代码中使用了一个数字映射表,将数字映射到对应的数码管段选信号。数码管段选信号的输出取反,因为常用的数码管是共阴极的,即当段选信号为低电平时,对应的数码管段才会亮。模块还包括一个时钟信号和数码管位选信号的输出,用于控制数码管的刷新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值