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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3582|回復: 2
收起左側

pc端控制的單片機交通燈程序Proteus仿真,供大家學習

[復制鏈接]
ID:764738 發表于 2020-6-5 12:52 | 顯示全部樓層 |閱讀模式
pc端控制交通燈,供大家學習
代碼如下
#include <reg51.h>
#include <uart.h>
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
                       0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數碼管共陽極顯示碼
//定義引腳
#define NBSEG P0
#define DXSEG P2
#define LIGHT P1
sbit NBWEI1=P3^4;
sbit NBWEI2=P3^5;
sbit DXWEI1=P3^6;
sbit DXWEI2=P3^7;
//定義變量
unsigned char t0count=0,second=0; //t0中斷次數,秒數
unsigned char DXgreen=30;yellow=4;NBgreen=20;//綠燈和黃燈時間
unsigned char control=0;//0為自動運行,1為手動或PC控制東西通行,2為南北通行
unsigned char state[8]={'#','S',0,0,0,0,0,'\0'};//存放狀態即#S東西綠燈時間,南北綠燈時間,黃燈時間和控制方式

//延時程序
void delayt()
{
  unsigned char i,j;
  for(i=0;i<50;i++)for(j=0;j<50;j++);
}
//T0中斷程序
void T0int() interrupt 1
{
   TH0=(65536-50000)/256;TL0=(65536-50000)%256;        //再計時50毫秒
   t0count++;
   if(t0count==20){t0count=0;second++;}
}

void revset()
{
  if(revover==1)//如果接收有數據,處理接收的數據
          {                         //*S35205,'35'為東本綠燈35秒,‘20’為南北綠燈20秒,5為黃燈5秒
                    //*C1,1控制東西通行,*C2南北通行,*C0自動運行。
                if(revbuf[1]=='S') {DXgreen=(revbuf[2]-'0')*10+revbuf[3]-'0';NBgreen=(revbuf[4]-'0')*10+revbuf[5]-'0';yellow=revbuf[6]-'0';}
                if(revbuf[1]=='C')control=revbuf[2]-'0';
                clearrevbuf();//清除接收緩沖區
                  state[2]=DXgreen/10+'0';state[3]=DXgreen%10+'0';        state[4]=NBgreen/10+'0';//再發送一次狀態數據
        state[5]=NBgreen%10+'0';state[6]=yellow+'0';                state[7]=control+'0';
        sendstring(state);//狀態有改變時再發送一次狀態數據
          }
}
void main()
{        
   UARTinit();
//T0中斷設置
   PS=1;
   EA=1;ET0=1; //允許中斷
   TMOD=0x21;//方式1,16位計時
   TH0=(65536-50000)/256;TL0=(65536-50000)%256;        //計時50毫秒
   TR0=1;//啟動計時器T0

   state[2]=DXgreen/10+'0';state[3]=DXgreen%10+'0';        state[4]=NBgreen/10+'0';//運行前發送一次狀態數據
   state[5]=NBgreen%10+'0';state[6]=yellow+'0';        state[7]=control+'0';
   sendstring(state); //運行前發送一次狀態數據
   while(1)
   {         
      revset();second=0; DXSEG=0xff;NBSEG=0xff;//清屏
          if(control==0){//自動運行

                           //東西綠燈亮30秒,黃燈亮4秒,           紅燈亮24秒
                          //南北紅燈亮34秒,           綠燈亮20秒,黃燈亮4秒
                          LIGHT=0x21;
                          while(second<DXgreen){DXSEG=0xff;NBSEG=0xff;//清屏
                                                DXWEI2=1;DXWEI1=0;DXSEG=table[second%10];delayt();//顯示東西個位
                                                NBWEI1=0;NBWEI2=1;NBSEG=table[second%10];delayt();        //顯示南北個位
                                                                        DXSEG=0xff;NBSEG=0xff;  //清屏
                                                                        DXWEI2=0;DXWEI1=1;DXSEG=table[second/10];delayt(); //顯示東西十位
                                                                        NBWEI1=1;NBWEI2=0;NBSEG=table[second/10];delayt();  //顯示南北十位
                                                                         revset();if(control>0)break;//查看有沒有接收的數據并處理
                                                                         }
                          LIGHT=0x11;
                          while(second<(DXgreen+yellow)){DXSEG=0xff;NBSEG=0xff;//清屏
                                                                                     DXWEI2=1;DXWEI1=0;DXSEG=table[second%10];delayt();
                                                                                     NBWEI1=0;NBWEI2=1;NBSEG=table[second%10];delayt();
                                                                                         DXSEG=0xff;NBSEG=0xff;
                                                                                         DXWEI2=0;DXWEI1=1;DXSEG=table[0];        delayt();
                                                                                         NBWEI1=1;NBWEI2=0;NBSEG=table[second/10];delayt();
                                                                                         revset();if(control>0)break;//查看有沒有接收的數據并處理
                                                                                        } second=0;
                          LIGHT=0x0c;
                          while(second<NBgreen){DXSEG=0xff;NBSEG=0xff;
                                                                        DXWEI2=1;DXWEI1=0;DXSEG=table[second%10];delayt();
                                                                        NBWEI1=0;NBWEI2=1;NBSEG=table[second%10];delayt();
                                                                        DXSEG=0xff;NBSEG=0xff;
                                                                        DXWEI2=0;DXWEI1=1;DXSEG=table[second/10];delayt();
                                                                        NBWEI1=1;NBWEI2=0;NBSEG=table[second/10];delayt();
                                                                                        revset();if(control>0)break;//查看有沒有接收的數據并處理
                                                                                        }
                          LIGHT=0x0a;
                          while(second<(NBgreen+yellow)){DXSEG=0xff;NBSEG=0xff;
                                                         DXWEI2=1;DXWEI1=0;DXSEG=table[second%10];delayt();
                                                                                         NBWEI1=0;NBWEI2=1;NBSEG=table[second%10];delayt();
                                                                                     DXSEG=0xff;NBSEG=0xff;
                                                                                         DXWEI2=0;DXWEI1=1;DXSEG=table[second/10];delayt();
                                                                                         NBWEI1=1;NBWEI2=0;NBSEG=table[0];delayt();
                                                                                        revset();if(control>0)break;//查看有沒有接收的數據并處理
                                                                                        }second=0;
                }
                //下面兩行為PC控制
                if(control==1) LIGHT=0x21;//PC發送控制為1,讓東西通行
                if(control==2) LIGHT=0x0c;         //PC發送控制為2,讓南北通行
   }
}


567890oighjkl.png
567890oighjkl.png
fghjkll.png

2020春單片機.rar

9.47 MB, 下載次數: 26, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:780940 發表于 2020-6-17 17:18 | 顯示全部樓層
程序怎么運行不出來
回復

使用道具 舉報

ID:767080 發表于 2020-6-19 00:11 | 顯示全部樓層
哇塞,看著好厲害的樣子
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品a在线观看图片 | 日韩欧美三级 | 亚洲精品在线观看网站 | 精品国产99 | 久久99精品久久久久久国产越南 | 久久国产一区二区三区 | 中文字幕在线免费观看 | 欧美精品成人 | 美女黄视频网站 | www.日本国产| 99精品国产一区二区三区 | 亚洲国产精品精华素 | 免费观看av网站 | 国产高清在线精品 | 国产精品夜夜夜一区二区三区尤 | 国产黄色在线观看 | h视频在线免费 | 亚洲成av| 超碰国产在线 | 国产精品一区一区 | 色狠狠一区 | 久久99精品久久久久久国产越南 | 国精产品一区二区三区 | 国产9999精品 | 日本不卡免费新一二三区 | 成人黄色av | 99国产在线 | 欧美成人aaa级毛片在线视频 | 欧美日本在线观看 | 欧美亚洲另类丝袜综合网动图 | 久久久www成人免费精品 | 免费精品| 四虎影院久久 | 欧美日韩在线视频一区 | 91久久精品| 中文字幕在线观看一区二区 | 久久精点视频 | 伊人狼人影院 | 国产精品久久久久久久久免费软件 | 国产一区二区三区视频 | 亚洲精品一二区 |