数码管显示不正常的调试方法与步骤总结

数码管显示不正常的调试方法与步骤总结

现象

数码管显示不正常大概有以下几种现象:
1,完全不显示;
2,显示部分段码;
3,显示部分位码;
4,显示闪烁;
5,以上几种综合。

解决方法步骤

1,确定数码管是共阴还是共阳
2,检查数码管每段是否完好 .
如果上面两条没问题,则:
若完全不显示:
检查电压是否加反,共阴的位选送低电平,共阳的位选送高电平
若某一位只显示部分段:
检查程序所送段码是否正确,注意共阴的段选送高电平,共阳的段选送低电

若有一位或几位完全不显示:
(1)若静态显示(所有位显示一样的数):只需检查程序这几位送的电平是
否正确
(2)若动态显示(扫描显示不同的数):若数字滚动显示或闪烁,则动态扫
描速度过慢,应减少延时,加快扫描
若显示的数字缺胳膊少腿或三头六臂:
这种现象只存在于动态扫描情况下,称为鬼影。
原因是扫描过快导致上一个字符(视觉暂留结果)显示在当前字符上产生重

解决办法:增长延时,减慢扫描
还有一种情况:
若采用同时送段码和位码,则注意送段码前数据口要清零

具体例子

原理图

矩阵键盘检测显示电路图
用于对矩阵键盘进行检测的显示

代码

#include<reg51.h>
#define uint unsigned int 
#define uchar unsigned char
sbit duan = P2^0;
sbit wei= P2^1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9共阴极显示编码
uint num;
void delay(uint n)
{
	uint i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<100;j++);
	}
}
void key_scan() //矩阵键盘检测函数
{
	uchar temp0=0,temp1=0,temp;
	P1=0xf0;
	if(P1!=0xf0)//检测按键是否按下
	{
		delay(10);
		temp0=P1;
		P1=0x0f;
		if(P1!=0x0f)
		{
			temp1=P1;
		}
	}
	temp=temp0+temp1;
	switch(temp)               //判断按键输入
	{
		case 0xee:num=1;break;//第一行
		case 0xed:num=2;break;
		case 0xeb:num=3;break;
		case 0xe7:num=4;break;
		
		case 0xde:num=5;break;//第二行
		case 0xdd:num=6;break;
		case 0xdb:num=7;break;
		case 0xd7:num=8;break;
		
		case 0xbe:num=9;break;//第三行
		case 0xbd:num=10;break;
		case 0xbb:num=11;break;
		case 0xb7:num=12;break;
		
		case 0x7e:num=13;break;//第四行
		case 0x7d:num=14;break;
		case 0x7b:num=15;break;
		case 0x77:num=16;break;
	}
}
void display() //显示函数
{ 
		P0=0x00;             //在段选前进行消影操作
		duan=1;
		P0=table[(num/10)]; //除式取十位
	    duan=0;
		wei=1;
		P0=0x01;
		wei=0;
		delay(50);
		P0=0x00;
		duan=1;
		P0=table[(num%10)];//取余取个位
	    duan=0;
		wei=1;
		P0=0x02;
		wei=0;
		delay(50);		
}
void main()
{
	while(1)
	{
		key_scan(); 
		display();
	}
}
  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
数码管是一种常见的数字显示器件,它可以将数字信息以及一些特定符号显示在屏幕上。在本实验中,我们将学习如何使用Verilog HDL来设计一个数码管显示模块,并通过FPGA开发板进行调试验证。 1. 数码管显示模块设计 数码管显示模块的主要功能是将二进制数转换为数码管上的数字和符号,以便于显示。我们可以通过下面的Verilog代码来实现: ```verilog module seg_display(input [3:0] data, output reg [6:0] seg); always @(*) begin case(data) 4'b0000: seg = 7'b1000000; // 0 4'b0001: seg = 7'b1111001; // 1 4'b0010: seg = 7'b0100100; // 2 4'b0011: seg = 7'b0110000; // 3 4'b0100: seg = 7'b0011001; // 4 4'b0101: seg = 7'b0010010; // 5 4'b0110: seg = 7'b0000010; // 6 4'b0111: seg = 7'b1111000; // 7 4'b1000: seg = 7'b0000000; // 8 4'b1001: seg = 7'b0010000; // 9 default: seg = 7'b1111111; // display nothing endcase end ``` 在这个代码中,我们定义了一个输入端口data和一个输出端口seg,输入端口data用于输入二进制数,输出端口seg将转换后的数字和符号输出到数码管上。 2. 数码管显示模块调试 为了验证数码管显示模块的正确性,我们需要在FPGA开发板上进行调试。以下是一个基本的调试步骤: Step 1: 在Vivado中创建一个新的工程,并将上面的代码添加到设计中。 Step 2: 生成比特流文件,并下载到FPGA开发板上。 Step 3: 在FPGA开发板上连接数码管的引脚,以便于显示。 Step 4: 在FPGA开发板上输入二进制数,并观察数码管上的数字和符号是否正确。 通过这些步骤,我们可以验证数码管显示模块的正确性。如果数码管能够正确地显示输入的二进制数,则说明我们的设计是正确的。 总之,数码管是一种常见的数字显示器件,它在数字电路和嵌入式系统中得到广泛应用。通过本实验,我们可以学习如何使用Verilog HDL来设计一个数码管显示模块,并在FPGA开发板上进行调试验证。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值