找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机可调交通灯程序(修正bug)

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-25 13:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#define uchar unsigned char
uchar code tab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,
       0X80,0X90,0xff};
sbit qd=P3^3;
sbit zy=P2^1;
sbit yy=P2^2;
sbit ja=P2^3;
sbit jn=P2^0;
sbit dd=P1^1;

uchar k=0,kk=0;tt=0,b=0,i=0,tem=25,tem1=5,tem2;
uchar z[6];      

void delay(uchar x)          //毫秒级延时函数
{
uchar y;            
for(;x>0;x--)
  for(y=110;y>0;y--);
}


void display(uchar temp,uchar temp1,uchar temp2)     //显示函数
{
uchar i;
uchar z[6];
z[0]=temp/10;
z[1]=temp%10;
z[2]=temp1/10;
z[3]=temp1%10;
z[4]=temp2/10;
z[5]=temp2%10;


for(i=0;i<6;i++)
{   
  SBUF=tab[z[ i]];   // 根据键位值找到键码值,将键码值赋给串行口发送寄存器
  while(!TI);   //判断串口数据发送是否完毕
  TI=0;         //串口数据发送完毕标志清0
}


}


void main()     //主函数
{

TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
TR0=1;
ET0=1;
P0=0x79;
P2=0x7f;
tem2=25;




while(1)
{


if(qd==0)
{
delay(5);
if(qd==0)
{
    while(qd==0);

   TR0=0;kk=1; dd=0;P0=0x6d,P2=0xdf;while(kk)
{
   if(zy==0){delay(5);if(zy==0){while(zy==0);if(b==0)b=2;b--;}}

   if(yy==0){delay(5);if(yy==0){while(yy==0);b++;if(b==2)b=0;}}

   if(ja==0){delay(5);if(ja==0){while(ja==0);if(b==0){tem++; if(tem==100)tem=2;}   
               if(b==1){tem1++;if(tem1==100)tem1=1;}

   }}




   if(jn==0){delay(5);if(jn==0){while(jn==0);if(b==0){if(tem==2)tem=100;tem--;}
               if(b==1){if(tem1==1)tem1=100;tem1--;}


}}







if(b==0)
{
  z[0]=10;
z[1]=10;
z[2]=tem1/10;
z[3]=tem1%10;
z[4]=tem2/10;
z[5]=tem2%10;


for(i=0;i<6;i++)
{   
  SBUF=tab[z[ i]];   // 根据键位值找到键码值,将键码值赋给串行口发送寄存器
  while(!TI);   //判断串口数据发送是否完毕
  TI=0;         //串口数据发送完毕标志清0
}


   delay(200);
      display(tem,tem1,tem2);

   delay(200);

  }
if(b==1)
{
z[0]=tem/10;
z[1]=tem%10;
z[2]=10;
z[3]=10;
z[4]=tem2/10;
z[5]=tem2%10;


for(i=0;i<6;i++)
{   
  SBUF=tab[z[ i]];   // 根据键位值找到键码值,将键码值赋给串行口发送寄存器
  while(!TI);   //判断串口数据发送是否完毕
  TI=0;         //串口数据发送完毕标志清0
}


   delay(200);
      display(tem,tem1,tem2);

   delay(200);

}

if(tem<tem2||tem1<tem2)tem2=2;
    if(qd==0){delay(5);if(qd==0){while(qd==0);kk=0;delay(100);dd=1; }}
  }
}
}








TR0=1;


if(tt==20)
  {
   tt=0;tem2--;
      if(tem2==0&&k==0){tem2=tem1;k=1;P0=0x34;P2=0xbf;}
      if(tem2==0&&k==1){tem2=tem; k=2;P0=0xcf;P2=0xcf;}
      if(tem2==0&&k==2){tem2=tem1;k=3;P0=0xa6;P2=0x9f;}
      if(tem2==0&&k==3){tem2=tem; k=0;P0=0x79;P2=0x7f;}
   if(tem2<6){dd=0;delay(88);dd=1;delay(190);}
  }

  display(tem,tem1,tem2);
  delay(200);



}
}


void timer0(void) interrupt 1
{
  TH0=0x3c;
  TL0=0xb0;
  tt++;

}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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