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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10223|回復: 5
收起左側

51單片機數碼管顯示時鐘,4×4矩陣鍵盤設置(源程序加仿真)

  [復制鏈接]
ID:248916 發表于 2017-11-14 20:04 | 顯示全部樓層 |閱讀模式
數碼管顯示時間,矩陣鍵盤設置時間(仿真加程序)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ圖片20171114200100.png

0.png

單片機源程序如下:
  1. #include<REG51.H>
  2. #define LED P0//P0為數碼管的段選
  3. #define WS P2//P2為數碼管的位選

  4. char tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};//0~9最后 “—”號

  5. unsigned char sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi;//定義秒,分,時,秒的個位,十位,分的個位,十位,時的個位,十位
  6. unsigned char t;

  7. //---------------------------------------------------------------------
  8. //---------------------------------------------------------------------
  9. void initT0()
  10. {
  11. TMOD=0x01;//定義定時器0工作與方式1
  12. TH0=(65536-5000)/256;//定時器賦初值         
  13. TL0=(65536-5000)%256;         //50ms
  14. EA=1;//開總中斷和T0中斷
  15. ET0=1;
  16. }
  17. void TOint()interrupt 1
  18. {
  19.         TH0=(65536-50000)/256;//定時器賦初值         
  20.         TL0=(65536-50000)%256;
  21.         t++;
  22. }
  23. //--------------------------------延時子函數------------------------------------
  24. void Delay_ms(unsigned int x)                //延時Xms
  25. {
  26.         unsigned int i,j;
  27.         for(i=x;i>0;i--)
  28.                 for(j=110;j>0;j--);
  29. }
  30. //-------------------------------顯示子函數---------------------------------------
  31. void display()
  32. {
  33. //        TR0=1;
  34.           if(t==20)
  35.         {
  36.            t=0;
  37.            sec++;//秒加1
  38.     }
  39.         if(sec==60)//如果秒為60,則清零,分加1
  40.          {
  41.            sec=0;
  42.            min++;
  43.          }
  44.         if(min==60)//如果分為60,則清零,時加1
  45.           {
  46.            min=0;
  47.            hour++;
  48.       }
  49.         if(hour==24)//如果時為24,則清零
  50.          {
  51.           hour=0;
  52.          }

  53. sec_ge=sec%10;//秒的個位和十位
  54. sec_shi=sec/10;
  55. min_ge=min%10;//分的個位和十位
  56. min_shi=min/10;
  57. hour_ge=hour%10;//時的個位和十位
  58. hour_shi=hour/10;

  59. WS=0x80;//循環掃描
  60. LED=tab[sec_ge];
  61. Delay_ms(1);
  62. WS=0x40;
  63. LED=tab[sec_shi];
  64. Delay_ms(1);

  65. //-//0X20
  66. WS=0x20;
  67. LED=tab[10];
  68. Delay_ms(1);

  69. WS=0x10;
  70. LED=tab[min_ge];
  71. Delay_ms(1);
  72. WS=0x08;
  73. LED=tab[min_shi];
  74. Delay_ms(1);

  75. //-//  0X04
  76. WS=0x04;
  77. LED=tab[10];
  78. Delay_ms(1);

  79. WS=0x02;
  80. LED=tab[hour_ge];
  81. Delay_ms(1);
  82. WS=0x01;
  83. LED=tab[hour_shi];
  84. Delay_ms(1);
  85. }

  86. void keyscan()                        
  87.             {
  88.                         unsigned char temp;
  89.                         P1=0xfe;                                        //第一行置低
  90.                         temp=P1;                                           //將P2口的值賦給temp
  91.                         temp=temp&0xf0;                                //將temp跟1111 0000 按位與
  92.                         if(temp!=0xf0)
  93.                         {
  94.                                 Delay_ms(10);
  95.                                 temp=P1;
  96.                                 temp=temp&0xf0;
  97.                                 if(temp!=0xf0)
  98.                                 {
  99.                                         temp=P1;
  100.                                         switch(temp)
  101.                                         {
  102.                                                 case 0xee:
  103.                                                 {
  104.                                                 sec++;
  105.                                                 if(sec==60)
  106.                                                 sec=0;
  107.                                                
  108.                                                 break;
  109.                                                 }
  110.                                                 case 0xde:
  111.                                                  {
  112.                                                         min++;
  113.                                                         if(min==60)
  114.                                                         min=0;
  115.                                                        
  116.                                                         break;
  117.                                              }
  118.                                                 case 0xbe:
  119.                                                  {
  120.                                                    hour++;
  121.                                                   if(hour==24)
  122.                                                         hour=0;
  123.                                                        
  124.                                                    break;
  125.                                                  }
  126.                                                   case 0x7e:
  127.                                                   break;
  128.                                         }
  129.                                         while(temp!=0xf0)
  130.                                         {        TR0=0;
  131.                                                 temp=P1;
  132.                                                 temp=temp&0xf0;
  133.                                         }                       
  134.                                 }
  135.            TR0=1;
  136.         }

  137.         P1=0xfd;                                        //第二行置低
  138.         temp=P1;                                           //將P2口的值賦給temp
  139.         temp=temp&0xf0;                                //將temp跟1111 0000 按位與
  140.         if(temp!=0xf0)
  141.         {
  142.                 Delay_ms(10);
  143.                 temp=P1;
  144.                 temp=temp&0xf0;
  145.                 if(temp!=0xf0)
  146.                 {
  147.                         temp=P1;
  148.                         switch(temp)
  149.                         {
  150.                                 case 0xed:
  151.                                
  152.                                 break;

  153.                                 case 0xdd:
  154.                                
  155.                                 break;

  156.                                 case 0xbd:
  157.                                
  158.                                 break;

  159.                                 case 0x7d:
  160.                                
  161.                                 break;
  162.                         }
  163.                         while(temp!=0xf0)
  164.                         {
  165.                                 temp=P1;
  166.                                 temp=temp&0xf0;
  167.                         }
  168.                 }
  169.         }

  170.         P1=0xfb;                                        //第二行置低
  171.         temp=P1;                                           //將P2口的值賦給temp
  172.         temp=temp&0xf0;                                //將temp跟1111 0000 按位與
  173.         if(temp!=0xf0)
  174.         {
  175.                 Delay_ms(10);
  176.                 temp=P1;
  177.                 temp=temp&0xf0;
  178.                 if(temp!=0xf0)
  179.                 {
  180.                         temp=P1;
  181.                         switch(temp)
  182.                         {
  183.                                 case 0xeb:
  184.                                 break;

  185.                                 case 0xdb:
  186.                                 break;

  187.                                 case 0xbb:
  188.                                
  189.                                 break;

  190.                                 case 0x7b:
  191.                                
  192.                                 break;
  193.                         }
  194.                         while(temp!=0xf0)
  195.                         {
  196.                                 temp=P1;
  197.                                 temp=temp&0xf0;
  198.                         }
  199.                 }
  200.         }

  201.         P1=0xf7;                                        //第二行置低
  202.         temp=P1;                                           //將P2口的值賦給temp
  203.         temp=temp&0xf0;                                //將temp跟1111 0000 按位與
  204.         if(temp!=0xf0)
  205.         {
  206.                 Delay_ms(10);
  207.                 temp=P1;
  208.                 temp=temp&0xf0;
  209.                 if(temp!=0xf0)
  210.                 {
  211.                         temp=P1;
  212.                         switch(temp)
  213.                         {
  214.                                 case 0xe7:
  215.                                
  216.                                 break;

  217.                                 case 0xd7:
  218.                                
  219.                                 break;

  220.                                 case 0xb7:
  221. ……………………

  222. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
數碼管顯示時間4×4鍵盤矩陣按鍵.rar (49.83 KB, 下載次數: 148)
回復

使用道具 舉報

ID:250151 發表于 2017-11-16 19:41 來自手機 | 顯示全部樓層
收一波
回復

使用道具 舉報

ID:250176 發表于 2017-11-16 20:20 | 顯示全部樓層
學習中
回復

使用道具 舉報

ID:304767 發表于 2018-4-9 22:47 | 顯示全部樓層
這不是52的單片機嗎
回復

使用道具 舉報

ID:299355 發表于 2018-5-22 18:44 | 顯示全部樓層
蘇秦 發表于 2018-4-9 22:47
這不是52的單片機嗎

51和52程序上的區別為0
回復

使用道具 舉報

ID:439430 發表于 2018-12-4 21:26 來自手機 | 顯示全部樓層
請問有實現設置時間按那個鍵就顯示那個鍵的么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97人人爱 | 欧美激情 一区 | 黄色国产区| 午夜精品久久久久久久久久久久久 | 亚洲精彩视频 | 亚洲精品一区二区三区免 | 北条麻妃一区二区三区在线视频 | 日韩一区二区三区视频 | 亚洲在线一区二区 | 精国产品一区二区三区四季综 | 美女黄色在线观看 | 在线视频一区二区三区 | 中文字幕国产精品 | 男女羞羞视频在线看 | 亚洲精品亚洲人成人网 | h在线 | 国产三级国产精品 | 黄色一级大片在线免费看产 | 国产99在线 | 欧美 | 日一区二区 | 一级高清视频 | 欧美久久视频 | 精品一二三 | 免费的色网站 | 天天碰夜夜操 | 成人高清在线 | 伊人网站在线观看 | 一二三四在线视频观看社区 | 欧美视频三区 | 中文字幕日韩一区 | 欧美黄色片在线观看 | 亚州精品天堂中文字幕 | 国产农村妇女毛片精品久久麻豆 | 午夜精品一区二区三区在线观看 | 久久极品 | 日韩一二区在线 | 国产精品久久亚洲 | 欧美一区二区三区在线观看视频 | 激情的网站 | 亚洲国产精品99久久久久久久久 | 国产精品欧美精品 |