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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C51仿真實現交通燈+單片機代碼

[復制鏈接]
跳轉到指定樓層
樓主
觀察十字路口紅綠燈工作流程,設計交通燈。
1、初始時:南北向、東西向直行左轉均為紅燈
2、南北向直行:
①南北向直行綠燈亮,延時若干秒
②啟動南北向左轉數碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
③南北向左轉數碼管倒計時顯示結束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮
3、南北向左轉:
①南北向左轉綠燈亮,延時若干秒
②啟動東西向直行數碼管顯示:倒計時6秒;同時南北向左轉綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后南北向左轉綠燈滅,南北向左轉黃燈亮,延時3秒
③東西向直行數碼管倒計時顯示結束,關閉;同時南北向左轉黃燈滅,南北向左轉紅燈亮
4、東西向直行:
①東西向直行綠燈亮,延時若干秒
②啟動東西向左轉數碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
③東西向左轉數碼管倒計時顯示結束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮
5、東西向左轉:
①東西向左轉綠燈亮,延時若干秒
②啟動南北向直行數碼管顯示:倒計時6秒;同時東西向左轉綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后東西向左轉綠燈滅,東西向左轉黃燈亮,延時3秒
③南北向直行數碼管倒計時顯示結束,關閉;同時東西向左轉黃燈滅,東西向左轉紅燈亮

電路原理圖如下:


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit LX0=P3^0;
  6. sbit LX1=P3^1;
  7. bit bp=0;
  8. uchar m,n,k;
  9. uchar time1[]={20,120};//數碼管第一狀態5s,第二狀態6s
  10. uchar time2[]={100,10,60};//交通燈第一狀態5s,第二狀態3s,第三狀態3s
  11. uint index1=1;
  12. uint index2=0;
  13. uchar tt[]={0x20,0x04};
  14. uint t=0;
  15. uint flag=0;
  16. uchar code table[]={
  17. 0x3f,0x06,0x5b,0x4f,
  18. 0x66,0x6d,0x7d,0x07,
  19. 0x7f,0x6f,0x77,0x7c,
  20. 0x39,0x5e,0x79,0x71,
  21. 0x00
  22. };
  23. uchar P2_0=0x01;//(P2.0~P2.3)選擇數碼管
  24. uchar P1_01=0x21;
  25. uchar P1_02=0x09;
  26. int number=6;
  27. void showNumber()
  28. {
  29.         if(index1==0)
  30.         {
  31.                 P2=P2_0;        
  32.                 P0=~table[number];
  33.                 if(number==0)
  34.                 {
  35.                         P2=0x00;
  36.                         P2_0<<=1;
  37.                         if(P2_0==0x10)
  38.                                 P2_0=0x01;
  39.                         number=6;
  40.                         index1=1;
  41.                 }
  42.         }
  43. }
  44. void openLight()
  45. {
  46.         switch(index2)
  47.         {
  48.                 case 0:
  49.                 if(m==time2[index2])
  50.                 {
  51.                         m=0;
  52.                         index2=1;        
  53.                 }        
  54.                 break;
  55.                 case 1:
  56.                 if(m==time2[index2])
  57.                 {
  58.                         m=0;
  59.                         k++;
  60.                         if(bp==0)
  61.                                 P1_01=P1_01^tt[t];
  62.                         else
  63.                                 P1_02=P1_02^tt[t];
  64.                         if(k==8)
  65.                         {
  66.                                 k=0;
  67.                                 t=(t+1)%2;
  68.                                 index2=2;
  69.                                 if(bp==0)
  70.                                 {
  71.                                         if(t==1)
  72.                                                 P1_01=0x11;
  73.                                         else
  74.                                                 P1_01=0x0A;
  75.                                 }
  76.                                 else
  77.                                 {
  78.                                         if(t==1)
  79.                                                 P1_02=0x11;
  80.                                         else
  81.                                                 P1_02=0x0A;
  82.                                 }
  83.                                 
  84.                         }
  85.                 }
  86.                 break;
  87.                 case 2:
  88.                 if(m==time2[index2])
  89.                 {
  90.                         flag++;
  91.                         if(bp==0)
  92.                         {
  93.                                 if(flag!=2)
  94.                                         P1_01=0x0C;
  95.                                 else
  96.                                 {
  97.                                         flag=0;
  98.                                         P1_01=0x09;
  99.                                         P1_02=0x21;
  100.                                         bp=~bp;
  101.                                 }
  102.                         }
  103.                         else
  104.                         {
  105.                                 if(flag!=2)
  106.                                         P1_02=0x0C;
  107.                                 else
  108.                                 {
  109.                                         flag=0;
  110.                                         P1_02=0x09;
  111.                                         P1_01=0x21;
  112.                                         bp=~bp;
  113.                                 }
  114.                         }
  115.                         index2=0;
  116.                         m=0;
  117.                 }
  118.                 break;
  119.         }
  120.         P1=0x00;
  121.         LX0=1;
  122.         P1=P1_01;
  123.         LX0=0;

  124.         P1=0x00;
  125.         LX1=1;
  126.         P1=P1_02;
  127.         LX1=0;
  128. }
  129. void main()
  130. {
  131.         P1=0x00;
  132.         EA=1;//打開全局中斷允許
  133.         TMOD=0x11;//設置定時器工作方式
  134.         TH0=15535/256;//計時50ms
  135.         TL0=15535%256;
  136.         TH1=15535/256;
  137.         TL1=15535%256;
  138.         ET0=1;//打開計時器中斷允許
  139.         ET1=1;
  140.         TR0=1;//啟動定時器
  141.         TR1=1;
  142.         while(1)
  143.         {        //openLight();
  144.                 showNumber();
  145.         }
  146. }
  147. void ET_T0() interrupt 1
  148. {
  149.         TH0=15535/256;
  150.         TL0=15535%256;
  151.         m++;
  152.         openLight();
  153. }
  154. void ET_T1() interrupt 3
  155. {
  156.         TH1=15535/256;
  157.         TL1=15535%256;
  158.         n++;
  159.         switch(index1)
  160.         {
  161.                 case 0:
  162.                 if(n==time1[index1])
  163.                 {
  164.                         number=(number-1)%6;
  165.                         n=0;        
  166.                 }        
  167.                 break;
  168.                 case 1:
  169.                 if(n==time1[index1])
  170.                 {
  171.                         index1=0;
  172.                         n=0;
  173.                 }
  174.                 break;
  175.         }
  176. }
復制代碼

所有資料51hei提供下載:
交通燈.zip (25.37 KB, 下載次數: 84)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:526182 發表于 2019-5-25 22:51 | 只看該作者
樓主可以抽空注釋一下代碼的作用嗎?
回復

使用道具 舉報

板凳
ID:404722 發表于 2019-8-5 18:02 | 只看該作者
nouman 發表于 2019-5-25 22:51
樓主可以抽空注釋一下代碼的作用嗎?

比較忙,不喜歡注釋
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合久久av| 成年人免费在线视频 | 一级欧美一级日韩片免费观看 | 欧美一区二区在线视频 | 亚洲视频免费在线观看 | 黄色一级网| 正在播放亚洲 | 欧美成年人视频在线观看 | 91在线影院 | 国产91综合| 三级成人在线 | 在线激情视频 | 久久久人成影片一区二区三区 | 亚洲欧美日韩系列 | 成人av电影免费在线观看 | 成人亚洲 | 成人免费视频网站 | 中文字幕 在线观看 | 久久精品在线免费视频 | 久久精品99| www97影院 | 国产三区视频在线观看 | 日韩高清成人 | 日本午夜网 | 9191av| 毛片一区二区三区 | 国产精品久久久久久久久免费樱桃 | 欧美日韩一本 | 国产亚洲一级 | 久久最新 | 亚洲一区二区免费 | 人人做人人澡人人爽欧美 | 国产成人99久久亚洲综合精品 | 日韩激情网 | 国产一级大片 | 免费久久久 | 亚洲国产精品一区二区第一页 | 日韩精品一区二区三区中文字幕 | 精品久久久久久久人人人人传媒 | a视频在线观看 | 亚洲美乳中文字幕 |