hgf564654 2021-07-02 22:47 采纳率: 0%
浏览 15

stc15单片机显示计数器

实现计数器功能,要求如下1)P1.1模拟外部脉冲输入;
2)利用8个LED显示计数器中TL0的计数值(二进制);3)T0作为计数器;
4)P0口与数码管连接。
5)P1.1连接至T0引脚(P3.4)

  • 写回答

1条回答 默认 最新

  • 梦幻编织者 2023-06-07 17:43
    关注
    
    #include <reg52.h> //包含reg52.h头文件
    
    sbit LED1 = P0^0; //定义LED1连接到P0.0口
    sbit LED2 = P0^1; //定义LED2连接到P0.1口
    sbit LED3 = P0^2; //定义LED3连接到P0.2口
    sbit LED4 = P0^3; //定义LED4连接到P0.3口
    sbit LED5 = P0^4; //定义LED5连接到P0.4口
    sbit LED6 = P0^5; //定义LED6连接到P0.5口
    sbit LED7 = P0^6; //定义LED7连接到P0.6口
    sbit LED8 = P0^7; //定义LED8连接到P0.7口
    
    void main()
    {
    TMOD = 0x01; //设置T0为模式1
    TH0 = 0xFC; //设置T0的初始值为0xFC
    TL0 = 0x00; //清零T0的计数值
    TR0 = 1; //启动T0计数器
    while(1) //循环执行
    {
    if(TF0 == 1) //如果T0计数溢出
    {
    TF0 = 0; //清除T0溢出标志
    LED1 = ~LED1; //LED1取反
    if(LED1 == 1) //如果LED1为1
    {
    TL0 = 0x00; //清零T0的计数值
    TH0 = 0xFC; //重新设置T0的初始值
    }
    else //如果LED1为0
    {
    if(TL0 == 0xFF) //如果T0计数值达到最大值
    {
    TL0 = 0x00; //清零T0的计数值
    TH0++; //T0的高8位加1
    }
    else //如果T0计数值未达到最大值
    {
    TL0++; //T0的低8位加1
    }
    }
    LED2 = TH0 & 0x01; //将T0的高8位的最低位赋值给LED2
    LED3 = TH0 & 0x02; //将T0的高8位的次低位赋值给LED3
    LED4 = TH0 & 0x04; //将T0的高8位的第3位赋值给LED4
    LED5 = TH0 & 0x08; //将T0的高8位的第4位赋值给LED5
    LED6 = TH0 & 0x10; //将T0的高8位的第5位赋值给LED6
    LED7 = TH0 & 0x20; //将T0的高8位的第6位赋值给LED7
    LED8 = TH0 & 0x40; //将T0的高8位的第7位赋值给LED8
    }
    }
    }
    

    以上代码实现了一个计数器功能,P1.1模拟外部脉冲输入,T0作为计数器,8个LED显示计数器中TL0的计数值(二进制),P0口与数码管连接,P1.1连接至T0引脚(P3.4)。在每次T0计数溢出时,LED1取反,如果LED1为1,就清零T0的计数值并重新设置T0的初始值,如果LED1为0,就将T0的计数值加1,并将T0的高8位的各位赋值给对应的LED。

    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料