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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
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 (96.18 KB, 下載次數: 117)

567890oighjkl.png

567890oighjkl.png (96.18 KB, 下載次數: 118)

567890oighjkl.png

fghjkll.png (86.36 KB, 下載次數: 115)

fghjkll.png

2020春單片機.rar

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

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:780940 發表于 2020-6-17 17:18 | 只看該作者
程序怎么運行不出來
回復

使用道具 舉報

板凳
ID:767080 發表于 2020-6-19 00:11 | 只看該作者
哇塞,看著好厲害的樣子
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线激情视频 | 国产精品亚洲精品日韩已方 | 国产精品色 | 成年女人免费v片 | 日韩在线小视频 | 成人三级电影 | 天天摸天天干 | 午夜爽爽爽男女免费观看影院 | 午夜免费视频 | 亚洲国产高清在线 | 日韩欧美在线不卡 | 狠狠色狠狠色综合日日92 | 91在线一区 | 久久精品久久久 | 国产xxxx搡xxxxx搡麻豆 | 日韩久久久久久 | 成人亚洲 | 日韩在线精品视频 | 精品国产一级 | 操久久久| 欧美一区二区三区在线观看视频 | 日韩精品一区二区三区在线播放 | 国产在线观看一区 | 91电影在线 | av影音在线| 福利视频网址 | 日韩中文在线 | 久久久青草婷婷精品综合日韩 | 男人久久天堂 | 手机av在线 | 在线亚洲免费 | 久久国产视频播放 | 国产一区二区欧美 | av片在线观看网站 | 欧美99| 欧美日韩国产在线观看 | 亚洲最新在线视频 | 成人精品毛片国产亚洲av十九禁 | 97国产精品 | 国产精品一级 | 精品国产不卡一区二区三区 |