久久久久久久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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品久久久久久一区二区 | 妖精视频一区二区三区 | 久久久国产精品一区 | 国产精品自拍视频 | 免费黄色网址视频 | 亚洲免费片 | 色综合欧美 | 国产高清久久久 | 欧美一区二区三区在线免费观看 | 一区在线播放 | www.天天干.com | av在线一区二区三区 | 91丨国产 | 亚洲视频在线一区 | 黑人一级黄色大片 | 免费视频一区二区 | 精品不卡 | 成人福利| 日韩中文一区二区三区 | 国产线视频精品免费观看视频 | 日韩一区二区三区在线 | 日韩二区 | 婷婷精品| 中文字幕综合 | 国产精品久久久久久久毛片 | 久久躁日日躁aaaaxxxx | 欧美色综合一区二区三区 | 国产黄色av电影 | 欧美成年黄网站色视频 | 亚洲综合无码一区二区 | 99国产精品久久久 | 欧美中文字幕一区二区三区亚洲 | av手机免费在线观看 | 日韩一区二区久久 | 先锋资源网 | 欧美一区在线视频 | 国产精品69毛片高清亚洲 | 国产一伦一伦一伦 | 国产成人自拍一区 | 欧美福利 | 成人福利电影 |