久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2274|回復: 5
打印 上一主題 下一主題
收起左側

單片機共陰極數碼管顯示不對,倒計時不對

[復制鏈接]
跳轉到指定樓層
樓主
ID:607782 發表于 2019-9-11 10:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己做的交通燈,為什么倒計時顯示不對,程序我也沒發現哪里錯的
#include<stdio.h>

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar keyon;
//sbit control=P3^3;
p2=0;
int sn_g_time,ew_g_time,sn_y_time,ew_y_time,sn_r_time,ew_r_time;
int ew_g_time1,sn_y_time1,ew_y_time1,ew_r_time1,sn_r_time1;
int sntime=0,ewtime=0,ytime=0;
int sntime1=0,ewtime1=0,ytime1=0;
int sg,eg,sy,ey,sr,er,sg1,eg1,sy1,ey1,sr1,er1;
char mode=1;
bit model=1;   //模式標志
char flag1,flag2,flag3; //普通模式的標志
char inl1,inl2; //智能模式的標志
char car,n=0,m=0;
int RR1=0,RR2=0,RR3=0,RR4=0;//普通模式的寄存器
int TT1=0,TT2=0,TT3=0; //智能模式的寄存器
char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar data buffer[4]={0};
uchar data buf[2]={0};
/**************************按鍵掃描***************************************/
void delay(uint z)     
{
   int x,y;
   for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
uchar key()        
{ uchar keyon,temp;
P1=0x0f;
delay(1);
temp=P1^0x0f;
switch(temp)
{
  case 1:keyon=0;break;
  case 2:keyon=1;break;
  case 4:keyon=2;break;
  case 8:keyon=3;break;
     default:keyon=16;
}
P1=0xf0;
delay(1);
temp=P1>>4^0x0f;
switch(temp)
{
  case 1:keyon+=0;break;
  case 2:keyon+=4;break;
  case 4:keyon+=8;break;  
     case 8:keyon+=12;break;
}
return keyon;
}
void smg_display(int sn,int ew)     //數碼管顯示
{
buffer[0]=sn/10;
buffer[1]=sn%10;
buffer[2]=ew/10;
buffer[3]=ew%10;
P3=0x8f;P0=tab[buffer[0]];delay(3);
P3=0x1f;P0=tab[buffer[1]];delay(2);
P3=0x2f;P0=tab[buffer[2]];delay(2);
P3=0x4f;P0=tab[buffer[3]];delay(2);
}
void common()      //普通模式
{
if(flag1==1)
{
  if(flag2==1)
  {
   if(flag3==1)
   {
    P2=0xf5;//sn_red=0;ew_yellow=0;
    smg_display(sr,ey);
    if(n==20)
    {
     sr--;
     ey--;
     n=0;
    }  
   }
   else
   {
      P2=0xf3;//sn_red=0;ew_green=0;
      smg_display(sr,eg);
      if(n==20)
      {
          sr--;
       eg--;
       n=0; }  
   }
  }
  else
  {
   P2=0xee;//sn_yellow=0;ew_red=0;
   smg_display(sy,er);
   if(n==20)
   {
    sy--;
    er--;
    n=0;}  
  }
}
else
{
  P2=0xde;//sn_green=0;ew_red=0;
  smg_display(sg,er);
  if(n==20)
  {
   sg--;
   er--;
   n=0;}
}
}
void intelligent( )       //智能模式
{
P0=0x00;
P2=0xde;//sn_green=0;ew_red=0;  
if(car==1)
{
  if(inl1==1)
  {
   if(inl2==1)
   {
     P2=0xf5;//sn_red=0;ew_yellow=0;
    smg_display(sr1,ey1);
    if(m==20)
    {
     sr1--;
     ey1--;
     m=0;}      
   }
   else
   {
    P2=0xf3;//sn_red=0;ew_green=0;
    smg_display(sr1,eg1);
    if(m==20)
    {
     sr1--;
     eg1--;
     m=0;}         
   }
  }
  else
  {
   P2=0xee;//sn_yellow=0;ew_red=0;
   smg_display(sy1,er1);
   if(m==20)
   {
    sy1--;
    er1--;
    m=0;}      
  }
}
}
void zero_off(uchar *p)        //去零函數
{
    uchar i;
    for(i=0;i<2;i++)
    {
        if(*p==0)
        {*p=10;p++;}
        else break;
    }
}
void sn_display(int snew)   
{
buf[0]=snew/10;
buf[1]=snew%10;
zero_off(buf);
P3=0x2f;P0=tab[buf[0]];delay(2);
P3=0x4f;P0=tab[buf[1]];delay(2);
}  
void chage_sntime()      
{
  P3=0x00;
  while(1)
  {
  if(P1!=0xf0)
  {
   keyon=key();
   while(P1!=0xf0);
   if(keyon<=9)
   {
    sntime=sntime*10+keyon;   
   }
if(keyon==10)
   {
    sntime++;   
   }
   if(keyon>10)
   {
    if(keyon==13)   //再按13鍵,確定并退出
    {
     sn_g_time=sntime;
     sntime=0;
     return;
    }
   }
  }
  sn_display(sntime);
  }  
}
void ew_display(int snew)   
{
buf[0]=snew/10;
buf[1]=snew%10;
zero_off(buf);
P3=0x2f;P0=tab[buf[0]];delay(2);
P3=0x4f;P0=tab[buf[1]];delay(2);
}
void chage_ewtime()        
{
P3=0x00;
  while(1)
  {
  if(P1!=0xf0)
  {
   keyon=key();
   while(P1!=0xf0);
   if(keyon<=9)
   {
    if(model==1)
     ewtime=ewtime*10+keyon;
    else if(model==0)
     ewtime1=ewtime1*10+keyon;     
   }
   if(keyon==10)
   {
     ewtime++;      
   }
   if(keyon>10)
   {
    if(keyon==12)   //再按12鍵,確定并退出
    {
     if(model==1)
     {
      ew_g_time=ewtime;
      ewtime=0;
      return;
     }
     else if(model==0)
     {
      ew_g_time1=ewtime1;
      ewtime1=0;
      return;
     }
    }
   }
  }
  if(model==1)
   ew_display(ewtime);
  else if(model==0)
   ew_display(ewtime1);
  }  
}
void chage_y_time()   
{
P3=0x00;
  while(1)
  {
  if(P1!=0xf0)
  {
   keyon=key();
   while(P1!=0xf0);
   if(keyon<=9)
   {
    if(model==1)
     ytime=ytime*10+keyon;
    else if(model==0)
     ytime1=ytime1*10+keyon;   
   }
   if(keyon>9)
   {
    if(keyon==11)   //再按11鍵,確定并退出
    {
     if(model==1)
     {
      sn_y_time=ew_y_time=ytime;
      ytime=0;
      return;
     }
     else if(model==0)
     {
      sn_y_time1=ew_y_time1=ytime1;
      ytime1=0;
      return;}
    }
   }
  }
  if(model==1)
   sn_display(ytime);
  else if(model==0)
   sn_display(ytime1);
  }   
}
/***************************主函數**********************************/
void main()
{
car=0;
sg=sn_g_time=15;
eg=ew_g_time=10;
eg1=ew_g_time1=10;
sy=ey=sn_y_time=ew_y_time=4;
sy1=ey1=er1=sn_y_time1=ew_y_time1=4;
sr=sn_r_time=ew_g_time+ew_y_time;
sr1=sn_r_time1=ew_g_time1+ew_y_time1;
    er=ew_r_time=sn_g_time+sn_y_time;
TMOD=0x01;      //中斷初始化
IE=0x82;
TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
TR0=1;
  while(1)
{
  P1=0xf0;
  if(P1!=0xf0)
     { keyon=key();
   while(P1!=0xf0);
         if(keyon==15)      //15鍵,模式選擇
   {
    mode++;
    model=(bit)(mode&0x01);
   }
   if(keyon==14)   //14鍵,有車來
    car=1;      
   if(keyon==13)      //13鍵,修改主通道綠燈時間
       chage_sntime();
   if(keyon==12)      //12鍵,修改次通道綠燈時間
        chage_ewtime();
      if(keyon==11)      //11鍵,修改黃燈時間  
       chage_y_time();
  }
     if(model==1)     //modle=1,普通模式
  {
   common();
   eg1=ew_g_time1;      //智能模式賦初值
      sy1=ey1=er1=sn_y_time1=ew_y_time1;
   sr1= sn_r_time1=ew_g_time1+ew_y_time1;
  }
  else if(model==0)
  {
      intelligent();   //modle=0,智能模式
   sg=sn_g_time;      //普通模式賦初值
   eg=ew_g_time;
      sy=ey=sn_y_time=ew_y_time;
   sr=sn_r_time=ew_g_time+ew_y_time;
      er=ew_r_time=sn_g_time+sn_y_time;
  }
  if(sg==0) sg=sn_g_time;
  if(eg==0) eg=ew_g_time;
  if(sy==0) sy=sn_y_time;
  if(ey==0) ey=ew_y_time;
  if(sr==0) sr=sn_r_time;
  if(er==0) er=ew_r_time;
  if(eg1==0) eg1=ew_g_time1;
  if(sy1==0) sy1=sn_y_time1;
  if(ey1==0) ey1=ew_y_time1;
  if(sr1==0) sr1=sn_r_time1;
  if(er1==0) er1=ew_y_time1;
}
}
/**************************T0中斷服務子程序*******************************/
void time0_int() interrupt 1
{     
TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
if(model==1)
{
     TT1=TT2=TT3=0;
  car=0;
  m=0;
  if(RR1==sn_g_time*20)
  {flag1=1;   
      if(RR2==sn_y_time*20)
   {flag2=1;
    if(RR3==ew_g_time*20)
       {
     flag3=1;
     if(RR4==ew_y_time*20)
     {
      RR1=RR2=RR3=RR4=0;
      return;}
     else
     {
      RR4++;n++;
      return; }
    }     
       else
       {
       RR3++;n++;
     flag3=0;
     return;}
   }     
      else
      {
      RR2++;n++;
    flag2=0;
    return;}
     }   
  else
  {RR1++;n++;
   flag1=0;  
   return;}      
}
    else if(model==0)
{
     RR1=RR2=RR3=RR4=0;
  n=0;
  if(car==1)
  {if(TT1==sn_y_time1*20)
   {inl1=1;
    if(TT2==ew_g_time1*20)
       {inl2=1;
     if(TT3==ew_y_time1*20)
     {TT1=TT2=TT3=0;
      car=0;
      return;}
     else
     {
      TT3++;m++;
      return; }
    }     
       else
       {
       TT2++;m++;
     inl2=0;
     return;}
   }     
      else
      {
      TT1++;m++;
    inl1=0;
    return; }
  }
  else return;    }
}


FPJDZCNWBI28Y6C105B2KRJ.png (73.68 KB, 下載次數: 62)

FPJDZCNWBI28Y6C105B2KRJ.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:462827 發表于 2019-9-11 11:32 | 只看該作者
私聊,把文件打包發來,可以幫你調試修改好。
回復

使用道具 舉報

板凳
ID:212177 發表于 2019-9-11 11:50 來自手機 | 只看該作者
哪里不對?出了什么問題
回復

使用道具 舉報

地板
ID:607782 發表于 2019-9-11 15:30 | 只看該作者
文件再這里,不對再問我要

交通燈.zip

60.62 KB, 下載次數: 6

回復

使用道具 舉報

5#
ID:123289 發表于 2019-9-11 21:49 | 只看該作者
是抄的,還是自己寫的呢?
回復

使用道具 舉報

6#
ID:608355 發表于 2019-9-12 14:39 | 只看該作者
我也是這個問題,好像是數碼管消隱問題。我也在修改,我刪了智能模式P0=0x00;數碼管顯示正常了。但開始有一個顯示問題
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品国产一区二区三区 | 日日夜夜免费精品 | 国产精品中文字幕在线 | 中文字幕免费在线 | 国产欧美在线 | 欧洲av一区| 美女网站视频免费黄 | 另类视频在线 | 欧美日韩高清免费 | com.色.www在线观看 | 亚洲性人人天天夜夜摸 | 91天堂| caoporn免费 | 久久亚洲视频 | 99精品99| 国产精品一区二 | 亚洲在线高清 | 看特级黄色片 | 欧美精品在线一区二区三区 | 亚洲免费视频一区二区 | 欧美综合一区二区三区 | 免费99视频| 免费国产精品久久久久久 | 欧美日韩不卡 | 中文字幕视频网 | 伊人精品在线 | 日本精品一区二区三区视频 | 日韩一区二区在线观看视频 | 国产毛片毛片 | 成人福利网 | 欧美日韩一区精品 | www.婷婷| 国内精品免费久久久久软件老师 | 一区二区三区观看视频 | 毛片一区二区三区 | 国产欧美一级 | 丁香综合 | 国产午夜亚洲精品不卡 | 欧美中文一区 | 日韩欧美在线观看视频 | 黄网免费 |