社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 828|回复: 9

[求助] 51单片机程序问题

[复制链接]

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-10 21:32:56 | 显示全部楼层 |阅读模式
51单片机P3.3~P3.7控制五个灯,怎样能不分开赋值,然后又不影响P3.0~P3.2的功能
此帖出自51单片机论坛


回复

使用道具 举报

5125

TA的帖子

73

TA的资源

版主

Rank: 6Rank: 6

爱原创

发表于 2017-2-10 22:28:39 | 显示全部楼层
用与,或,取反等位操作来实现。
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵


回复

使用道具 举报

26

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-10 22:29:19 | 显示全部楼层
先把P3口的数据读取出来,用逻辑运算指令把需要的数据写入P3就可以了


回复

使用道具 举报

348

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-10 23:26:49 | 显示全部楼层
如果想几位同时操作,那就用逻辑运算,比如同时给第6、7位置1,就是P3 |=0xC0,两个都置0的话就是P3&= ~0xc0。不过最好用个变量,像楼上说的那样,读出来,操作完赋给端口,最好别直接用端口来进行运算


回复

使用道具 举报

15

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-11 08:38:37 来自手机 | 显示全部楼层
直接整体赋值


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2017-2-11 09:15:19 | 显示全部楼层
飞翔荷兰人号 发表于 2017-2-10 23:26
如果想几位同时操作,那就用逻辑运算,比如同时给第6、7位置1,就是P3 |=0xC0,两个都置0的话就是P3&= ~0xc ...

如果要写旋转灯,把要显示的汉子写进数组里面,数组里面有16个16进制的元素,然后要实现我上面说的操作,应该怎么写呢??麻烦了,谢谢。

点评

你是要在LED矩阵上显示汉字,然后让汉字移动吗,这样的话就得每次重新刷新了,其实不需要保留原来的不变吧,直接移位,然后每一帧重新刷一遍  详情 回复 发表于 2017-2-11 10:01


回复

使用道具 举报

348

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-11 10:01:05 | 显示全部楼层
陽光下的星星 发表于 2017-2-11 09:15
如果要写旋转灯,把要显示的汉子写进数组里面,数组里面有16个16进制的元素,然后要实现我上面说的操作, ...

你是要在LED矩阵上显示汉字,然后让汉字移动吗,这样的话就得每次重新刷新了,其实不需要保留原来的不变吧,直接移位,然后每一帧重新刷一遍


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2017-2-11 10:13:58 | 显示全部楼层
飞翔荷兰人号 发表于 2017-2-11 10:01
你是要在LED矩阵上显示汉字,然后让汉字移动吗,这样的话就得每次重新刷新了,其实不需要保留原来的不变 ...

IMG20170211100719.jpg 写这种旋转灯,但是其中一种颜色的灯接到P3的高五位,可是写数据的时候不能影响51P3口的外部中断位。所以不太清楚应该怎么写。试过 P3|=(g1<<3) 但好像不行


回复

使用道具 举报

348

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-11 10:49:35 | 显示全部楼层
哦,是这种的啊。我还以为你原先是只要求赋1或者赋0,这样不能直接用|=,因为比如你上一次赋完值是10000000,下一次想变成01000000,用|=就变成了11000000。另外,51的P3口开了第二功能的话,最好用位操作吧,如果嫌慢,你可以试试整个端口赋值,我也没试过开了外部中断后赋值对它的影响,但是你最好把低三位变成1或者0再试,感觉不对低位做处理可能有问题


回复

使用道具 举报

1万

TA的帖子

146

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2017-2-11 17:18:48 | 显示全部楼层
在内存中定义一个缓冲寄存器,根据初始显示先赋值给该寄存器,再将该寄存器的值赋值给IO控制LED。当需要改变显示时,可以改变该寄存器的赋值,再送显即可。改变赋值时,可以用逻辑运算法,即根据低电平驱动或高电平驱动,以逻辑或或者逻辑与运算后改变赋值。
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-11-20 15:32 , Processed in 0.442744 second(s), 23 queries , Redis On.

快速回复 返回顶部 返回列表