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

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

QQ登錄

只需一步,快速開始

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

交通燈單片機(jī)C51代碼 Proteus原理圖仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


源程序和仿真文件下載: C51代碼 Proteus原理圖 .rar (22.57 KB, 下載次數(shù): 67)

源代碼預(yù)覽:
  1. #include<reg51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={         //共陰極數(shù)碼管碼表
  5. 0x3f,0x06,0x5b,0x4f,
  6. 0x66,0x6d,0x7d,0x07,
  7. 0x7f,0x6f,0x77,0x7c,
  8. 0x39,0x5e,0x79,0x71,

  9. 0xC9,0xFF,0x40};//設(shè)置碼,測(cè)試碼,不計(jì)時(shí)碼

  10. void delay(uint x);//延時(shí)函數(shù)
  11. void display(uchar,uchar,uchar,uchar);        //數(shù)碼管顯示函數(shù)
  12. void mkeys();        //鍵盤函數(shù)
  13. void traffic();        //交通燈函數(shù)

  14. uchar num,num1,num2,  //1南北 2東西
  15. shi1,ge1,shi2,ge2,
  16. value1,value2,//南北 綠燈時(shí)間 黃燈時(shí)間
  17. value3,value4,//東西 綠燈時(shí)間 黃燈時(shí)間
  18. count1,count2,flag1,flag2; //南北標(biāo)記 東西標(biāo)記

  19. void main()
  20. {       
  21.                
  22.                 TMOD=0x01;
  23.                 TH0=(65536-45872)/256;
  24.                 TL0=(65536-45872)%256;
  25.                 EA=1;
  26.                 ET0=1;
  27.                 TR0=1;
  28.                 /*初狀態(tài)*/
  29.                 value1=15;                 //南北 黃綠燈默認(rèn)值
  30.                 value2=5;          
  31.                 value3=10;          //東西 黃綠燈默認(rèn)值
  32.                 value4=5;

  33.                 num1=value1; //南北數(shù)碼管先綠燈時(shí)間
  34.                 num2=value2+value1;//東西紅燈時(shí)間
  35.                 shi1=num1/10;
  36.                 ge1=num1%10;
  37.                 shi2=num2/10;
  38.                 ge2=num2%10;
  39.                 P1=0x41;//初始狀態(tài):東西紅燈 南北綠燈          20 15

  40.                 while(1){
  41.                         if(num==20)           //定時(shí)器1s
  42.                         {
  43.                                 num=0;
  44.                                 num1--;
  45.                                 num2--;
  46.                                 traffic();
  47.                                        
  48.                                 shi1=num1/10;
  49.                                 ge1=num1%10;

  50.                                 shi2=num2/10;
  51.                                 ge2=num2%10;

  52.                         }
  53.                           mkeys();
  54.                                   display(shi1,ge1,shi2,ge2);
  55.                           
  56.                 }

  57. }

  58. void traffic() //紅綠燈主控制程序
  59. {
  60.         if(num1==0){
  61.                         count1++;
  62.                         if(count1==1){
  63.                                 P1=0x42;//東西紅燈 南北黃燈        5 5
  64.                                 num1=value2;
  65.                         }
  66.                         if(count1==2){
  67.                                 num1=value3+value4;//東西綠燈 南北紅燈        10 15
  68.                                 P1=0x14;
  69.                         }
  70.                         if(count1==3){
  71.                                 P1=0x41;// 東西黃燈 南北紅燈        5 5
  72.                                 num1=value4;
  73.                                 count1=0;                                                       
  74.                         }
  75.         }
  76.         if(num2==0){
  77.                         count2++;
  78.                         if(count2==1){
  79.                                 //P1=0x14;//東西綠燈 南北紅燈
  80.                                 num2=value3;
  81.                         }
  82.                         if(count2==2){
  83.                                 P1=0x24;//東西黃燈 南北紅燈
  84.                                 num2=value4;
  85.                         }
  86.                         if(count2==3){
  87.                                 num2=value1+value2; //東西紅燈 南北綠燈
  88.                                 num1=value1;
  89.                                 count2=0;
  90.                         }
  91.                                        
  92.         }
  93. }

  94. void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2)        //數(shù)碼管顯示子函數(shù)
  95. {               
  96.                 uchar temp;
  97.                 temp=P2;
  98.                 P2=0xfe;
  99.                 P0=table[shi1];
  100.                 delay(5);
  101.                
  102.                 P2=0xfd;
  103.                 P0=table[ge1];
  104.                 delay(5);
  105.        
  106.                 P2=0xfb;
  107.                 P0=table[shi2];
  108.                 delay(5);
  109.                
  110.                 P2=0xf7;
  111.                 P0=table[ge2];
  112.                 delay(5);               
  113. }

  114. void delay(uint x)//延時(shí)子函數(shù)
  115. {
  116.         uint i,j;
  117.         for(i=x;i>0;i--)
  118.                 for(j=110;j>0;j--);
  119. }

  120. void mkeys()  //4*4矩陣鍵盤功能子函數(shù)
  121. {
  122.         uchar temp,key;
  123.         P3=0xfe;//第一行線
  124.         temp=P3;
  125.         temp=temp&0xf0;
  126.         if(temp!=0xf0)
  127.         {
  128.                 delay(10);
  129.                 temp=P3;
  130.                 temp=temp&0xf0;
  131.                 if(temp!=0xf0){
  132.                         temp=P3;
  133.                         switch(temp)
  134.                         {
  135.                                 case 0xee:
  136.                                         key=0;
  137.                                         break;
  138.                                 case 0xde:
  139.                                         key=1;
  140.                                         break;
  141.                                 case 0xbe:
  142.                                         key=2;
  143.                                         break;
  144.                                 case 0x7e:
  145.                                         key=3;
  146.                                         break;
  147.                         }
  148.                 while(temp!=0xf0)
  149.                 {
  150.                         temp=P3;
  151.                         temp=temp&0xf0;
  152.                 }
  153.                 if(key==0) {//按鍵1:暫停
  154.                         TR0=~TR0;  //定時(shí)器取反
  155.                         flag1=~flag1;//南北能夠設(shè)置標(biāo)志 0有效
  156.                         flag2=~flag2;//東西能夠設(shè)置標(biāo)志
  157.                 }

  158.                 if(key==1&&flag1==0){        //按鍵2:設(shè)置時(shí)間按鈕
  159.                         TR0=0;
  160.                         P1=0x44;//禁止東南西北車輛 全為紅燈 可以設(shè)置
  161.                         shi1=ge1=shi2=ge2=16;
  162.                 }

  163.                 if(key==2&&flag2==0){//按鍵3:設(shè)置完成 重啟
  164.                         TR0=1;
  165.                         num=0;         //定時(shí)器 初始化
  166.                         P1=0x41; //重新開始初狀態(tài)
  167.                         num1=value1; //南北數(shù)碼管先綠燈時(shí)間
  168.                         num2=value2+value1;//東西紅燈時(shí)間
  169.                         shi1=num1/10;
  170.                         ge1=num1%10;
  171.                         shi2=num2/10;
  172.                         ge2=num2%10;
  173.                 }

  174.                 if(key==3&&P1==0x44){ //按鍵4:測(cè)試交通燈各個(gè)設(shè)備的好壞
  175.                         P1=0xff;
  176.                         delay(1000);
  177.                         P1=~P1;
  178.                         shi1=ge1=shi2=ge2=17;
  179.                         P1=0x44;
  180.                 }

  181.                 }
  182.         }

  183.         P3=0xfd;//第二行線
  184.         temp=P3;
  185.         temp=temp&0xf0;
  186.         if(temp!=0xf0)
  187.         {
  188.                 delay(10);
  189.                 temp=P3;
  190.                 temp=temp&0xf0;
  191.                 if(temp!=0xf0){
  192.                         temp=P3;
  193.                         switch(temp)
  194.                         {
  195.                                 case 0xed:
  196.                                         key=0;
  197.                                         break;
  198.                                 case 0xdd:
  199.                                         key=1;
  200.                                         break;
  201.                                 case 0xbd:
  202.                                         key=2;
  203.                                         break;
  204.                                 case 0x7d:
  205.                                         key=3;
  206.                                         break;
  207.                         }
  208.                 while(temp!=0xf0)
  209.                 {
  210.                         temp=P3;
  211.                         temp=temp&0xf0;
  212.                 }
  213.                  
  214.                 if(key==0&&P1==0x44){        //按鍵5:設(shè)置南北綠燈時(shí)間+

  215.                         num1=value1;
  216.                         if(num2!=159){ //@@@@保證交通合理,紅燈最大值計(jì)時(shí)159s,綠燈不再增加
  217.                                 num1++;
  218.                                 value1=num1;
  219.                         }

  220.                         shi1=num1/10;
  221.                         ge1=num1%10;

  222.                         num2=value1+value2;//顯示東西紅燈時(shí)間
  223.                         shi2=num2/10;
  224.                         ge2=num2%10;


  225.                 }
  226.                 if(key==1&&P1==0x44){        //按鍵6:設(shè)置南北黃燈時(shí)間+
  227.                         num1=value2;
  228.                         if(num2!=159){
  229.                                 num1++;
  230.                                 value2=num1;
  231.                         }

  232.                         shi1=num1/10;
  233.                         ge1=num1%10;
  234.                         num2=value1+value2;//顯示東西紅燈時(shí)間
  235.                         shi2=num2/10;
  236.                         ge2=num2%10;

  237.                 }
  238.                 if(key==2&&P1==0x44&&value1>3){        //按鍵7:設(shè)置南北綠燈時(shí)間- @@@@保證交通合理,綠燈最小值計(jì)時(shí)3s,綠燈不再減少
  239.                         num1=value1;

  240.                         num1--;
  241.                         value1=num1;

  242.                         shi1=num1/10;
  243.                         ge1=num1%10;
  244.                         num2=value1+value2;//顯示東西紅燈時(shí)間
  245.                         shi2=num2/10;
  246.                         ge2=num2%10;

  247.                 }
  248.                 if(key==3&&P1==0x44&&value2>3){        //按鍵8:設(shè)置南北黃燈時(shí)間-          
  249.                         num1=value2;

  250.                         num1--;
  251.                         value2=num1;

  252.                         shi1=num1/10;
  253.                         ge1=num1%10;
  254.                         num2=value1+value2;//顯示東西紅燈時(shí)間
  255.                         shi2=num2/10;
  256.                         ge2=num2%10;

  257.                 }
  258.                 }
  259.        
  260.         }
  261.    ////||||||||||||||||||

  262.         P3=0xfb;//第三行線
  263.         temp=P3;
  264.         temp=temp&0xf0;
  265.         if(temp!=0xf0)
  266.         {
  267.                 delay(10);
  268.                 temp=P3;
  269.                 temp=temp&0xf0;
  270.                 if(temp!=0xf0){
  271.                         temp=P3;
  272.                         switch(temp)
  273.                         {
  274.                                 case 0xeb:
  275.                                         key=0;
  276.                                         break;
  277.                                 case 0xdb:
  278.                                         key=1;
  279.                                         break;
  280.                                 case 0xbb:
  281.                                         key=2;
  282.                                         break;
  283.                                 case 0x7b:
  284.                                         key=3;
  285.                                         break;
  286.                         }
  287.                 while(temp!=0xf0)
  288.                 {
  289.                         temp=P3;
  290.                         temp=temp&0xf0;
  291.                 }
  292.                 if(key==0&&P1==0x44){        //按鍵9:設(shè)置東西綠燈時(shí)間+
  293.        
  294.                         num2=value3;
  295.                         if(num1!=159){
  296.                                 num2++;
  297.                                 value3=num2;
  298.                         }

  299.                         shi2=num2/10;
  300.                         ge2=num2%10;

  301.                         num1=value3+value4;//顯示南北紅燈時(shí)間
  302.                         shi1=num1/10;
  303.                         ge1=num1%10;



  304.                 }
  305.                 if(key==1&&P1==0x44){        //按鍵10:設(shè)置東西黃燈時(shí)間+
  306.                         num2=value4;

  307.                         if(num1!=159){
  308.                                 num2++;
  309.                                 value4=num2;
  310.                         }

  311.                         shi2=num2/10;
  312.                         ge2=num2%10;
  313.                         num1=value3+value4;//顯示南北紅燈時(shí)間
  314.                         shi1=num1/10;
  315.                         ge1=num1%10;

  316.                 }
  317.                 if(key==2&&P1==0x44&&value3>3){        //按鍵11:設(shè)置東西綠燈時(shí)間-
  318.                         num2=value3;

  319.                         num2--;
  320.                         value3=num2;

  321.                         shi2=num2/10;
  322.                         ge2=num2%10;

  323.                         num1=value3+value4;//顯示南北紅燈時(shí)間
  324.                         shi1=num1/10;
  325.                         ge1=num1%10;


  326.                 }
  327.                 if(key==3&&P1==0x44&&value4>3){        //按鍵12:設(shè)置東西黃燈時(shí)間-
  328.                         num2=value4;

  329.                         num2--;
  330.                         value4=num2;

  331.                         shi2=num2/10;
  332.                         ge2=num2%10;
  333.                         num1=value3+value4;//顯示南北紅燈時(shí)間
  334.                         shi1=num1/10;
  335.                         ge1=num1%10;


  336.                 }
  337.                 }
  338.        
  339.         }

  340.         P3=0xf7;//第四行線                  2未用
  341.         temp=P3;
  342.         temp=temp&0xf0;
  343.         if(temp!=0xf0)
  344.         {
  345.                 delay(10);
  346.                 temp=P3;
  347.                 temp=temp&0xf0;
  348.                 if(temp!=0xf0){
  349.                         temp=P3;
  350.                         switch(temp)
  351.                         {
  352.                                 case 0xe7:
  353.                                         key=0;
  354.                                         break;
  355.                                 case 0xd7:
  356.                                         key=1;
  357.                                         break;
  358.                                 case 0xb7:
  359.                                         key=2;
  360.                                         break;
  361.                                 case 0x77:
  362.                                         key=3;
  363.                                         break;
  364.                         }
  365.                 while(temp!=0xf0)
  366.                 {
  367.                         temp=P3;
  368.                         temp=temp&0xf0;
  369.                 }
  370.                 if(key==0&&P1==0x44){        //按鍵13:南北緊急情況:南北綠燈常亮 東西紅燈常亮
  371.                         P1=0x41;
  372.                         shi1=ge1=shi2=ge2=18;       

  373.                 }
  374.                 if(key==1&&P1==0x44){        //按鍵14:東西緊急情況:東西綠燈常亮 南北紅燈常亮
  375.                         P1=0x14;
  376.                         shi1=ge1=shi2=ge2=18;       
  377.                 }
  378.                 if(key==2&&P1==0x44){//按鍵15:
  379.                        
  380.                 }
  381.                 if(key==3&&P1==0x44){//按鍵16:
  382.                        
  383.                 }
  384.                 }
  385.        
  386.         }



  387. }
  388. void T0_time() interrupt 1         //定時(shí)器T0 中斷子程序
  389. {
  390.         TH0=(65536-45872)/256;
  391.         TL0=(65536-45872)%256;
  392.         num++;
  393. }
復(fù)制代碼





評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:103158 發(fā)表于 2016-1-14 12:33 | 只看該作者
這個(gè)相當(dāng)詳細(xì)
回復(fù)

使用道具 舉報(bào)

板凳
ID:150457 發(fā)表于 2016-11-27 00:19 | 只看該作者
沒有黑幣啊
回復(fù)

使用道具 舉報(bào)

無效樓層,該帖已經(jīng)被刪除
5#
ID:258524 發(fā)表于 2017-12-7 11:41 | 只看該作者
想問一下那個(gè)交通燈是怎么表示的 找不到
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线不卡 | 亚洲欧美日本在线 | 亚洲综合免费 | 国产精品日日做人人爱 | 国产精品视频入口 | 91社区在线观看播放 | 久久精品久久精品久久精品 | 国产 日韩 欧美 中文 在线播放 | 日韩在线免费视频 | 91精品在线看 | 亚洲丝袜天堂 | 国产在线播 | 国产免费又色又爽又黄在线观看 | 国产亚洲精品久久久久久牛牛 | 久热精品在线观看视频 | 久色一区 | 欧美日韩在线视频观看 | 日韩一区二区福利视频 | 久草在线影 | 日日淫| 久久久天天 | 久久综合欧美 | 精品国产精品一区二区夜夜嗨 | 国产一区二区三区在线免费观看 | av免费网站在线观看 | 激情亚洲 | 国产999精品久久久影片官网 | 天天操夜夜爽 | 日韩二区| 在线播放国产一区二区三区 | 国产精品免费一区二区三区 | 国产精品久久久久久模特 | 久久逼逼| 日韩视频1 | 亚洲视频免费在线播放 | 欧美成视频 | 亚洲午夜精品 | 亚洲第一女人av | 国产精品久久久久免费 | 一区二区三区视频免费看 | 成人午夜影院 |