C51中8位数据能组成一个字节吗,送小姨子咯

2020-02-04 09:26发布

还是用实例说明一下,
8段数码管,数据口分别是a,b,c,d,e,f,g,h  为了布线方便,并没有接在同一个IO口上
实际是这样对应的
a---p1.0
b---p1.1
c---p1.2
d---p1.7
e---p3.4
f---p3.5
g---p3.6
h---p3.7

请问送数据的时候该怎么送呢?
不能像以前接同一个IO口那样,直接 led_data = 0x80; 了

请赐教~

送上小姨子


@_@~~ (原文件名:9000_1248748811W5D5.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
64条回答
yy888
1楼-- · 2020-02-05 22:54
【10楼】 shinehjx

楼上老许思路是对的但代码是错的  

----------------------------------------------------------------

老许C语言没学过,不熟悉,早期一直习惯用汇编,未上机调试的代码出错难免,给个思路,让小辈有个方向。
yy888
2楼-- · 2020-02-06 03:52
【11楼】 cowboy

你的代码有误,楼主有一个口是P1.7,不是P1.3 。

另外,二次异或尽管其他口电平最终是正确的,但中间过渡阶段可能有突变(尖脉冲)产生。
snoopyzz
3楼-- · 2020-02-06 04:20
这种二次异或,没有中间过渡突变...
对P3和P1的赋值,各只有一次...
hyz_avr
4楼-- · 2020-02-06 07:05
 精彩回答 2  元偷偷看……
sosingle
5楼-- · 2020-02-06 09:02
看来小姨子送的值啊,谢谢各位大侠赐教,小弟明白啦~~
cowboy
6楼-- · 2020-02-06 12:18
呵呵,光看小姨子,没细看要求给楼主设陷阱了,改过来:
void led_data_out(unsigned char a)
{
  P3 ^= (P3 ^ a) & 0xf0;
  a &= 0x0f;
  P1 ^= (P1 ^ (a<<4|a)) & 0x87;
}

每个口只写一次,应该不会产生过渡突变或尖峰。

一周热门 更多>