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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)數(shù)碼管的拉幕程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72519 發(fā)表于 2015-1-23 00:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這段時間在想著數(shù)碼管的拉幕,很久沒有弄單片機(jī)了,想著不如讓單片機(jī)實現(xiàn)一些小的程序玩玩,也算是鍛煉鍛煉;
拉幕原理是一組數(shù)據(jù)是由很多幀組成的,完成一幀后,延時一段時間,再取下一幀數(shù)據(jù),如此循環(huán);
原理明白了,前天晚上通過編寫調(diào)試就成功實了數(shù)碼管的拉幕;
  1. //#pragma src(signle.a51)

  2. #include <reg52.h>
  3. #include <display.c>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. //sfr PCON = 0x87h;
  7. sbit Key1 = P3^2;
  8. sbit BUZ = P3^1;

  9. sbit Signle = P3^0;
  10. sbit Led0  = P1^0;
  11. sbit JDQ  = P1^2;
  12. sbit Dp = P1^5;
  13. sbit SMG1 = P3^7;
  14. sbit SMG2 = P3^5;
  15. sbit SMG3 = P3^4;
  16. sbit SMG4 = P3^3;
  17. uint Key_count;
  18. uchar Beep_time,Key_flag,BTime_Flag,JDQ_flag,BP_Count,LM_Count,LM_GroupCNT;
  19. uchar BT_Sec,Sec,Min,Hour,Key_Select,Key_long_flag,Key_long_count;
  20. uchar Led_Scan,Led_Loop,Sec_1,Min_1,BT_Sec_1;
  21. uint Time_value;
  22. //uchar Display_number[]={0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f,0x00};
  23. uchar Display_number[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0xff}; //0123456789
  24. uchar Display_string[]={0xff,0xff,0xff,0xeb,0x61,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//0001HZ00000
  25. //-----------------------------
  26. //4COM 共陽數(shù)碼管 1234
  27. //P1.0 A;    |---|
  28. //P1.2 B;    |   |
  29. //P1.4 C;    |---|
  30. //P1.6 D;    |   |
  31. //P1.7 E;    |---|
  32. //P1.1 F;
  33. //P1.3 G;
  34. //P1.5 Dp;
  35. //-----------------------------
  36. void display_Scan(void);
  37. void Delay_ms();
  38. void Delay_ms(uint Tms)
  39. {
  40.   uint i,j;
  41.   for(i=Tms;i>0;i--)
  42.   for(j=1220;j>0;j--)
  43.   {;}
  44. }
  45. void Delay_us(uint Tus)
  46. {
  47.   while(--Tus);
  48. }
  49. void Buz(void)
  50.   {
  51.     uint i;
  52.     for(i=0;i<200;i++)
  53.     {
  54.       BUZ=~BUZ;
  55.      Delay_us(150);
  56.     }
  57.     BUZ=0;
  58.   }
  59. void Beep_Bi(void)
  60. {
  61.   if(Beep_time!=0)
  62.   {
  63.    Beep_time--;
  64.    BUZ=~BUZ;
  65.   }
  66.   else
  67.   {
  68.    BUZ=0;
  69.   }
  70. }
  71. void T0_ini()
  72. {
  73.    TMOD=0x12;
  74.   TH1=(65536-1000)/256;
  75.   TL1=(65536-1000)%256;
  76.   TR1=1;
  77.   ET1=1;
  78.   TH0=6;
  79.   TL0=6;
  80.   TR0=0;
  81.   ET0=1;
  82.   EA=1;
  83. }
  84. void TM0(void)interrupt 1
  85. {
  86.   uint Time_Count;
  87.   TF0=0;
  88.   Time_Count++;
  89.   BP_Count++;
  90.   if(BP_Count==2)
  91.   {
  92.    BP_Count=0;
  93.    Beep_Bi();
  94.   }
  95.     //if(Time_Count==2000) // ext atxl 12MHz;500ms
  96.   if(Time_Count==1333) // ext atxl 8MHz 500ms;
  97.   //if(Time_Count==998) // built in atxl; 500ms
  98.     {
  99.    Time_Count=0;
  100.    BTime_Flag=~BTime_Flag;
  101.    BT_Sec++;Dp=~Dp;BT_Sec_1++;
  102.    Signle=~Signle;
  103.    if(Key_flag==1)
  104.    {
  105.     BT_Sec=0;
  106.     if(BT_Sec_1==2)
  107.     {
  108.    
  109.       BT_Sec_1=0;
  110.      Sec_1++;
  111.      if(Sec_1==60)
  112.      {
  113.       Sec_1=0;Min_1++;
  114.      }
  115.      if(Min_1==60)
  116.      {
  117.       Min_1=0;
  118.      }
  119.     }
  120.    }
  121.   }
  122.   if(BT_Sec==2)
  123.   {
  124.    BT_Sec=0;
  125.    Sec++;
  126.    if(Sec==60)
  127.    {
  128.     Sec=0;Min++;
  129.    }
  130.      if(Min==60)        
  131.    {
  132.     Min=0;Hour++;
  133.    }
  134.    if(Hour==24)
  135.    {
  136.     Hour=0;
  137.    }
  138.   }
  139. }
  140. void TM1(void)interrupt 3
  141. {
  142.   TH1=(65536-1000)/256;
  143.   TL1=(65536-1000)%256;
  144.   Led_Scan=1;Led_Loop++;Led_Loop=Led_Loop&0x03;
  145.     Key1=1;
  146.     if(Key1==0)
  147.     {
  148.      Key_count++;
  149.    if(Key_count==20)
  150.    {
  151.      Beep_time=50;
  152.      Key_flag=1;
  153.      TR0=1;
  154.      Key_Select++;
  155.      if(Key_Select==3)
  156.      {
  157.       Key_Select=0;Key_flag=0;
  158.      }
  159.    }
  160.    if(Key_count>=20*50)
  161.    {     
  162.     Key_count=500; // 設(shè)置長按快跳進(jìn)度
  163.     Key_long_flag=1;
  164.     {
  165.      if(Key_Select==1)
  166.      {
  167.       Min++;
  168.       if(Min==60)
  169.       Min=0;
  170.      }
  171.      if(Key_Select==2)
  172.      {
  173.       Hour++;
  174.       if(Hour==24)
  175.       Hour=0;
  176.      }
  177.     }
  178.    }
  179.   }
  180.      else
  181.    {Key_count=0;Key_long_flag=0;}
  182.    }
  183.   void SmgDisp(uchar ch,uchar num)
  184.   {
  185.   uchar number;
  186.   number=num;
  187.   //P3=0x03;
  188.   P1=0xff;
  189.   SMG1=0;SMG2=0;SMG3=0;SMG4=0;
  190.   switch(ch)
  191.   {
  192.    case 1:SMG4=1;LM_Count=0;break;    //SMG排列 1 2 3 4 第四個數(shù)碼管
  193.    case 2:SMG3=1;LM_Count++;break;    //SMG排列 1 2 3 4 第三個數(shù)碼管
  194.    case 3:SMG2=1;LM_Count++;break;    //SMG排列 1 2 3 4 第二個數(shù)碼管
  195.    case 4:SMG1=1;LM_Count++;break;    //SMG排列 1 2 3 4 第一個數(shù)碼管
  196.    default:break;
  197.   }
  198.    //P1=Display_number[number];
  199.   P1=Display_string[number];
  200.   }
  201.   void CheckTime()
  202.   {
  203.   if(Led_Scan)
  204.   {
  205.    switch(Led_Loop)
  206.    {
  207.     case 0:SmgDisp(4,LM_Count+LM_GroupCNT);break; //第一個數(shù)碼管
  208.     case 1:SmgDisp(3,LM_Count+LM_GroupCNT);break; //第二個數(shù)碼管
  209.     case 2:SmgDisp(2,LM_Count+LM_GroupCNT);break; //第三個數(shù)碼管
  210.     case 3:SmgDisp(1,LM_Count+LM_GroupCNT);break; //第四個數(shù)碼管
  211.    }
  212.      Led_Scan=0;
  213.   }
  214.   }
  215. void Display(void)
  216. {
  217.   if(BTime_Flag&(Key_Select==2)&(Key_long_flag==0))
  218.    {
  219.    P1=0xff;SMG1=0;SMG2=0;SMG3=0;SMG4=0;
  220.    //P3=0x00;
  221.   }
  222.   else
  223.   {
  224.    if(BTime_Flag)
  225.   {
  226.    Dp=0;SMG1=1;//P3=0x80;
  227.    Delay_ms(1);SMG1=0;//P3=0x00;
  228.    Dp=0;SMG2=1;//P3=0x20;
  229.    Delay_ms(1);SMG2=0;//P3=0x00;
  230.   }
  231.   P1=Display_number[Hour/10];
  232.    SMG1=1;//P3=0x80;
  233.   Delay_ms(1);
  234.    SMG1=0;//P3=0x00;
  235.    P1=0xff;
  236.    P1=Display_number[Hour%10];
  237.    SMG2=1;//P3=0x20;
  238.    Delay_ms(1);
  239.    SMG2=0;//P3=0x00;
  240.    P1=0xff;
  241.   }
  242.   if(BTime_Flag&(Key_Select==1)&(Key_long_flag==0))
  243.    {
  244.    P1=0xff;SMG1=0;SMG2=0;SMG3=0;SMG4=0;//P3=0x00;
  245.   }
  246.   else
  247.   {
  248.    if(BTime_Flag)
  249.   {
  250.    Dp=0;SMG3=1;//P3=0x10;
  251.    Delay_ms(1);SMG3=0;//P3=0x00;
  252.    Dp=0;SMG4=1;//P3=0x08;
  253.    Delay_ms(1);SMG4=0;//P3=0x00;
  254.   }
  255.   
  256.   P1=Display_number[Min/10];
  257.    SMG3=1;//P3=0x10;
  258.    Delay_ms(1);
  259.    SMG3=0;//P3=0x00;
  260.    P1=0xff;
  261.    P1=Display_number[Min%10];
  262.    SMG4=1;//P3=0x08;
  263.    Delay_ms(1);
  264.    SMG4=0;//P3=0x00;
  265.    P1=0xff;
  266.   }
  267. }
  268. void exint0(void)interrupt 0
  269. {
  270.   Buz();T0_ini();EX0=0;EA=1;
  271. }
  272.   
  273.   void Display_Scan(void)
  274. {  
  275.   P1=0x00;
  276.   P3=0x00;
  277. //---------"A"--------------
  278.   //P1=0x01;
  279.   P1=0xfe;
  280.   P3=0x80;   //smg1
  281.   Delay_ms(1);
  282.   P1=0xff;
  283.   P3=0x00;
  284.   P1=0xfe;
  285.   P3=0x20;   //smg2
  286.   Delay_ms(1);
  287.   P1=0xff;
  288.   P3=0x00;
  289.   P1=0xfe;
  290.   P3=0x10;   //smg3
  291.   Delay_ms(1);
  292.   P1=0xff;
  293.   P3=0x00;
  294.   P1=0xfe;
  295.   P3=0x08;   //smg4
  296.   Delay_ms(1);
  297.   P1=0xff;
  298.   P3=0x00;
  299.   P1=0xfe;
  300.   Delay_ms(50);
  301. //---------"B"--------------
  302.   P1=0xfb;
  303.   P3=0x80;
  304.   Delay_ms(1);
  305.   P1=0xff;
  306.   P3=0x00;
  307.   P1=0xfb;
  308.   P3=0x20;
  309.   Delay_ms(1);
  310.   P1=0xff;
  311.   P3=0x00;
  312.   P1=0xfb;
  313.   P3=0x10;
  314.   Delay_ms(1);
  315.   P1=0xff;
  316.   P3=0x00;
  317.   P1=0xfb;
  318.   P3=0x08;
  319.   Delay_ms(1);
  320.   P1=0xfb;
  321.   P1=0xff;
  322.   P3=0x00;
  323.   Delay_ms(50);
  324. //---------"C"--------------
  325.   //P1=0x10;
  326.   P1=0xef;
  327.   P3=0x80;
  328.   Delay_ms(1);
  329.   P1=0xff;
  330.   P3=0x00;
  331.   P1=0xef;
  332.   P3=0x20;
  333.   Delay_ms(1);
  334.   P1=0xff;
  335.   P3=0x00;
  336.   P1=0xef;
  337.   P3=0x10;
  338.   Delay_ms(1);
  339.   P1=0xff;
  340.   P3=0x00;
  341.   P1=0xef;
  342.   P3=0x08;
  343.   Delay_ms(1);
  344.   P1=0xef;
  345.   P1=0xff;
  346.   P3=0x00;
  347.   Delay_ms(50);
  348. //---------"D"--------------
  349.   P1=0xcf;
  350.   P3=0x80;
  351.   Delay_ms(1);
  352.   P1=0xff;
  353.   P3=0x00;
  354.   P1=0xcf;
  355.   P3=0x20;
  356.   Delay_ms(1);
  357.   P1=0xff;
  358.   P3=0x00;
  359.   P1=0xcf;
  360.   P3=0x10;
  361.   Delay_ms(1);
  362.   P1=0xff;
  363.   P3=0x00;
  364.   P1=0xcf;
  365.   P3=0x08;
  366.   Delay_ms(1);
  367.   P1=0xff;
  368.   P3=0x00;
  369.   Delay_ms(50);
  370. //---------"E"--------------
  371.   P1=0x7f;
  372.   P3=0x80;
  373.   Delay_ms(1);
  374.   P1=0xff;
  375.   P3=0x00;
  376.   P1=0x7f;
  377.   P3=0x20;
  378.   Delay_ms(1);
  379.   P1=0xff;
  380.   P3=0x00;
  381.   P1=0x7f;
  382.   P3=0x10;
  383.   Delay_ms(1);
  384.   P1=0xff;
  385.   P3=0x00;
  386.   P1=0x7f;
  387.   P3=0x08;
  388.   Delay_ms(1);
  389.   P1=0xff;
  390.   P3=0x00;
  391.   Delay_ms(50);
  392. //---------"F"--------------
  393.   P1=0xfd;
  394.   P3=0x80;
  395.   Delay_ms(1);
  396.   P1=0xff;
  397.   P3=0x00;
  398.   P1=0xfd;
  399.   P3=0x20;
  400.   Delay_ms(1);
  401.   P1=0xff;
  402.   P3=0x00;
  403.   P1=0xfd;
  404.   P3=0x10;
  405.   Delay_ms(1);
  406.   P1=0xff;
  407.   P3=0x00;
  408.   P1=0xfd;
  409.   P3=0x08;
  410.   Delay_ms(1);
  411.   P1=0xff;
  412.   P3=0x00;
  413.   Delay_ms(50);
  414. //---------"G"--------------
  415.   P1=0xf7;
  416.   P3=0x80;
  417.   Delay_ms(1);
  418.   P1=0xff;
  419.   P3=0x00;
  420.   P1=0xf7;
  421.   P3=0x20;
  422.   Delay_ms(1);
  423.   P1=0xff;
  424.   P3=0x00;
  425.   P1=0xf7;
  426.   P3=0x10;
  427.   Delay_ms(1);
  428.   P1=0xf7;
  429.   P3=0x08;
  430.   P1=0xff;
  431.   P3=0x00;
  432.   Delay_ms(20);
  433.   P1=0x00;
  434.   P3=0xfc;
  435.   Delay_ms(100);
  436.   P1=0xff;
  437.   P3=0x00;
  438.   Delay_ms(100);
  439.   P1=0x00;
  440.   P3=0xfc;
  441.   Delay_ms(100);
  442. //------------------------------
  443.   P1=0x00;
  444.   P3=0x80;
  445.   Delay_ms(30);   //smg1
  446.   P1=0x00;
  447.   P3=0x20;
  448.   Delay_ms(30); //smg2
  449.   P1=0x00;
  450.   P3=0x10;
  451.   Delay_ms(30); //smg3
  452.   P1=0x00;
  453.   P3=0x08;  //smg4
  454.   Delay_ms(30);
  455.   P1=0x00;
  456.   P3=0xfc;
  457.   Delay_ms(100);
  458.   P1=0xff;
  459.   P3=0x00;
  460.   Delay_ms(100);
  461.   P1=0x00;
  462.   P3=0xfc;
  463.   Delay_ms(100);
  464. }
  465. void main(void)
  466. {
  467.    uint k;
  468.   Buz();Display_Scan();                                                                           
  469.    T0_ini();
  470.    while(1)
  471.    {
  472. //-------------按鍵小于2次有分鐘睡眠模式-----------------
  473.   /*if(Min_1==4)
  474.   {
  475.    EX0=1;
  476.    EA=1;
  477.    Key_flag=0;
  478.    Min_1=0;                     
  479.    Signle=1;
  480.    TR0=1;
  481.    PCON=0x02;
  482.   } */
  483. //---------------------------------------------------------
  484.    if(Sec%10==0)
  485.    {  
  486.      for(LM_GroupCNT=0;LM_GroupCNT<8;LM_GroupCNT++)
  487.     {
  488.      for(k=55555;k>0;k--)
  489.      {
  490.       CheckTime();
  491.      }
  492.     }
  493.    }
  494.    else
  495.    Display();
  496.    //Delay_ms(370);
  497.   //Dp=~Dp;
  498.   //Signle=~Signle;
  499.   //Delay_ms(1);
  500.    }
  501. }
復(fù)制代碼



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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产综合久久久久久首页 | 先锋资源在线 | 久久综合狠狠综合久久 | 在线看av网址 | 国产精品不卡 | 91久久北条麻妃一区二区三区 | 欧美男人天堂 | 久色视频在线观看 | 国产不卡视频在线 | 天天操夜夜操 | 国产一区二区免费 | 国产成人精品免费视频大全最热 | 蜜桃精品噜噜噜成人av | 免费观看av | 国产欧美在线一区二区 | 九九综合 | 一级黄色毛片子 | 日韩一区二区三区在线观看 | 成人激情视频免费观看 | 精品免费国产视频 | 国产视频在线一区二区 | 午夜精品一区二区三区免费视频 | 龙珠z在线观看 | 三级成人片 | 99久久国产精 | 欧美一级二级视频 | 欧美日韩国产中文字幕 | 亚洲视频免费在线观看 | 亚洲精品久久久久久下一站 | 日韩精品在线看 | 久久久久久免费毛片精品 | 国外激情av | 91爱啪啪| 欧美日韩1区2区 | 国产欧美日韩一区二区三区 | 久久国产精品免费视频 | 偷拍第一页 | 国产91综合一区在线观看 | 精品久久不卡 | 精品久久久久久久人人人人传媒 | 午夜码电影 |