m0_74683925 2024-06-01 20:17 采纳率: 33.3%
浏览 9

c51拨码开关控制数码管,74ls154并入串出

要求通过两个 74LS165采集两个拨码开关中的每个开关状态,并把开关状态反映到P0和 P1口上的16个数码管。当开关闭合时,相应的数码管点亮。当开关断开,相应的数码管熄灭。
代码截图和电路图如下所示,运行时d8亮,按开关灯没有反应

img

img

  • 写回答

3条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    根据你的描述,你想要使用C51语言编写程序,通过74LS165来控制数码管显示两个拨码开关的状态。但是代码中似乎存在一些问题,导致数码管只亮起了D8,其他数码管没有响应。以下是针对代码和电路图的一些可能的问题和解决方案:

    1. 代码问题
      • 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);
    ...
    
    1. 电路问题

      • 检查拨码开关连接至74LS165的引脚是否正确。确保SW1连接到正确的输入端口。
      • 确保74LS165的时钟和输入/输出配置正确,根据数据手册设置。
    2. 数码管显示

      • 可能需要在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);
    ...
    
    1. 74LS165初始化
      • 如果未初始化74LS165,可能需要添加适当的初始化代码。
    ...
    44 // Initialize the 74LS165 here if necessary
    45 initialize_74ls165();
    ...
    

    最后,确保你的硬件连接和时序逻辑正确,因为这可能影响到数码管的显示。如果问题依然存在,可能需要检查硬件故障或进一步调试代码。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月1日

悬赏问题

  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 uniapp实现如下图的图表功能