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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

動態數碼管計數+串口+計數控制

[復制鏈接]
跳轉到指定樓層
樓主
ID:262845 發表于 2017-12-20 14:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我上個月做的代碼,
內有源代碼,
請多多指導。
  1. #include "reg52.h"
  2. #include "intrins.h"
  3. typedef unsigned int u16;         
  4. typedef unsigned char u8;

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;

  8. #define GPIO_DIG P0
  9. #define GPIO_TRAFFIC P1

  10. sbit RED10   = P1^0;   //上人行道紅燈
  11. sbit GREEN10 = P1^1;   //上人行道綠燈
  12. sbit RED11   = P1^2;
  13. sbit YELLOW11= P1^3;
  14. sbit GREEN11 = P1^4;

  15. sbit RED00   = P3^0;        //右人行道紅燈
  16. sbit GREEN00 = P3^1;        //右人行道綠燈
  17. sbit RED01   = P1^5;
  18. sbit YELLOW01= P1^6;
  19. sbit GREEN01 = P1^7;
  20. sbit k3=P3^2;  //定義按鍵K3

  21. int TIME=0;
  22. u8 code smgduan[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //共陰 code 代碼 編碼
  23. u8 DisplayData[8];//8個以上的(顯示0~F的值 一個8段的數碼管)

  24. /*******************************************************************************
  25. * 函數名         :UsartInit()
  26. * 函數功能                   :設置串口
  27. * 輸入           : 無
  28. * 輸出                  : 無
  29. *******************************************************************************/
  30. //void Usart()
  31. //{
  32. //        SCON=0X50;                        //設置為工作方式1,sm0=0,sm1=1,sm2=0,ren=1,高位0101=0X5,低位0X00,224頁
  33. //        TMOD=0X20;                        //設置計數器工作方式2  0010         178頁
  34. //        PCON=0X80;                        //波特率加倍 1000 0000        SMOD=1 225頁
  35. //        TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的,51波特率計算
  36. //        TL1=0XF3;
  37. //        ES=1;                                                //打開接收中斷 149頁ES串口中斷允許位
  38. //        EA=1;                                                //打開總中斷 149頁 EA : CPU的總中斷允許控制位,EA=1
  39. //        TR1=1;                                        //打開計數器 177頁 TR1: 定時器T1的運行控制位
  40. //  
  41. //}

  42. void delay(u16 i)
  43. {
  44.         while(i--);       
  45. }

  46.   void DigDisplay()
  47. {
  48.          u8 j;
  49.          for(j=0;j<8;j++)
  50.          {
  51.                            switch(j)         //位選,選擇點亮的數碼管,
  52.                 {
  53.                         case(0):
  54.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  55.                         case(1):
  56.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  57.                         case(2):
  58.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  59.                         case(3):
  60.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  61.                         case(4):
  62.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  63.                         case(5):
  64.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  65.                         case(6):
  66.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  67.                         case(7):
  68.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位       
  69.                 }
  70.                 GPIO_DIG=DisplayData[j];//發送段碼
  71.                 delay(100); //間隔一段時間掃描       
  72.                 GPIO_DIG=0x00;//消隱
  73.          
  74.          }
  75.    
  76. }
  77. void Int0Init()
  78. {
  79.         //設置INT0
  80.         IT0=1;//跳變沿出發方式(下降沿)
  81.         EX0=1;//打開INT0的中斷允許。       
  82.         EA=1;//打開總中斷       
  83. }


  84. /*******************************************************************************
  85. * 函 數 名         : datapros()
  86. * 函數功能                   : 數據處理轉換函數
  87. * 輸    入         : 無
  88. * 輸    出         : 無
  89. *******************************************************************************/

  90. void datapros()          
  91. {
  92.         static u16 i=0;
  93.         i++;
  94.         if(i==5)  //改變i的數值可調節跳的快慢
  95.         {
  96.                 i=0;
  97.                 TIME ++;       
  98.         }

  99.         DisplayData[0] = 0x00;                               
  100.         DisplayData[1] = smgduan[TIME/1000000];                 
  101.         DisplayData[2] = smgduan[TIME%1000000/100000];
  102.         DisplayData[3] = smgduan[TIME%100000/10000];                               
  103.         DisplayData[4] = smgduan[TIME%10000/1000];       
  104.         DisplayData[5] = smgduan[TIME%1000/100];
  105.         DisplayData[6] = smgduan[TIME%100/10]|0x80;                               
  106.         DisplayData[7] = smgduan[TIME%10];
  107.         if(TIME==2000) TIME=0;          //TIME的數值,計到2000,回0從新開始
  108.        
  109. }
  110. void main()
  111. {

  112.         Int0Init();  //        設置外部中斷0
  113. //        Usart();  //        串口初始化
  114.         while (1)
  115.   {
  116.                     datapros();         //數據處理函數
  117.                            DigDisplay(); //數碼管顯示函數
  118. //                           RI=0;
  119. //                    SBUF=TIME;

  120.         if(TIME>1000)
  121.         {
  122.                       GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  123.                         RED00 = 1;
  124.                         GREEN00 = 1;

  125.                         GREEN11 = 0;    //寶田路綠燈亮                       
  126.                         GREEN10        = 0;    //寶田路人行道綠燈亮

  127.                         RED01 = 0;      //前進路紅燈亮
  128.                         RED00 = 0;      //前進路人行道紅燈亮
  129.         }
  130.         else
  131.         {
  132.                       GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  133.                         RED00 = 1;
  134.                         GREEN00 = 1;

  135.                         YELLOW11 = 0;    //寶田路黃燈亮                       
  136.                         RED10        = 0;     //寶田路人行道紅燈亮

  137.                         YELLOW01 = 0;    //前進路紅燈亮
  138.                         RED00 = 0;       //前進路人行道紅燈亮
  139.         }
  140.   }
  141.          
  142.                        
  143. }
  144. void Int0()        interrupt 0                //外部中斷0的中斷函數
  145. {
  146.         delay(1000);         //延時消抖
  147.         if(k3==0)
  148.         {
  149.                 TIME=520;
  150.         }
  151. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区亚洲 | 成人av免费 | 一区二区三区电影网 | 中国一级特黄真人毛片 | 黄色一级电影在线观看 | 国产高清免费 | www.99热这里只有精品 | 国产精品久久久久久久久久东京 | 成人免费视频网站在线观看 | 蜜桃毛片 | 国产高清视频在线观看播放 | 日韩欧美在线一区 | 搞av.com| 亚洲国产精品久久久久秋霞不卡 | 欧美成人精品 | 一区二区三区 在线 | 国产精品福利久久久 | 龙珠z国语版在线观看 | 国产成人99久久亚洲综合精品 | 三极网站 | 精品二三区 | 免费v片在线观看 | 久久精品成人热国产成 | 久久久日韩精品一区二区三区 | 久国久产久精永久网页 | 6080亚洲精品一区二区 | 在线播放日韩 | av网站免费观看 | 成人天堂噜噜噜 | 天天曰夜夜 | 日韩精品在线播放 | 日韩欧美国产精品 | 欧美一区免费 | 国产精品一区二区在线播放 | 免费毛片网 | 性高湖久久久久久久久 | 羞羞视频在线观免费观看 | 午夜免费电影 | caoporn免费 | 成人h视频在线 | 亚洲一区视频在线 |