找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2036|回復(fù): 0
收起左側(cè)

動態(tài)數(shù)碼管計數(shù)+串口+計數(shù)控制

[復(fù)制鏈接]
ID:262845 發(fā)表于 2017-12-20 14:50 | 顯示全部樓層 |閱讀模式
這是我上個月做的代碼,
內(nèi)有源代碼,
請多多指導(dǎo)。
  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段的數(shù)碼管)

  24. /*******************************************************************************
  25. * 函數(shù)名         :UsartInit()
  26. * 函數(shù)功能                   :設(shè)置串口
  27. * 輸入           : 無
  28. * 輸出                  : 無
  29. *******************************************************************************/
  30. //void Usart()
  31. //{
  32. //        SCON=0X50;                        //設(shè)置為工作方式1,sm0=0,sm1=1,sm2=0,ren=1,高位0101=0X5,低位0X00,224頁
  33. //        TMOD=0X20;                        //設(shè)置計數(shù)器工作方式2  0010         178頁
  34. //        PCON=0X80;                        //波特率加倍 1000 0000        SMOD=1 225頁
  35. //        TH1=0XF3;                                //計數(shù)器初始值設(shè)置,注意波特率是4800的,51波特率計算
  36. //        TL1=0XF3;
  37. //        ES=1;                                                //打開接收中斷 149頁ES串口中斷允許位
  38. //        EA=1;                                                //打開總中斷 149頁 EA : CPU的總中斷允許控制位,EA=1
  39. //        TR1=1;                                        //打開計數(shù)器 177頁 TR1: 定時器T1的運(yùn)行控制位
  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)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  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];//發(fā)送段碼
  71.                 delay(100); //間隔一段時間掃描       
  72.                 GPIO_DIG=0x00;//消隱
  73.          
  74.          }
  75.    
  76. }
  77. void Int0Init()
  78. {
  79.         //設(shè)置INT0
  80.         IT0=1;//跳變沿出發(fā)方式(下降沿)
  81.         EX0=1;//打開INT0的中斷允許。       
  82.         EA=1;//打開總中斷       
  83. }


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

  90. void datapros()          
  91. {
  92.         static u16 i=0;
  93.         i++;
  94.         if(i==5)  //改變i的數(shù)值可調(diào)節(jié)跳的快慢
  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的數(shù)值,計到2000,回0從新開始
  108.        
  109. }
  110. void main()
  111. {

  112.         Int0Init();  //        設(shè)置外部中斷0
  113. //        Usart();  //        串口初始化
  114.         while (1)
  115.   {
  116.                     datapros();         //數(shù)據(jù)處理函數(shù)
  117.                            DigDisplay(); //數(shù)碼管顯示函數(shù)
  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;      //前進(jìn)路紅燈亮
  128.                         RED00 = 0;      //前進(jìn)路人行道紅燈亮
  129.         }
  130.         else
  131.         {
  132.                       GPIO_TRAFFIC = 0xFF;  //將所有的燈熄滅
  133.                         RED00 = 1;
  134.                         GREEN00 = 1;

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

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


回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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