p1是led移位
p2是数码管
为什么数码管不用取反啊单片机0 1和c语言不是相反的么 不取反p0不应该是亮么为什么还是清零了。
求解惑。
51单片机江科大 求解答取反为什么数码管不用取反
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-03-15 01:14关注
建设生活 上午好☀️☀️☀️️
本答案参考ChatGPT-3.5数码管不需要取反的原因在于其工作原理和LED不同。LED是一种主动发光元件,可以直接通过给LED施加正向电压来点亮。而数码管是一种被动显示器件,需要通过控制对应的引脚信号来显示数字。通过给不同的引脚施加高电平或低电平来控制数码管的亮灭。在51单片机中,引脚的高电平对应于逻辑电平1,低电平对应于逻辑电平0。
对于给定的数字,如1、2、3等,会有不同的引脚需要置高电平来显示。通过给对应的引脚上拉高电平,就可以点亮数码管显示相应的数字。因此,我们并不需要对数字取反,只需要按照不同数字的引脚设置相应的高电平或低电平即可。
解决方案:
- 读取输入的数字,根据该数字对应的引脚设置相应的高低电平。可以使用一个函数来实现,根据输入的数字和引脚位置参数,设置相应的高低电平状态。
- 在主函数中调用该函数,根据需要显示的数字和对应引脚位置,设置相应的高低电平状态,来显示数码管的数字。
- 根据需要可能需要添加延迟函数来控制数码管显示的刷新速度。
修改后的代码示例:
#include <REGX52.H> void Delay(unsigned int xms); void Nixie(unsigned char Location, unsigned char Number); int main() { unsigned char LEDNum = 0; while(1) { LEDNum++; if(LEDNum >= 8) LEDNum = 0; Nixie(1, LEDNum); Delay(20); } } void Delay(unsigned int xms) { unsigned char i, j; while(xms) { i = 2; j = 239; do { while (--j); } while (--i); xms--; } } void Nixie(unsigned char Location, unsigned char Number) { switch(Location) { case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; default: break; } P0 = Number; }
在这段代码中,我们使用P2作为数码管的引脚控制端口,通过设置P2的不同引脚的电平状态,来显示不同的数字。在Nixie函数中,我们根据Location和Number参数的值,来设置相应的引脚电平状态,然后将Number赋给P0,即可显示相应数字。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 陆空双模式无人机飞控设置
- ¥15 sentaurus lithography
- ¥100 求抖音ck号 或者提ck教程
- ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
- ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
- ¥15 io.jsonwebtoken.security.Keys
- ¥15 急,ubuntu安装后no caching mode page found等
- ¥15 联想交换机NE2580O/NE1064TO安装SONIC
- ¥15 防火墙的混合模式配置
- ¥15 Ubuntu不小心注销了要怎么恢复啊