找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3176|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机交通灯(Proteus仿真电路,C语言程序代码)

[复制链接]
跳转到指定楼层
楼主
东西向绿灯;
南北向红灯;
东西向红灯;
南北向绿灯;
南北向向黄灯闪烁;

时间显示(时间自定);
下面是仿真电路;


(注:没画最小系统)
篇幅有限,代码放附件了

单片机源程序如下:
  1. #include<reg51.h>
  2. //#define uchar unsigned char
  3. //#define uint unsigned int
  4. char code smg_dw[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  5. //共阳0-9
  6. sbit lR=P1^0;
  7. sbit lY=P1^1;
  8. sbit lG=P1^2;
  9. sbit hR=P1^3;
  10. sbit hY=P1^4;
  11. sbit hG=P1^5;
  12. sbit shi=P3^0;
  13. sbit ge=P3^1;
  14. int a,b,c,type,j,i;
  15. void Delay(int x);
  16. void delay_ms(int q);
  17. void shumaguan(int k);
  18. main()
  19. {
  20.         TMOD=0x01;                                  
  21.         TH0=(65536-50000)/256;
  22.         TL0=(65536-50000)%256;
  23.         TR0=1;                                          
  24.         ET0=1;                                         
  25.         EX0=1;                                         
  26.         EA=1;                                                                           
  27.         a=10;                                          
  28.         type=1;
  29.         while(1){
  30.                 switch(type)
  31.                 {
  32.                         case 1: //东西向绿灯与南北向红灯亮
  33.                                 lR=0;lY=1;lG=1;
  34.                                 hR=1;hY=1;hG=0;
  35.                                 shumaguan(a);
  36.                         break;
  37.                         case 2: //东西向黄灯闪烁,绿灯关闭       
  38.                                 if(a%2!=0)
  39.                                 {
  40.                                 lR=1;lY=0;lG=1;
  41.                                 }
  42.                                 if(a%2==0)
  43.                                 {               
  44.                                 lR=1;lY=1;lG=1;
  45.                                 }
  46.                                 shumaguan(a);
  47.                         break;
  48.                         case 3: //东西向红灯,南北向绿灯亮
  49.                                 lR=1;lY=1;lG=0;
  50.                                 hR=0;hY=1;hG=1;
  51.                                 shumaguan(a);
  52.                         break;
  53.                         case 4: //南北向黄灯闪烁3次
  54.                                 if(a%2!=0)
  55.                                 {
  56.                                 hR=1;hY=0;hG=1;
  57.                                 }       
  58.                                 if(a%2==0)
  59.                                 {       
  60.                                 hR=1;hY=1;hG=1;
  61.                                 }
  62.                                 shumaguan(a);
  63.                         break;
  64.                 }
  65.                         }
  66. }

  67. void T0_int0(void) interrupt 1                   //中断
  68. {
  69.         TH0=(65536-50000)/256;
  70.         TL0=(65536-50000)%256;
  71.         i++;
  72.         if(i==20)
  73.         {
  74.                 i=0;
  75.                 a--;
  76.                 if(a==0)
  77.                 {
  78.                         if(type==1||type==3)
  79.                         {
  80.                                 a=5;
  81.                         }
  82.                         if(type==2||type==4)
  83.                         {
  84.                                 a=10;
  85.                         }
  86.                         type++;
  87.                         if(type==5)
  88.                         {
  89.                                 type=1;
  90.                         }
  91.                 }
  92.         }       
  93. }

  94. void shumaguan(int k)           //数码管显示
  95. {
  96.                 b=k/10;
  97.                 c=k%10;
  98.                 P3=0xfd;
  99.                 P2=smg_dw[b];//选段码
  100.       delay_ms(20);//延时5ms
  101.                 P3=0xfe;
  102.                 P2=smg_dw[c];//选段码
  103.                 delay_ms(20);
  104. }

  105. void Delay(int x)                   //延时
  106. {
  107.         char i;
  108.         while(x--)for(i=0;i<120;i++);       

  109. }

  110. void delay_ms(int q)           //延时
  111. {        
  112.         int i,j;
  113.         for(i=q;i>0;i--)
  114.         for(j=141;j>0;j--);
  115. }
复制代码

所有资料51hei提供下载:
交通灯.zip (46.36 KB, 下载次数: 87)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:535215 发表于 2020-11-28 18:22 | 只看该作者
nice
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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