找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1667|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

C51單片機(jī)交通燈程序Proteus仿真 四個(gè)干道的初始值可變

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
四個(gè)干道的初始值可變

單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ON 0
  5. #define OFF 1
  6. sbit Z_G=P1^2; // 主干道綠燈
  7. sbit Z_Y=P1^3; // 主干道黃燈
  8. sbit Z_R=P1^4; // 主干道紅燈

  9. sbit F_G=P1^5; // 支干道綠燈
  10. sbit F_Y=P1^6; // 支干道黃燈
  11. sbit F_R=P1^7; // 支干道紅燈

  12. sbit wei_Z1=P2^0; // 主干道數(shù)碼管位控制
  13. sbit wei_Z2=P2^1; // 主干道數(shù)碼管位控制

  14. sbit wei_F1=P2^2; // 支干道數(shù)碼管位控制
  15. sbit wei_F2=P2^3; // 支干道數(shù)碼管為控制


  16. sbit key1=P1^0;                                //開(kāi)關(guān)位定義
  17. sbit key2=P1^1;

  18. sbit buzzer=P3^7;    //蜂鳴器定義

  19. uchar count; //定時(shí)器中斷計(jì)數(shù)值

  20. /********* 倒計(jì)時(shí)賦初值 *************/
  21. int T_Z_G=60,T_F_G=30,T_F_R=60,T_Z_R=30,T_Y=3;//T_Z_G主干道的綠燈初始值為60,T_F_G支干道的綠燈為30,T_Y黃燈都為3
  22. //T_F_R為支干道的紅燈值60,T_Z_R為主干道的紅燈值30

  23. void init(void)
  24. {
  25.         TMOD=0x01;
  26.         TH0=(65536-50000)/256;
  27.         TL0=(65536-50000)%256;
  28.         EA=1;
  29.         ET0=1;
  30.         TR0=1;       
  31. }


  32. /****************** 延時(shí) **********************/
  33. void delay(uchar z)
  34. {
  35.                 uchar x,y;
  36.                 for(x=z;x>0;x--)
  37.                 for(y=110;y>0;y--);
  38. }

  39. /******************seg 控制 *******************/
  40. unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 共陰極數(shù)碼管賦值
  41. void display1(uchar num1,uchar num2) //控制支干道數(shù)碼管倒計(jì)時(shí)顯示
  42. {
  43.         P3=table[num1];
  44.         wei_F1=ON;
  45.         delay(1);
  46.         wei_F1=OFF;

  47.         P3=table[num2];
  48.         wei_F2=ON;
  49.         delay(1);
  50.         wei_F2=OFF;

  51.         if(key1==0)//主干道緊急制動(dòng)
  52.         {
  53.                 delay(2);
  54.                 if(key1==0)
  55.                 {
  56.                         while(1)
  57.                         {
  58.                                 P0=0x00;
  59.                                 P3=0x00;
  60.                                 F_G=OFF;
  61.                                 F_Y=OFF;
  62.                                 F_R=ON;
  63.                        
  64.                                 Z_G=OFF;
  65.                                 Z_Y=OFF;
  66.                                 Z_R=ON;
  67.                                 buzzer=~buzzer;//蜂鳴器叫
  68.                                 if(key2==0)
  69.                                 {
  70.                                         delay(2);
  71.                                         if(key2==0)
  72.                                         {
  73.                                                 F_R=OFF;
  74.                                                 Z_R=OFF;
  75.                                                 buzzer=OFF;
  76.                                                 break;
  77.                                         }
  78.                                 }
  79.                        
  80.                         }
  81.                 }
  82.           
  83.         }
  84. }
  85. void display2(uchar num3,uchar num4) //控制主干道數(shù)碼管倒計(jì)時(shí)顯示
  86. {
  87.         P0=table[num3];
  88.         wei_Z1=ON;
  89.         delay(1);
  90.         wei_Z1=OFF;

  91.         P0=table[num4];
  92.         wei_Z2=ON;
  93.         delay(1);
  94.         wei_Z2=OFF;
  95.        
  96.         if(key1==0)//主干道緊急制動(dòng)
  97.         {
  98.                 delay(2);
  99.                 if(key1==0)
  100.                 {
  101.                         while(1)
  102.                         {
  103.                                 P0=0x00;
  104.                                 P3=0x00;
  105.                                 F_G=OFF;
  106.                                 F_Y=OFF;
  107.                                 F_R=ON;
  108.                        
  109.                                 Z_G=OFF;
  110.                                 Z_Y=OFF;
  111.                                 Z_R=ON;
  112.                                 buzzer=~buzzer;//蜂鳴器叫
  113.                                 if(key2==0)
  114.                                 {
  115.                                         delay(2);
  116.                                         if(key2==0)
  117.                                         {
  118.                                                 F_R=OFF;
  119.                                                 Z_R=OFF;
  120.                                                 buzzer=OFF;
  121.                                                 break;
  122.                                         }
  123.                                 }
  124.                        
  125.                         }
  126.                 }
  127.           
  128.         }
  129. }

  130. void main()
  131. {
  132.         int i;
  133.         buzzer=OFF;//關(guān)閉蜂鳴器
  134.         //初始狀態(tài)支干道主干道禁止通行
  135.         Z_R=ON; //主干道紅燈打開(kāi)
  136.         F_R=ON; //支干道紅燈打開(kāi)
  137.        
  138.         for(i=0;i<210;i++) //延時(shí)
  139.                 {
  140.                         delay(10);
  141.                 }

  142.         Z_R=OFF;// 主干道紅燈關(guān)閉
  143.         F_R=OFF;// 支干道紅燈關(guān)閉       
  144.         init(); // 初始化計(jì)時(shí)器
  145.         while(1)
  146.         {
  147.                 /**************** 狀態(tài) 1:支干道紅燈 (30s), 主干道綠燈 (60s)************/
  148.                 /**************** 狀態(tài) 2:支干道紅燈 (30s), 主干道黃燈 (3s) ************/
  149.                 while(T_Z_G >= 0)
  150.                 {
  151.                         display1(T_F_R/10,T_F_R%10);// 支干道紅燈 (60s)
  152.                         display2(T_Z_G/10,T_Z_G%10);// 主干道綠燈 (60s)
  153.                         Z_G=ON; // 主干道的綠燈打開(kāi)
  154.                         F_R=ON; // 支干道的紅燈打開(kāi)
  155.                 }
  156.                 T_Y=3;// 重新賦值黃燈
  157.                 while(T_Y >= 0)
  158.                 {
  159.                         display1(T_Y/10,T_Y%10);// 支干道黃燈(3s)
  160.                         display2(T_Y/10,T_Y%10);// 主干道黃燈(3s)
  161.                         F_R=OFF; // 支干道的紅燈關(guān)閉
  162.                         F_Y=ON;  // 支干道的黃燈打開(kāi)
  163.                         Z_G=OFF; // 主干道的綠燈關(guān)閉
  164.                         Z_Y=ON;  // 主干道的黃燈打開(kāi)
  165.                 }
  166.                 F_R=OFF; // 支干道的紅燈關(guān)閉
  167.                 Z_G=OFF; // 主干道的綠燈關(guān)閉
  168.                 Z_Y=OFF; // 主干道的黃燈關(guān)閉
  169.                 F_Y=OFF; // 支干道的黃燈關(guān)閉
  170.                 T_F_G=30,T_F_R=60,T_Z_R=30;// 重新賦值
  171.                 /**************** 狀態(tài) 3:支干道綠燈 (30s), 主干道紅燈 (30s)**************/
  172.                 /*************** 狀態(tài) 4:支干道黃燈 (3s) , 主干道紅燈 (30s)***************/
  173.                 //init(); // 初始化計(jì)時(shí)器
  174.                 while(T_F_G >= 0)
  175.                 {
  176.                         display1(T_F_G/10,T_F_G%10);// 支干道綠燈 (30s)
  177.                         display2(T_Z_R/10,T_Z_R%10);// 主干道紅燈 (30s)
  178.                         Z_R=ON;// 主干道的紅燈打開(kāi)
  179.                         F_G=ON;// 支干道的綠燈打開(kāi)
  180.                 }
  181.                 T_Y=3;// 重新賦值黃燈
  182.                 while(T_Y >= 0)
  183.                 {
  184.                         display1(T_Y/10,T_Y%10);// 支干道黃燈 (3s)
  185.                         display2(T_Y/10,T_Y%10);// 主干道黃燈 (3s)
  186.                         F_G=OFF; // 支干道的綠燈關(guān)閉
  187.                         F_Y=ON;  // 支干道的黃燈打開(kāi)
  188.                         Z_R=OFF; // 主干道的紅燈關(guān)閉
  189.                         Z_Y=ON;  // 主干道的黃燈打開(kāi)
  190.                 }
  191.                 Z_R=OFF; // 主干道的紅燈關(guān)閉
  192.                 Z_Y=OFF;  // 主干道的黃燈關(guān)閉
  193.                 F_G=OFF; // 支干道的綠燈關(guān)閉
  194.                 F_Y=OFF; // 支干道的黃燈關(guān)閉
  195.                 T_Z_G=60,T_F_G=30,T_F_R=60,T_Z_R=30,T_Y=3;// 重新賦值
  196.         }
  197. }

  198. //定時(shí)器中斷函數(shù)
  199. void timer1(void) interrupt 1
  200. {
  201.         //重裝初值 0.05s
  202.         TH0=(65536-50000)/256;
  203.         TL0=(65536-50000)%256;  
  204.         count++;
  205.         if(count==20) //20次為1s    20*0.05=1
  206.         {
  207.                 T_Z_G--;
  208.                 T_F_G--;
  209.                 T_F_R--;
  210.                 T_Z_R--;
  211.                 T_Y--;
  212.                 count=0;
  213.         }

  214. }
復(fù)制代碼

下載: C51交通燈.rar (72.37 KB, 下載次數(shù): 6)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1064915 發(fā)表于 2024-11-8 09:54 | 只看該作者
Proteus版本高,打不開(kāi)
回復(fù)

使用道具 舉報(bào)

板凳
ID:986591 發(fā)表于 2024-11-14 22:36 | 只看該作者
joyb 發(fā)表于 2024-11-8 09:54
Proteus版本高,打不開(kāi)

去下一個(gè)8.13版本的就行了
回復(fù)

使用道具 舉報(bào)

地板
ID:1140081 發(fā)表于 2024-12-17 15:22 | 只看該作者
精品
回復(fù)

使用道具 舉報(bào)

5#
ID:1142693 發(fā)表于 2025-1-14 13:56 | 只看該作者
麻煩問(wèn)一下,為什么我的keil運(yùn)行后有這些問(wèn)題?
20.c(14): error C202: 'P2': undefined identifier
20.c(15): error C202: 'P2': undefined identifier
20.c(17): error C202: 'P2': undefined identifier
20.c(18): error C202: 'P2': undefined identifier
20.c(56): error C202: 'wei_F1': undefined identifier
20.c(58): error C202: 'wei_F1': undefined identifier
20.c(61): error C202: 'wei_F2': undefined identifier
20.c(63): error C202: 'wei_F2': undefined identifier
20.c(102): error C202: 'wei_Z1': undefined identifier
20.c(104): error C202: 'wei_Z1': undefined identifier
20.c(107): error C202: 'wei_Z2': undefined identifier
20.c(109): error C202: 'wei_Z2': undefined identifier
回復(fù)

使用道具 舉報(bào)

6#
ID:986591 發(fā)表于 2025-3-26 15:03 | 只看該作者
mrj_142378 發(fā)表于 2025-1-14 13:56
麻煩問(wèn)一下,為什么我的keil運(yùn)行后有這些問(wèn)題?
20.c(14): error C202: 'P2': undefined identifier
20.c ...

如果是用的是我的完整代碼,我覺(jué)得是你編譯器問(wèn)題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表