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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

mini51單片機開發板程序 為啥P1口全亮 而且數碼管不顯示啊?

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include <reg51.h>
  2. #define        uchar        unsigned char
  3. #define        uint        unsigned int
  4. /*****定義控制位**********************/
  5. sbit        K4=P3^2;                        //恢復正常
  6. sbit        K3=P3^3;                        //緊急(全部紅燈)
  7. sbit        K2=P3^4;                        //東西通行
  8. sbit        K1=P3^5;                        //南北通行

  9. sbit        EW_LED2=P2^3;        //EW_LED2控制位
  10. sbit        EW_LED1=P2^2;        //EW_LED1控制位
  11. sbit        SN_LED2=P2^1;        //SN_LED2控制位
  12. sbit        SN_LED1=P2^0;        //SN_LED1控制位

  13. sbit  SN_Yellow=P1^6; //SN黃燈
  14. sbit  SN_Red=P1^7;    //SN紅燈
  15. sbit  SN_Green=P1^5;  //SN綠燈
  16. sbit  EW_Yellow=P1^2; //EW黃燈
  17. sbit  EW_Red=P1^3;    //EW紅燈
  18. sbit  EW_Green=P1^1;  //EW綠燈

  19. bit          Restore_flag=0;                        //恢復正常標志位
  20. bit   Flag_SN_Yellow;     //SN黃燈標志位
  21. bit   Flag_EW_Yellow;     //EW黃燈標志位
  22. char        Time_EW;  //東西方向倒計時單元
  23. char        Time_SN;  //南北方向倒計時單元
  24. uchar EW=25,SN=30;     //程序初始化賦值      
  25. uchar EW1=30,SN1=25;   //用于存放修改值的變量
  26. uchar KeyNumber=0;
  27. uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~~~~9段選碼
  28. uchar code S[9]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84,0x88};//交通信號燈控制代碼

  29. /**********************延時子程序************************/
  30. void delay_ms(uint x) //延時ms
  31. {
  32.         uint i,j;
  33.         for(i=x;i>0;i--)
  34.         for(j=110;j>0;j--);
  35. }
  36. /*****************顯示函數**************************/
  37. void Display(void)
  38. {
  39.         char h,l;
  40.         h=Time_EW/10;
  41.         l=Time_EW%10;
  42.   P0=table[l];EW_LED2=1;delay_ms(1);EW_LED2=0;
  43.   P0=table[h];EW_LED1=1;delay_ms(1);EW_LED1=0;                                //東西方向數碼管顯示
  44.       
  45.         h=Time_SN/10;
  46.         l=Time_SN%10;
  47.         P0=table[l];SN_LED2=1;delay_ms(1);SN_LED2=0;
  48.   P0=table[h];SN_LED1=1;delay_ms(1);SN_LED1=0;                                //南北方向數碼管顯示      
  49. }

  50. /**********************INT0中斷服務程序(按鍵掃描)*****************/
  51. void int0_FXR() interrupt 0
  52. {
  53.         uchar FXR=P2;
  54.         FXR=FXR&0Xf0;
  55.         switch(FXR)
  56.                 {
  57.                 case 0x70 : KeyNumber = 1; break;
  58.                 case 0xb0 : KeyNumber = 2; break;
  59.                 case 0xd0 : KeyNumber = 3; break;
  60.                 case 0xe0 : KeyNumber = 4; break;
  61.                 default:KeyNumber = 0;
  62.                 }
  63. }
  64. /**********************T0中斷服務程序*******************/
  65. void timer0()  interrupt 1
  66. {
  67.         static uchar count;                         //count為靜態變量初值為0
  68.         TL0 = 0xB0;                                                          //重賦定時初值50ms
  69.         TH0 = 0x3C;                                                         //重賦定時初值50ms
  70.         count++;                                                                 //計數
  71.         if(count==10)                                           //加快閃爍速度
  72.         {
  73.           if(Flag_SN_Yellow==1)  //測試南北黃燈標志位
  74.           {SN_Yellow=~SN_Yellow;}//南北黃燈閃爍
  75.           if(Flag_EW_Yellow==1)  //測試東西黃燈標志位
  76.           {EW_Yellow=~EW_Yellow;}//東西黃燈閃爍
  77.         }
  78.         if(count==20)                                                                         //20*50=1000ms=1S      
  79.         {
  80.                 Time_EW--;                                                                         //東西方向倒計時
  81.                 Time_SN--;                                                                   //南北方向倒計時
  82.         if(Flag_SN_Yellow==1)                                        //測試南北黃燈標志位
  83.             {SN_Yellow=~SN_Yellow;}                //南北黃燈閃爍
  84.         if(Flag_EW_Yellow==1)                                        //測試東西黃燈標志位
  85.             {EW_Yellow=~EW_Yellow;}                //東西黃燈閃爍
  86.         count=0;
  87.         }
  88. }
  89. void keyboard()
  90. {
  91. while(KeyNumber)
  92.         {
  93.         if(KeyNumber)
  94.                 {
  95.                 if(KeyNumber==1)
  96.                         {
  97.                                 TR0=0;
  98.                                 Time_EW=0;                                                        //東西數碼管賦值0s      
  99.                                 Time_SN=0;                                                        //南北數碼管賦值0s                                               
  100.                                 while(KeyNumber==1)                       
  101.                                 {
  102.                                   Flag_EW_Yellow=0;          //東西關黃燈顯示信號
  103.                                         P1=S[0];                                                 //南北通行,東西紅燈
  104.                                         Display();                                  //調用顯示函數                          
  105.                                 }
  106.                   }
  107.                 if(KeyNumber==2)
  108.                         {      
  109.                                 TR0=0;
  110.                                 Time_EW=0;                                                        //東西數碼管賦值0s      
  111.                                 Time_SN=0;                                                        //南北數碼管賦值0s
  112.                                 while(KeyNumber==2)                       
  113.                                         {  
  114.                                                 Flag_SN_Yellow=0;          //東西關黃燈顯示信號                          
  115.                                                 P1=S[4];                                                         //東西通行,南北紅燈
  116.                                                 Display();                                          //調用顯示函數
  117.                                         }
  118.                         }
  119.                 if(KeyNumber==3)
  120.                         {      
  121.                                 TR0=0;
  122.                                 Time_EW=0;                                                         //東西數碼管賦值0s
  123.                                 Time_SN=0;                                                         //南北數碼管賦值0s
  124.                                 while(KeyNumber==3)
  125.                                         {
  126.                                                 P1=S[8];                                                          //所有路口紅燈
  127.                                                 Display();                                           //調用顯示函數
  128.                                         }
  129.                         }
  130.                 if(KeyNumber==4)
  131.                         {
  132.                                 TR0=1;
  133.                                 Time_EW=25;                                                        //東西數碼管賦值25s      
  134.                                 Time_SN=30;                                                        //南北數碼管賦值30s
  135.                                 Restore_flag=1;
  136.                                 break;
  137.                         }
  138.                 }
  139.         }
  140. }
  141. /*********************主程序開始**********************/
  142. void main(void)
  143. {
  144. /*********************中斷初始化**********************/
  145.         IT0=1;                                                                         //設置外部中斷0觸發方式(下降沿觸發)
  146.         EX0=1;                                                                         //打開外部中斷0的IE寄存器中斷
  147.         EA=1;                                                                           //CPU開中斷總允許
  148.         ET0=1;                                                                         //開定時中斷
  149.         TMOD=0x01;                                                         //定時器工作于方式1
  150.         TL0 = 0xB0;                                                          //設置定時初值50ms
  151.         TH0 = 0x3C;                           //設置定時初值50ms
  152.         TF0 = 0;                             //清除TF0標志
  153.         TR0 = 1;                             //定時器0開始計時
  154. while(1)                                                                              
  155.         {
  156.                 keyboard();
  157.                 if(Restore_flag)
  158.                 break;               
  159.                 /*******S1狀態(東西直行狀態)**********/
  160.                 Time_EW=EW;                                                        //東西數碼管賦值25s      
  161.                 Time_SN=SN;                                                        //南北數碼管賦值30s
  162.           while(Time_SN>=6)                                //南北方向倒計時前25s循環體
  163.            {  
  164.                          Flag_SN_Yellow=0;          //東西關黃燈顯示信號                          
  165.                          P1=S[4];                                                         //東西通行,南北紅燈
  166.                          Display();                                          //調用顯示函數
  167.                          keyboard();
  168.                          if(Restore_flag)
  169.                          break;
  170.                  }
  171.                 /*******S2狀態(東西直行黃燈閃爍狀態)**********/
  172.             P1=0x00;                                                        //所有路口紅綠燈短時熄滅
  173.                  if(Time_SN==5)                                        //當南北倒計時為5s時
  174.                                 Time_EW=5;                                        //東西重新從5s開始倒計時
  175.           while(Time_SN>=1)                                //南北方向倒計時最后5s循環體
  176.            {
  177.                          Flag_EW_Yellow=1;                //東西開黃燈信號位
  178.              SN_Red=1;                                                //東西黃燈開始閃爍,南北紅燈亮      
  179.              Display();                                                //調用顯示函數
  180.                          keyboard();
  181.                          if(Restore_flag)
  182.                          break;                        
  183.            }
  184.                 /***********賦值(東西通行變南北通行)**********/
  185.                 EW=EW1;                                                                        //東西25s-->30s
  186.                 SN=SN1;                                                                        //南北30s-->25s         
  187.                 /*******S3狀態(南北直行狀態)**********/                       
  188.                 Time_EW=EW;                                                        //東西數碼管賦值30s
  189.                 Time_SN=SN;                                                        //南北數碼管賦值25s
  190.            while(Time_EW>=6)                        //東西方向倒計時前25s循環體
  191.             {
  192.                                 Flag_EW_Yellow=0;          //東西關黃燈顯示信號
  193.                                 P1=S[0];                                                 //南北通行,東西紅燈
  194.               Display();                                  //調用顯示函數
  195.                                 keyboard();      
  196.                                 if(Restore_flag)
  197.                           break;               
  198.                   }
  199.                 /*******S4狀態(南北直行黃燈閃爍狀態)**********/
  200.                         P1=0X00;                                             //所有路口紅綠燈短時熄滅
  201.                         if(Time_EW==5)                                //當東西倒計時為5s時
  202.                                 Time_SN=5;                                        //南北重新從5s開始倒計時
  203.                 while(Time_EW>=1)                                //東西方向倒計時最后5s循環體
  204.            {
  205.              Flag_SN_Yellow=1;          //南北開黃燈信號位
  206.                          EW_Red=1;            //南北黃燈開始閃爍,東西紅燈亮
  207.              Display();                                    //調用顯示函數
  208.                          keyboard();
  209.                          if(Restore_flag)
  210.                          break;                                 
  211.            }
  212.           /***********賦值(南北通行變東西通行)**********/
  213.           EW=SN1;                                                                        //東西30s-->25s
  214.                 SN=EW1;                                                                        //南北25s-->30s         
  215.         }
  216. }
復制代碼


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

使用道具 舉報

沙發
ID:155507 發表于 2022-5-17 08:41 | 只看該作者
本帖最后由 angmall 于 2022-5-17 08:51 編輯
為啥P1口全亮 而且數碼管不顯示啊?

你控制的啊,因為P1口是上拉的。
  1.                 /*******S2狀態(東西直行黃燈閃爍狀態)**********/
  2.                 P1=0x00;                                          //所有路口紅綠燈短時熄滅
復制代碼

數碼管 控制位要0才會顯示的。
  1. h=Time_EW/10;
  2.         l=Time_EW%10;
  3.         P0=table[l];EW_LED2=1;delay_ms(1);EW_LED2=0;
  4.         P0=table[h];EW_LED1=1;delay_ms(1);EW_LED1=0;                                //東西方向數碼管顯示
復制代碼

QX-Mini51Cct.jpg (284.88 KB, 下載次數: 44)

QX-Mini51Cct.jpg
回復

使用道具 舉報

板凳
ID:979299 發表于 2022-5-17 09:45 | 只看該作者
交通燈程序可以在開發板上運行,但是對應的IO口不一定都能對上,你得根據實際電路改程序
回復

使用道具 舉報

地板
ID:1026861 發表于 2022-5-17 16:37 | 只看該作者
angmall 發表于 2022-5-17 08:41
你控制的啊,因為P1口是上拉的。

數碼管 控制位要0才會顯示的。

P1=0xff   嗎?
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];EW_LED2=0;delay_ms(1);EW_LED2=1;
P0=table[h];EW_LED1=0;delay_ms(1);EW_LED1=1;
這樣嗎?
                               
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区在线播放 | 国产精品成人久久久久 | 在线色网 | 亚洲免费在线视频 | 中文字幕99| 中文字幕日韩欧美 | 中文字幕三区 | 国产精品视频久久久 | 91精品国产色综合久久 | 日韩精品一区二区三区视频播放 | 亚洲视频在线一区 | 狠狠视频 | 国产欧美日韩在线播放 | 伊人伊人伊人 | 中文字幕高清av | 国产中文视频 | 午夜成人在线视频 | 草樱av| 欧美伊人久久久久久久久影院 | 中日av| 日韩在线视频一区二区三区 | 国产视频1 | 狠狠干狠狠操 | 久久久青草婷婷精品综合日韩 | 久久久久九九九九 | 麻豆久久久9性大片 | 久久伊人在 | 久色网| 国产一级视频免费播放 | 成人做爰9片免费看网站 | 国产欧美在线播放 | 能免费看的av | 中文字幕日韩欧美 | 欧美日韩视频在线第一区 | 亚洲视频一区在线 | 91精品国产91久久久久青草 | 国产精品av久久久久久毛片 | 国产亚洲精品精品国产亚洲综合 | 国产免费一区 | 欧美久久久久久久久中文字幕 | 午夜网站视频 |