要求通过两个 74LS165采集两个拨码开关中的每个开关状态,并把开关状态反映到P0和 P1口上的16个数码管。当开关闭合时,相应的数码管点亮。当开关断开,相应的数码管熄灭。
代码截图和电路图如下所示,运行时d8亮,按开关灯没有反应
c51拨码开关控制数码管,74ls154并入串出
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-06-01 20:17关注
晚上好🌙🌙🌙
本答案参考ChatGPT-3.5根据你的描述,你想要使用C51语言编写程序,通过74LS165来控制数码管显示两个拨码开关的状态。但是代码中似乎存在一些问题,导致数码管只亮起了D8,其他数码管没有响应。以下是针对代码和电路图的一些可能的问题和解决方案:
- 代码问题:
- 在
read_int()
函数中,SCL线(SCLK)应该被设置为高电平(1),然后在每次读取时将SDA线(SDATA)拉低。 - 当读取数据时,可能需要检查SDA线是否有变化,以确定是高电平还是低电平,从而正确更新read_data。
- 在
... 13 SCLK=1; // Set SCL high for reading ... 22 if (!SDATA) // Check if SDA is low, indicating a new bit read_data = read_data | (1 << i); ...
-
电路问题:
- 检查拨码开关连接至74LS165的引脚是否正确。确保SW1连接到正确的输入端口。
- 确保74LS165的时钟和输入/输出配置正确,根据数据手册设置。
-
数码管显示:
- 可能需要在
main()
函数中正确地将高低位字节分开并写入P0和P1口,而不是直接赋值给数码管。
- 可能需要在
... 36 tempH = (uchar)(temp >> 8); // Shift the higher byte to tempH 37 tempL = (uchar)temp; // Shift the lower byte to tempL 38 P0 = tempL; // Write the lower byte to P0 39 P1 = tempH; // Write the higher byte to P1 40 41 // Display the digits on the connected digit displays using appropriate functions 42 display_digit(tempL, P0); 43 display_digit(tempH, P1); ...
- 74LS165初始化:
- 如果未初始化74LS165,可能需要添加适当的初始化代码。
... 44 // Initialize the 74LS165 here if necessary 45 initialize_74ls165(); ...
最后,确保你的硬件连接和时序逻辑正确,因为这可能影响到数码管的显示。如果问题依然存在,可能需要检查硬件故障或进一步调试代码。
解决 无用评论 打赏 举报 编辑记录 - 代码问题:
悬赏问题
- ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
- ¥15 用C语言怎么判断字符串的输入是否符合设定?
- ¥15 通信专业本科生论文选这两个哪个方向好研究呀
- ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
- ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
- ¥300 寻抓云闪付tn组成网页付款链接
- ¥15 请问Ubuntu要怎么安装chrome呀?
- ¥15 视频编码 十六进制问题
- ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
- ¥15 uniapp实现如下图的图表功能