找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机交通信号灯的设计

[复制链接]
跳转到指定楼层
楼主
ID:1012017 发表于 2024-8-6 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分享需要请查看
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. sbit p16=P1^6 ;
  5. sbit p17=P1^7 ;
  6. uint i,j,k,turn=0;
  7. uint code Seg[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40};
  8. //数码管译码表:   { 0  , 1 , 2 , 3 , 4  ,5    6     7   8    9    .   - }
  9. uchar jps,ks,key_do;//键盘缓存,上次有按键按下标志位,按键已处理标志位
  10. int count_10ms=0,second=15;  //初始值
  11. void delay(uint tt)  //延时函数
  12. {
  13.   uint i;
  14.   for(;tt>0;tt--)
  15.     for(i=0;i<200;i++);
  16. }

  17. void LED(uint d1,uint d2)  
  18. {   
  19.         if(d1==1)  P0=(P0|0xff)&0xf1;//与运算
  20.         if(d1==2)  P0=(P0|0xff)&0xf2;
  21.         if(d1==3)  P0=(P0|0xff)&0xf4;
  22.         if(d1==4)  P0=(P0|0xff)&0xf8;
  23.         P2=Seg[d2];
  24. }
  25. int keyscan()     //键盘扫描函数
  26. {
  27.   int t=0;
  28.   if(p17==0) { t=1; jps=1;}
  29.   return(t);       
  30. }

  31. void ledshow()//
  32. {  

  33.          LED(1,11);
  34.            delay(8);
  35.          LED(2,second/10);
  36.      delay(8);
  37.          LED(3,second%10);
  38.      delay(8);
  39.          LED(4,11);
  40.      delay(8);
  41.          
  42. }
  43. void Time_fun() interrupt 1    //10ms中断函数
  44. {
  45.   j++;
  46.   if(j==30) j=0;
  47.   if(k==30) { k=0; p16=1; }
  48.     else k++;
  49.   TH0=(0xffff-10000)/256;  //10ms
  50.   TL0=(0xffff-10000)%256;  //10ms
  51.   count_10ms++;
  52.   if(count_10ms==100)
  53.      {count_10ms=0;second--;}
  54.   if(second<0)  
  55.         {
  56.           second=15;
  57.           turn=!turn;
  58.           k=0;
  59.           p16=0;   //提示音
  60.         }
  61.   if((ks==1)&&(keyscan()==1)&&(key_do==0))
  62.          {                                                 
  63.                 P1=0x89;
  64.                 while(1);  // 按键报警
  65.                 key_do=1;               
  66.          }       
  67.   ks=keyscan();
  68.   if(ks==0)  key_do=0;

  69. }

  70. main()
  71. {   
  72.         TMOD=0x01;     //Time0为16计数器
  73.         TH0=(0xffff-10000)/256;
  74.         R0=1;    //打开定时器
  75.         ITL0=(0xffff-10000)%256;
  76.         TE=0x82;  //EA=1  ET0=1  打开中断
  77.        
  78.         while(1)
  79.     {   
  80.                 ledshow();
  81.                 if(turn==0 && second>3) P1=(P1&0xc0)|0x21;  // 东西红灯,南北绿灯
  82.           else if(turn==0 && second<=3)
  83.                                 {
  84.                                   if(j<15)        P1=(P1&0xc0)|0x31;    // 东西红灯,南北绿灯闪黄灯亮
  85.                                         else P1=(P1&0xc0)|0x11;
  86.                                 }
  87.                 if(turn==1 && second>3) P1=(P1&0xc0)|0x0c;  // 东西绿灯,南北红灯
  88.           else if(turn==1 && second<=3)
  89.                                 {
  90.                                   if(j<15)         P1=(P1&0xc0)|0x0e;     //  东西绿灯闪、黄灯亮,南北红灯
  91.                                         else  P1=(P1&0xc0)|0x0a;
  92.                                 }
  93. //                P1=P1|0xc0;
  94.         }
  95. }
复制代码


程序.zip

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

交通灯

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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