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

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

现象

数码管显示不正常大概有以下几种现象:
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();
	}
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值