标题:
怎么让数码管有效位显示 求帮助
[打印本页]
作者:
小天才哥哥
时间:
2019-5-24 19:43
标题:
怎么让数码管有效位显示 求帮助
如题
作者:
w1179benp
时间:
2019-5-26 13:11
经常看到这种不着边际的询问!什么叫“数码管有效位”?难道还有无效位?到底你具体问题是软件的还是硬件的?
作者:
47okey
时间:
2019-5-26 15:43
位私下揣摩,比如6位数码管显示000020,高4 位0为无效位,低2位20为有效位?
作者:
幻剑心
时间:
2019-5-26 16:28
你的意思是如果有8位数码管,但是数值是100,那么就只显示前三位的100,后面的不显示对吧。
把0xff(共阳)/0x00(共阴)传给不想显示的位就行了。
作者:
1512166
时间:
2019-5-26 16:34
你是想让数码管显示数字吗?如果是可以用switch函数实现
作者:
问青天磕大地
时间:
2019-5-26 16:38
其实他想说的是数码管可以显示的位数
作者:
lxbeiming
时间:
2019-5-26 17:41
数码管8个脚对应7段加小数点,你想让那一段量,就给电平点亮,比如显示8. 你就写0xff
作者:
mkkop
时间:
2019-5-26 18:00
你的问题应该是把最高位是0时不显示对吧?
例如你用4位数码管显示一个数,最大显示9999,如果你只显示999则千位不显示,显示99时千位和百位不显示,显示9时千位和百位和十位不显示,如果是这样,程序如下
{
if(temp < 10)
{
disp_dat4 = disp_dat3 = disp_dat2 = 0; // 如果小于10,则高3位数码管清零不显示
}
else
if(temp < 100)
{
disp_dat4 = disp_dat3 = 0; // 如果小于100,则高2位数码管清零不显示
}
else
if(temp < 1000)
{
disp_dat4 = 0; // 如果小于1000,则最高位数码管清零不显示
}
}
作者:
凌鸩
时间:
2019-5-26 18:37
能不能具体一些,这种问题没办法回答啊。
作者:
凌鸩
时间:
2019-5-26 18:45
这个问题没有意义啊,回答者看不懂有什么用。
作者:
zero711
时间:
2019-5-26 19:30
数码管的显示,首先要搞清楚主要控制分为段选和位选,段选就是指你要让数码管显示什么符号内容,如:1、2、3、a、b、c等。位选就是指你要显示的符号内容需要显示在哪个数码管上,如:一个四个并排的数码管上,你要让1显示在第一个数码管上,你就需要进行位选让第一个数码管显示,其他数码管不显示,再进行段选,输入你要显示的符号内容的16进制码,从而达到在对应的数码管上显示内容对应的内容的目的。而你所说的“有效位”是否指的就是位选?
作者:
yuwenxi
时间:
2019-5-26 19:33
/************************************************************************************** * 动态数码管显示实验 * 实现现象:下载程序后数码管从左至右显示0-7。 注意事项: ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示 *******************************************************************************/ void DigDisplay() { u8 i; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } P0=smgduan[i];//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { DigDisplay(); //数码管显示函数 } }
作者:
yuwenxi
时间:
2019-5-26 19:33
/**************************************************************************************
* 动态数码管显示实验 *
实现现象:下载程序后数码管从左至右显示0-7。
注意事项:
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : DigDisplay
* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
P0=smgduan[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
DigDisplay(); //数码管显示函数
}
}
作者:
wj_yuq
时间:
2019-5-26 19:44
七段(加小数点为八段)数码管分共阳极和共阴机之分,不知你所述的有效位是要指定的段位还是全段位,都是不同的,有很多小程序可以根据以上述及的各情况,根据你要点亮的段位,返回要求的HEX码
作者:
tehity
时间:
2019-5-26 20:36
8段数码管,一个字节8位每1位对应数码管的1段
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1