专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
8个数码管动态显示高位为0时怎么清除?
2020-02-08 09:13
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
7300
20
20
显示有8个数码管 比如现在 显示的是 12345678 但是如果是 显示 00000001的话 我只需要他显示 一个 1 其他的 0 就全部熄灭
如果是 00000010 的话 我只要他显示 10 其他的 0 也全部熄灭
请求 这种算法 怎么实现 ? 谢谢!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
elecfun
2020-02-09 19:08
我的方法,4位数码管显示正负温度。用到问号表达式和逗号表达式
void
main
(
void
)
{
unsigned char
a
;
unsigned int
t
;
while
(
1
)
{
t
=
ReadTemperature
();
if
(
t
==
2345
)
//初始化失败
{
SEG
[
0
] =
0xFF
;
SEG
[
1
] =
TABLE
[
10
];
//'E'
SEG
[
2
] =
TABLE
[
11
];
//'r'
SEG
[
3
] =
TABLE
[
11
];
//'r'
}
else if
(
t
&
0x8000
)
//负温度
{
t
&=
0x7FFF
;
SEG
[
0
] =
TABLE
[
12
];
//'-'
SEG
[
1
] = (
t
/
100
) ?
TABLE
[
t
/
100
] : (
SEG
[
0
] =
0xFF
,
TABLE
[
12
]);
//如果十位为0,则SEG[0]不显示,SEG[1]为'-',此处用到逗号表达式
SEG
[
2
] =
TABLE
[
t
%
100
/
10
];
SEG
[
3
] =
TABLE
[
t
%
10
];
}
else
{
SEG
[
0
] = (
t
/
1000
) ?
TABLE
[
t
/
1000
] :
0xFF
;
//如果为0则不显示
SEG
[
1
] = (
t
%
1000
/
100
) ?
TABLE
[
t
%
1000
/
100
] : ((
SEG
[
0
] ==
0xFF
) ?
0xFF
:
TABLE
[
0
]);
//如果为0需要看SEG[0],SEG[0]不显示,则本位也不显示
SEG
[
2
] =
TABLE
[
t
%
100
/
10
];
SEG
[
3
] =
TABLE
[
t
%
10
];
}
for
(
a
=
0
;
a
<
4
;
a
++)
{
CodePort
=
SEG
[
a
] & ((
a
==
2
) ?
0x7F
:
0xFF
);
//第三位显示小数点
BitPort
=
SCAN_CODE
[
a
];
Delayms
(
1
);
BitPort
=
0xff
;
}
}
}
加载中...
查看其它20个回答
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
void main(void)
{
unsigned char a;
unsigned int t;
while(1)
{
t = ReadTemperature();
if (t == 2345) //初始化失败
{
SEG[0] = 0xFF;
SEG[1] = TABLE[10]; //'E'
SEG[2] = TABLE[11]; //'r'
SEG[3] = TABLE[11]; //'r'
} else if (t & 0x8000) //负温度
{
t &= 0x7FFF;
SEG[0] = TABLE[12]; //'-'
SEG[1] = (t / 100) ? TABLE[t / 100] : (SEG[0] = 0xFF, TABLE[12]); //如果十位为0,则SEG[0]不显示,SEG[1]为'-',此处用到逗号表达式
SEG[2] = TABLE[t % 100 / 10];
SEG[3] = TABLE[t % 10];
} else {
SEG[0] = (t / 1000) ? TABLE[t / 1000] : 0xFF; //如果为0则不显示
SEG[1] = (t % 1000 / 100) ? TABLE[t % 1000 / 100] : ((SEG[0] == 0xFF) ? 0xFF : TABLE[0]); //如果为0需要看SEG[0],SEG[0]不显示,则本位也不显示
SEG[2] = TABLE[t % 100 / 10];
SEG[3] = TABLE[t % 10];
}
for(a = 0; a < 4; a++)
{
CodePort = SEG[a] & ((a == 2) ? 0x7F : 0xFF); //第三位显示小数点
BitPort = SCAN_CODE[a];
Delayms(1);
BitPort = 0xff;
}
}
}
一周热门 更多>