找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1740|回复: 0
收起左侧

51单片机带计数器的红绿灯程序

[复制链接]
ID:913756 发表于 2021-6-22 18:14 | 显示全部楼层 |阅读模式
  1. #include <reg51.h>
  2. #include <INTRINS.H>
  3. unsigned char count;                //中断次数计数
  4. unsigned char s;                        //状态变量
  5. unsigned char sn,ew;                //倒计时变量
  6. unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7.                                                         //0~9十个数字和共阳型段码
  8. sbit r1=P1^0;                                //两个方向的红黄绿灯
  9. sbit y1=P1^1;
  10. sbit g1=P1^2;
  11. sbit r2=P1^5;
  12. sbit y2=P1^4;
  13. sbit g2=P1^3;
  14. void delay(unsigned int j)
  15. {
  16.         while(j--);
  17. }
  18. display()
  19. {
  20.         unsigned char i,wk=0x01;//wk变量作位控,初始选通右边第1位
  21.         unsigned char buf[4];        //声明数码管显示字形缓冲数组
  22.         buf[0]=seg[sn%10];                //南北方向计时变量
  23.         buf[1]=seg[sn/10%10];
  24.         buf[2]=seg[ew%10];
  25.         buf[3]=seg[ew/10%10];
  26.         for (i=0;i<4;i++)
  27.         {
  28.                 P3=wk;                                //输出位控               
  29.                 P0=buf[i];                        //依次输出段码
  30.                 delay(50);                        //延时
  31.                 wk=_crol_(wk,1);        //位控左移一位
  32.                 P0=0xff;                        //熄灭所有数码管(消隐)
  33.         }
  34. }
  35. int main()
  36. {
  37.         TMOD=0x01;
  38.         TH0=0x3c;
  39.         TL0=0xb0;
  40.         EA=1;
  41.         ET0=1;
  42.         TR0=1;
  43.         sn=40;
  44.         ew=45;
  45.         while(1)
  46.         {
  47.                 display();
  48.                 switch(s)
  49.                 {
  50.                          case 0:                                //状态一
  51.                                 r1=1;y1=1;g1=0;
  52.                                 r2=0;y2=1;g2=1;
  53.                                 if(sn==255)                //字符型数据0减1等255
  54.                                 {
  55.                                          sn=4;
  56.                                         s=1;
  57.                                 }
  58.                                 break;
  59.                          case 1:                                //状态二
  60.                                 r1=1;y1=0;g1=1;
  61.                                 r2=0;y2=1;g2=1;
  62.                                 if(sn==255)
  63.                                 {
  64.                                          sn=35;
  65.                                         ew=30;
  66.                                         s=2;
  67.                                 }
  68.                                 break;
  69.                          case 2:                                //状态三
  70.                                 r1=0;y1=1;g1=1;
  71.                                 r2=1;y2=1;g2=0;
  72.                                 if(ew==255)
  73.                                 {
  74.                                          ew=4;
  75.                                         s=3;
  76.                                 }
  77.                                 break;
  78.                          case 3:                                //状态四
  79.                                 r1=0;y1=1;g1=1;
  80.                                 r2=1;y2=0;g2=1;
  81.                                 if(ew==255)
  82.                                 {
  83.                                          sn=40;
  84.                                         ew=45;
  85.                                         s=0;
  86.                                 }
  87.                                 break;
  88.                 }
  89.         }
  90. ……………………

  91. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


6-03带数显交通灯.zip

50.08 KB, 下载次数: 5, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表