m0_63857257 2021-11-04 10:45 采纳率: 0%
浏览 142

求51单片机的红绿灯设计的源代码

任务:利用单片机的数码管和led灯来实现红绿灯,要求数码管倒计时;有红灯35秒,黄灯5秒,绿灯30秒并配合led灯,利用中断和定时器实现。
求源代码

  • 写回答

1条回答 默认 最新

  • 流比 2023-01-30 17:46
    关注

    以下代码仅提供参考

    #include<reg52.h>
    #include<intrins.h>
    
    #define uchar unsigned char
    #define uint unsigned int
    
    #define LED P0 // 定义LED接口
    
    uchar LED_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管码表
    
    void delay(uint xms)  //延时xms的函数
    {
      uint i,j;
      for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
    }
    
    void show_LED(uchar num)  //数码管显示
    {
      P2=0xff;
      P0=LED_code[num];
      P2=0xfe;
    }
    
    void timer0() interrupt 1   //定时器0中断函数
    {
      static uchar cnt=35;  //定义计数器cnt
      TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;  //重新赋值,实现0.01s的延时
      cnt--;
      if(cnt==0)  //当计数器为0时
      {
        LED=0xff;  //红灯亮
        cnt=35;  //cnt重新赋值为35,从35s开始倒计时
      }
      if(cnt==30)  //当计数器为30时
      {
        LED=0x00;  //绿灯亮
        cnt=30;  //cnt重新赋值为30,从30s开始倒计时
      }
      if(cnt==5)  //当计数器为5时
      {
        LED=0x7f;  //黄灯亮
        cnt=5;  //cnt重新赋值为5,从5s开始倒计时
      }
      show_LED(cnt);  //显示数码管
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月4日

悬赏问题

  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)